"use strict";
(() => {
var exports = {};
exports.id = 1087;
exports.ids = [1087,7206,9516];
exports.modules = {

/***/ 706498:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ IntegerSlider)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(545725);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(616689);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _cocalc_util_theme__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(990821);




function IntegerSlider({ value , onChange , min , max , maxText , defaultValue , initialValue , units , presets , disabled =false , step =1  }) {
    function toNumber(x) {
        return typeof x === "number" ? x : min;
    }
    const { 0: val , 1: setVal  } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(value ?? initialValue ?? defaultValue ?? min);
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
        children: [
            /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(antd__WEBPACK_IMPORTED_MODULE_1__.Row, {
                children: [
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Col, {
                        span: 12,
                        children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Slider, {
                            disabled: disabled,
                            style: {
                                width: "100%"
                            },
                            min: min,
                            max: max,
                            onChange: (x)=>{
                                onChange(x);
                                setVal(x);
                            },
                            value: value != null ? toNumber(value) : val,
                            defaultValue: initialValue,
                            step: step
                        })
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(antd__WEBPACK_IMPORTED_MODULE_1__.Col, {
                        span: 12,
                        children: [
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.InputNumber, {
                                min: min,
                                max: maxText ?? max,
                                step: step,
                                disabled: disabled,
                                style: {
                                    marginLeft: "16px",
                                    marginBottom: "5px",
                                    minWidth: "8ex",
                                    width: "20ex"
                                },
                                defaultValue: initialValue,
                                value: value ?? val,
                                onChange: (value)=>{
                                    let val = toNumber(value);
                                    if (step !== 1) {
                                        // quantize val to a multiple of step
                                        val = Math.round(val / step) * step;
                                    }
                                    onChange(val);
                                    setVal(val);
                                },
                                addonAfter: units
                            }),
                            defaultValue != null && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(antd__WEBPACK_IMPORTED_MODULE_1__.Button, {
                                type: "dashed",
                                disabled: disabled || (value ?? val) == defaultValue,
                                style: {
                                    marginLeft: "5px"
                                },
                                onClick: ()=>{
                                    onChange(defaultValue);
                                    setVal(defaultValue);
                                },
                                children: [
                                    "Default: ",
                                    defaultValue
                                ]
                            })
                        ]
                    })
                ]
            }),
            presets && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                children: presets.map((number)=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Tag, {
                        color: disabled ? _cocalc_util_theme__WEBPACK_IMPORTED_MODULE_3__/* .COLORS.GRAY_LL */ .DM.GRAY_LL : "blue",
                        style: {
                            cursor: disabled ? "not-allowed" : "pointer"
                        },
                        onClick: ()=>{
                            if (disabled) return;
                            onChange(number);
                            setVal(number);
                        },
                        children: number
                    }, number))
            })
        ]
    });
}


/***/ }),

/***/ 505584:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Uo": () => (/* binding */ encodeFormValues),
/* harmony export */   "Zm": () => (/* binding */ decodeFormValues),
/* harmony export */   "d9": () => (/* binding */ ALL_FIELDS),
/* harmony export */   "ts": () => (/* binding */ encodeRange)
/* harmony export */ });
/* harmony import */ var _cocalc_util_licenses_check_disk_name_basics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(478313);
/* harmony import */ var _cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(872228);
/* harmony import */ var _cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _cocalc_util_upgrades_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(191982);
/* harmony import */ var _cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(473009);
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(546517);
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(501635);
/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _run_limit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(113591);
/*
 *  This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */ 






// Various support functions for storing quota parameters as a query parameter in the browser URL
function encodeRange(vals) {
    // the list of val is encoded as YYYY-MM-DD and separated by a comma
    // this happens after the "correction" of timestamps in the range selector
    // that's why here is (yet again) some rounding to the start/end of the day.
    const start = vals[0] != null ? dayjs__WEBPACK_IMPORTED_MODULE_5___default()((0,_cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1__.roundToMidnight)(vals[0], "start"))?.format("YYYY-MM-DD") : null;
    const end = vals[1] != null ? dayjs__WEBPACK_IMPORTED_MODULE_5___default()((0,_cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1__.roundToMidnight)(vals[1], "end"))?.format("YYYY-MM-DD") : null;
    if (start != null && end != null) {
        return [
            start,
            end
        ].join("_");
    } else {
        return "";
    }
}
// the inverse of encodeRange
function decodeRange(val) {
    const vals = val.split("_");
    const [start, end] = [
        (0,_cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1__.startOfDay)(vals[0]),
        (0,_cocalc_util_stripe_timecalcs__WEBPACK_IMPORTED_MODULE_1__.endOfDay)(vals[1])
    ];
    // if start and end are Date objects, return them
    if (start instanceof Date && end instanceof Date) {
        return [
            start,
            end
        ];
    } else {
        return [
            undefined,
            undefined
        ];
    }
}
const COMMON_FIELDS = [
    "user",
    "period",
    "range"
];
const REGULAR_FIELDS = [
    ...COMMON_FIELDS,
    "run_limit",
    "member",
    "uptime",
    "cpu",
    "ram",
    "disk", 
];
const DEDICATED_FIELDS = [
    ...COMMON_FIELDS,
    "disk-size_gb",
    "disk-name",
    "disk-speed",
    "vm-machine", 
];
function getFormFields(type) {
    switch(type){
        case "regular":
        case "boost":
            return REGULAR_FIELDS;
        case "dedicated":
            return DEDICATED_FIELDS;
    }
}
const ALL_FIELDS = new Set(REGULAR_FIELDS.concat(DEDICATED_FIELDS).concat([
    "type"
]));
function encodeFormValues(router, vals, type) {
    const { query  } = router;
    for(const key in vals){
        if (!getFormFields(type).includes(key)) continue;
        const val = vals[key];
        if (val == null) {
            delete query[key];
        } else if (key === "range") {
            query[key] = encodeRange(val);
        } else {
            query[key] = val;
        }
    }
    router.replace({
        query
    }, undefined, {
        shallow: true,
        scroll: false
    });
}
function decodeValue(val) {
    if (val === "true") return true;
    if (val === "false") return false;
    const num = Number(val);
    if (!isNaN(num)) return num;
    return val;
}
function fixNumVal(val, param) {
    if (typeof val !== "number") {
        return param.dflt;
    } else {
        return (0,lodash__WEBPACK_IMPORTED_MODULE_4__.clamp)(val, param.min, param.max);
    }
}
/** a query looks like this:
 * user=academic&period=monthly&run_limit=1&member=true&uptime=short&cpu=1&ram=2&disk=3
 *
 * NOTE: the support for dedicated disk & vm does not work. the form is too complicated, not no need to support this yet.
 */ function decodeFormValues(router, type) {
    const P = type === "boost" ? _cocalc_util_upgrades_consts__WEBPACK_IMPORTED_MODULE_2__/* .BOOST */ .ej : _cocalc_util_upgrades_consts__WEBPACK_IMPORTED_MODULE_2__/* .REGULAR */ .iD;
    const fields = getFormFields(type);
    const data = {};
    for(const key in router.query){
        const val = router.query[key];
        if (!fields.includes(key)) continue;
        if (typeof val !== "string") continue;
        data[key] = key === "range" ? decodeRange(val) : decodeValue(val);
    }
    // we also have to sanitize the values
    for(const key1 in data){
        const val1 = data[key1];
        switch(key1){
            case "user":
                if (![
                    "academic",
                    "business"
                ].includes(val1)) {
                    data[key1] = "academic";
                }
                break;
            case "period":
                if (![
                    "monthly",
                    "yearly",
                    "range"
                ].includes(val1)) {
                    data[key1] = "monthly";
                }
                break;
            case "range":
                // check that val is an array of length 2 and both entries are Date objects
                if (!Array.isArray(val1) || val1.length !== 2 || !val1.every(lodash__WEBPACK_IMPORTED_MODULE_4__.isDate)) {
                    data[key1] = [
                        undefined,
                        undefined
                    ];
                }
                break;
            case "run_limit":
                // check that val is a number and in the range of 1 to 1000
                if (typeof val1 !== "number" || val1 < 1 || val1 > _run_limit__WEBPACK_IMPORTED_MODULE_6__/* .MAX_ALLOWED_RUN_LIMIT */ .v3) {
                    data[key1] = 1;
                }
                break;
            case "member":
                if (typeof val1 !== "boolean") {
                    data[key1] = true;
                }
                break;
            case "uptime":
                if (![
                    "short",
                    "medium",
                    "day",
                    "always_running"
                ].includes(val1)) {
                    data[key1] = "short";
                }
                break;
            case "cpu":
                data[key1] = fixNumVal(val1, P.cpu);
                break;
            case "ram":
                data[key1] = fixNumVal(val1, P.ram);
                break;
            case "disk":
                data[key1] = fixNumVal(val1, P.disk);
                break;
            case "disk-size_gb":
                if (typeof val1 !== "number" || !_cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__.DEDICATED_DISK_SIZES.includes(val1)) {
                    data[key1] = _cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DEDICATED_DISK_SIZE;
                }
                break;
            case "disk-name":
                try {
                    (0,_cocalc_util_licenses_check_disk_name_basics__WEBPACK_IMPORTED_MODULE_0__/* .testDedicatedDiskNameBasic */ .o)(val1);
                } catch  {
                    data[key1] = "";
                }
                break;
            case "disk-speed":
                if (!_cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__.DEDICATED_DISK_SPEEDS.includes(val1)) {
                    data[key1] = _cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DEDICATED_DISK_SPEED;
                }
                break;
            case "vm-machine":
                if (_cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__.PRICES.vms[val1] == null) {
                    data[key1] = _cocalc_util_upgrades_dedicated__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DEDICATED_VM_MACHINE;
                }
                break;
            default:
                console.log(`decodingFormValues: unknown key '${key1}'`);
                delete data[key1];
        }
    }
    // hosting quality vs. uptime restriction:
    if ([
        "always_running",
        "day"
    ].includes(data["uptime"])) {
        data["member"] = true;
    }
    if (type === "dedicated") {
        data["type"] = data["vm-machine"] != null ? "vm" : null;
        // if any key in data starts with "disk-" then set data["type"] to "disk"
        if (data["type"] == null) {
            for(const key2 in data){
                if (key2.startsWith("disk-")) {
                    data["type"] = "disk";
                    break;
                }
            }
        }
        if (data["type"] === "disk") {
            data["period"] = "monthly";
        }
        if (data["type"] === "vm") {
            data["period"] = "range";
        }
    }
    return data;
}


/***/ }),

/***/ 113591:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "p_": () => (/* binding */ EditRunLimit),
/* harmony export */   "v3": () => (/* binding */ MAX_ALLOWED_RUN_LIMIT),
/* harmony export */   "wR": () => (/* binding */ RunLimit)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(545725);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var components_misc_A__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(940981);
/* harmony import */ var components_misc_integer_slider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(706498);
/*
 *  This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */ 



const MAX_ALLOWED_RUN_LIMIT = 10000;
function RunLimit({ showExplanations , form , onChange , disabled =false , boost =false ,  }) {
    function extra() {
        if (!showExplanations) return;
        return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
            style: {
                marginTop: "5px"
            },
            children: [
                boost ? /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                    style: {
                        fontWeight: "bold"
                    },
                    children: "It's not necessary to match the run limit of the license you want to boost!"
                }) : undefined,
                "Simultaneously run this many projects using this license. You, and anyone you share the license code with, can apply the license to an unlimited number of projects, but it will only be used up to the run limit. When",
                " ",
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
                    href: "https://doc.cocalc.com/teaching-instructors.html",
                    children: "teaching a course"
                }),
                ",",
                " ",
                /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("b", {
                    children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("i", {
                        children: "the run limit is typically 2 more than the number of students"
                    })
                }),
                "."
            ]
        });
    }
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
        children: [
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Divider, {
                plain: true,
                children: "Maximum number of simultaneously upgraded projects"
            }),
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_1__.Form.Item, {
                label: "Run Limit",
                name: "run_limit",
                initialValue: 1,
                extra: extra(),
                children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(EditRunLimit, {
                    disabled: disabled,
                    onChange: (run_limit)=>{
                        form.setFieldsValue({
                            run_limit
                        });
                        onChange();
                    }
                })
            })
        ]
    });
}
function EditRunLimit({ value , onChange , disabled  }) {
    return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_integer_slider__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, {
        value: value,
        min: 1,
        disabled: disabled,
        max: 300,
        maxText: MAX_ALLOWED_RUN_LIMIT,
        onChange: onChange,
        units: "projects",
        presets: [
            1,
            2,
            10,
            50,
            100,
            250,
            500
        ]
    });
}


/***/ }),

/***/ 707594:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ Courses),
/* harmony export */   "getServerSideProps": () => (/* binding */ getServerSideProps)
/* harmony export */ });
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(920997);
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _cocalc_frontend_components_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(807772);
/* harmony import */ var _cocalc_util_consts_site_license__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(856343);
/* harmony import */ var _cocalc_util_licenses_purchase_compute_cost__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(182961);
/* harmony import */ var _cocalc_util_licenses_purchase_consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(847533);
/* harmony import */ var _cocalc_util_licenses_purchase_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(221460);
/* harmony import */ var _cocalc_util_theme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(990821);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(545725);
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var components_landing_footer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(831910);
/* harmony import */ var components_landing_head__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(373306);
/* harmony import */ var components_landing_header__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(131498);
/* harmony import */ var components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(520285);
/* harmony import */ var components_misc_A__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(940981);
/* harmony import */ var components_store_link__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(510220);
/* harmony import */ var components_store_quota_query_params__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(505584);
/* harmony import */ var lib_config__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(774872);
/* harmony import */ var lib_customize__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(400054);
/* harmony import */ var lib_with_customize__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(601880);
/* harmony import */ var components_share_pricing__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(34498);
/*
 *  This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */ 


















const training = (()=>{
    const students = 10;
    const days = 5;
    const conf = {
        run_limit: students + 1,
        user: "business",
        days,
        ram: 5,
        disk: 5,
        cpu: 1,
        uptime: "medium",
        start: new Date(),
        end: new Date(new Date().getTime() + days * 24 * 60 * 60 * 1000)
    };
    const profPrice = (0,_cocalc_util_licenses_purchase_compute_cost__WEBPACK_IMPORTED_MODULE_3__/* .compute_cost */ .f5)({
        type: "quota",
        user: conf.user,
        upgrade: "custom",
        quantity: conf.run_limit,
        subscription: "no",
        start: conf.start,
        end: conf.end,
        custom_ram: conf.ram,
        custom_cpu: conf.cpu,
        custom_disk: conf.disk,
        custom_member: true,
        custom_dedicated_ram: 0,
        custom_dedicated_cpu: 0,
        custom_uptime: conf.uptime
    });
    return {
        title: `${conf.days} Day Professional Training`,
        icon: "battery-quarter",
        teachers: 1,
        students,
        duration: `${conf.days} days`,
        disk: conf.disk,
        uptime: _cocalc_util_consts_site_license__WEBPACK_IMPORTED_MODULE_2__.LicenseIdleTimeouts[conf.uptime].labelShort,
        shared_ram: conf.ram,
        dedicated_ram: 0,
        shared_cores: conf.cpu,
        dedicated_cores: 0,
        academic: false,
        online: profPrice.discounted_cost,
        conf
    };
})();
const courseSmall = (()=>{
    const students = 10;
    const days = 30;
    const conf = {
        run_limit: students + 1,
        days,
        ram: 2,
        disk: 3,
        cpu: 1,
        uptime: "short",
        user: "academic",
        start: new Date(),
        end: new Date(new Date().getTime() + days * 24 * 60 * 60 * 1000)
    };
    const price = (0,_cocalc_util_licenses_purchase_compute_cost__WEBPACK_IMPORTED_MODULE_3__/* .compute_cost */ .f5)({
        type: "quota",
        user: conf.user,
        upgrade: "custom",
        quantity: conf.run_limit,
        subscription: "no",
        start: conf.start,
        end: conf.end,
        custom_ram: conf.ram,
        custom_cpu: conf.cpu,
        custom_disk: conf.disk,
        custom_member: true,
        custom_dedicated_ram: 0,
        custom_dedicated_cpu: 0,
        custom_uptime: conf.uptime
    });
    return {
        title: `${students} students for ${conf.days} days`,
        icon: "battery-half",
        teachers: 1,
        students,
        duration: `${conf.days} days`,
        disk: conf.disk,
        uptime: _cocalc_util_consts_site_license__WEBPACK_IMPORTED_MODULE_2__.LicenseIdleTimeouts[conf.uptime].labelShort,
        shared_ram: conf.ram,
        shared_cores: conf.cpu,
        academic: true,
        retail: price.cost,
        online: price.discounted_cost,
        conf
    };
})();
const courseLarge = (()=>{
    const students = 150;
    const months = 4;
    const days = months * 30;
    const conf = {
        run_limit: students + 1,
        days,
        user: "academic",
        ram: 2,
        disk: 3,
        cpu: 1,
        uptime: "short",
        start: new Date(),
        end: new Date(new Date().getTime() + days * 24 * 60 * 60 * 1000)
    };
    const price = (0,_cocalc_util_licenses_purchase_compute_cost__WEBPACK_IMPORTED_MODULE_3__/* .compute_cost */ .f5)({
        type: "quota",
        user: conf.user,
        upgrade: "custom",
        quantity: conf.run_limit,
        subscription: "no",
        start: conf.start,
        end: conf.end,
        custom_ram: conf.ram,
        custom_cpu: conf.cpu,
        custom_disk: conf.disk,
        custom_member: true,
        custom_dedicated_ram: 0,
        custom_dedicated_cpu: 0,
        custom_uptime: conf.uptime
    });
    return {
        title: `${students} Students for ${months} Months`,
        icon: "battery-full",
        teachers: 1,
        students,
        duration: `${days} days`,
        disk: conf.disk,
        uptime: _cocalc_util_consts_site_license__WEBPACK_IMPORTED_MODULE_2__.LicenseIdleTimeouts[conf.uptime].labelShort,
        shared_ram: conf.ram,
        shared_cores: conf.cpu,
        academic: true,
        retail: price.cost,
        online: price.discounted_cost,
        conf
    };
})();
const data = [
    training,
    courseSmall,
    courseLarge
];
function Courses({ customize  }) {
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(lib_customize__WEBPACK_IMPORTED_MODULE_15__/* .Customize */ .l, {
        value: customize,
        children: [
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_head__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z, {
                title: "Course licenses"
            }),
            /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(antd__WEBPACK_IMPORTED_MODULE_7__.Layout, {
                children: [
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_header__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z, {
                        page: "pricing",
                        subPage: "courses"
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(antd__WEBPACK_IMPORTED_MODULE_7__.Layout.Content, {
                        style: {
                            backgroundColor: "white"
                        },
                        children: [
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(Body, {}),
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_footer__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z, {})
                        ]
                    })
                ]
            })
        ]
    });
}
function Body() {
    return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
        style: {
            maxWidth: lib_config__WEBPACK_IMPORTED_MODULE_18__/* .MAX_WIDTH */ .d,
            margin: "15px auto",
            padding: "15px",
            backgroundColor: "white"
        },
        children: [
            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                style: {
                    textAlign: "center",
                    color: "#444"
                },
                children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("h1", {
                    style: {
                        fontSize: "28pt"
                    },
                    children: [
                        /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_cocalc_frontend_components_icon__WEBPACK_IMPORTED_MODULE_1__.Icon, {
                            name: "graduation-cap",
                            style: {
                                marginRight: "30px"
                            }
                        }),
                        "CoCalc - Course licenses"
                    ]
                })
            }),
            /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
                style: {
                    fontSize: "12pt"
                },
                children: [
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", {
                        children: [
                            "You",
                            " ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "https://doc.cocalc.com/teaching-instructors.html",
                                children: "teach a course"
                            }),
                            " ",
                            "on ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
                                children: "CoCalc"
                            }),
                            " by creating one project for each student, sending your students assignments and handouts, then guiding their progress using collaboration and chat. You can then collect, grade, comment on, and return their work."
                        ]
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("p", {
                        children: "You will need to purchase an appropriate license for your course, or have the students pay the one-time $14 fee, since CoCalc is not funded by advertisers or other intrusive methods."
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h2", {
                        children: "How to get started?"
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", {
                        children: [
                            "You can",
                            " ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "/store/site-license",
                                external: true,
                                children: "purchase a license for your course"
                            }),
                            " ",
                            "in the",
                            " ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "/store",
                                external: true,
                                children: "store"
                            }),
                            "."
                        ]
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", {
                        children: [
                            "Minimal upgrades might be okay for beginner courses, but we find that many data and computational science courses run better with additional RAM and CPU. ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "mailto:help@cocalc.com",
                                children: "Contact us"
                            }),
                            " if you have questions or need a trial license to test out different possibilities."
                        ]
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", {
                        children: [
                            "Once you obtain a license key,",
                            " ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "https://doc.cocalc.com/teaching-upgrade-course.html",
                                children: "apply it to all your student projects"
                            }),
                            "."
                        ]
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("p", {
                        children: "You can acquire several licenses, e.g., to partition a semester into smaller parts with different requirements, or to keep upgrades separate between certain groups of courses or instructors."
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h2", {
                        children: "Payment options"
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("ul", {
                        style: {
                            paddingLeft: "20px"
                        },
                        children: [
                            /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("li", {
                                children: [
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("b", {
                                        children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                            href: "https://doc.cocalc.com/teaching-upgrade-course.html#teacher-or-institution-pays-for-upgrades",
                                            children: "You or your institution pays"
                                        })
                                    }),
                                    " ",
                                    "for one or more license upgrades. You distribute the license upgrades to all projects of the course via the course configuration tab of the course management interface."
                                ]
                            }),
                            /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("li", {
                                children: [
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("b", {
                                        children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                            href: "https://doc.cocalc.com/teaching-upgrade-course.html#students-pay-for-upgrades",
                                            children: "Students pay a one-time fee."
                                        })
                                    }),
                                    " ",
                                    "In the configuration frame of the course management file, you opt to require all students to pay a one-time $14 fee to upgrade their own projects."
                                ]
                            })
                        ]
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h2", {
                        children: "Examples"
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", {
                        children: [
                            "Here are three typical configurations, which you can",
                            " ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "/store/site-license",
                                external: true,
                                children: "modify and purchase here"
                            }),
                            ". All parameters can be adjusted to fit your needs. Listed upgrades are for each project. Exact prices may vary. Only self-service online purchases are available below $100."
                        ]
                    }),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(antd__WEBPACK_IMPORTED_MODULE_7__.List, {
                        grid: {
                            gutter: 16,
                            column: 3,
                            xs: 1,
                            sm: 1
                        },
                        dataSource: data,
                        renderItem: (item)=>{
                            const conf = {
                                ...item.conf,
                                period: "range",
                                range: (0,components_store_quota_query_params__WEBPACK_IMPORTED_MODULE_14__/* .encodeRange */ .ts)([
                                    item.conf.start,
                                    item.conf.end
                                ])
                            };
                            return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z, {
                                title: item.title,
                                icon: item.icon,
                                children: [
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.teachers,
                                        desc: "Teacher"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.students,
                                        desc: "Students"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.duration,
                                        desc: "Duration"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.uptime,
                                        desc: "Idle timeout"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.shared_ram,
                                        desc: "Shared RAM"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.shared_cores,
                                        desc: "Shared CPU"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: item.disk,
                                        desc: "Disk space"
                                    }),
                                    item.academic && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_landing_pricing_item__WEBPACK_IMPORTED_MODULE_11__/* .Line */ .x, {
                                        amount: `${_cocalc_util_licenses_purchase_consts__WEBPACK_IMPORTED_MODULE_4__.discount_pct}%`,
                                        desc: "Academic discount"
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("br", {}),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("br", {}),
                                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
                                        children: [
                                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
                                                style: {
                                                    fontWeight: "bold",
                                                    fontSize: "18pt",
                                                    color: _cocalc_util_theme__WEBPACK_IMPORTED_MODULE_6__/* .COLORS.GRAY_DD */ .DM.GRAY_DD
                                                },
                                                children: (0,_cocalc_util_licenses_purchase_utils__WEBPACK_IMPORTED_MODULE_5__/* .money */ .CZ)(item.online, true)
                                            }),
                                            " "
                                        ]
                                    }),
                                    item.retail ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
                                        style: {
                                            color: _cocalc_util_theme__WEBPACK_IMPORTED_MODULE_6__/* .COLORS.GRAY */ .DM.GRAY
                                        },
                                        children: [
                                            "(",
                                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
                                                style: {
                                                    fontWeight: "bold",
                                                    fontSize: "14pt"
                                                },
                                                children: (0,_cocalc_util_licenses_purchase_utils__WEBPACK_IMPORTED_MODULE_5__/* .money */ .CZ)(item.retail, true)
                                            }),
                                            " ",
                                            "via purchase order)"
                                        ]
                                    }) : /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("div", {
                                        children: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
                                            style: {
                                                fontSize: "14pt"
                                            },
                                            children: "\xa0"
                                        })
                                    }),
                                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_store_link__WEBPACK_IMPORTED_MODULE_13__/* .LinkToStore */ .G, {
                                        conf: conf
                                    })
                                ]
                            });
                        }
                    }),
                    (0,components_share_pricing__WEBPACK_IMPORTED_MODULE_17__/* .listedPrices */ .ys)(),
                    /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h2", {
                        children: "Contact us"
                    }),
                    /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", {
                        children: [
                            "To learn more about your teaching options, email us at",
                            " ",
                            /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(components_misc_A__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z, {
                                href: "mailto:help@cocalc.com",
                                children: "help@cocalc.com"
                            }),
                            " with a description of your specific requirements."
                        ]
                    })
                ]
            })
        ]
    });
}
async function getServerSideProps(context) {
    return await (0,lib_with_customize__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z)({
        context
    });
}


/***/ }),

/***/ 478313:
/***/ ((__unused_webpack_module, exports) => {

var __webpack_unused_export__;

/*
 *  This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */
__webpack_unused_export__ = ({ value: true });
exports.o = void 0;
// this is the first set of tests -- the second test is uniqueness
function testDedicatedDiskNameBasic(name) {
    const minLength = 6;
    const maxLength = 20;
    if (name == null) {
        throw new Error("Please enter a name.");
    }
    else if (name.length < minLength) {
        throw new Error(`Name must have at least ${minLength} characters.`);
    }
    else if (name.length > maxLength) {
        throw new Error(`Name must have at most ${maxLength} characters.`);
    }
    else if (!/^[a-z0-9-]+$/.test(name)) {
        throw new Error("Name must consist of lowercase letters, numbers, and hyphens only.");
    }
}
exports.o = testDedicatedDiskNameBasic;
//# sourceMappingURL=check-disk-name-basics.js.map

/***/ }),

/***/ 872228:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {


/*
 *  This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.appendAfterNowToDate = exports.adjustDateRangeEndOnSameDay = exports.roundToMidnight = exports.endOfDay = exports.startOfDay = exports.getDays = void 0;
const billing_1 = __webpack_require__(612134);
const dayjs_1 = __importDefault(__webpack_require__(125788));
// this does NOT round to start/end of the day.
// take special care if you do this in the front-end, because if server-time is off by a significant amount,
// it might count one day too many or too little.
// use the rounding functions below to fix this, but maybe you have to use the "store/util::useTimeFixer" hook.
function getDays({ start, end }) {
    if (start == null || end == null) {
        throw Error("bug");
    }
    const t0 = new Date(start).valueOf();
    const t1 = new Date(end).valueOf();
    return Math.round((t1 - t0) / billing_1.ONE_DAY_MS);
}
exports.getDays = getDays;
// round date to start of day (local user time)
function startOfDay(date) {
    return (0, dayjs_1.default)(date).startOf("day").toDate();
}
exports.startOfDay = startOfDay;
// round date to the end of the day (local user time)
function endOfDay(date) {
    return (0, dayjs_1.default)(date).endOf("day").toDate();
}
exports.endOfDay = endOfDay;
// this rounds to the nearest "start" or "end" of a day, either rounded to the very end or start of the day
// this is important when you use a date range selector,
// because e.g. 2022-08-13T23:59:99 is interpreted as the 13th, although (with rounding) it's the 14th
function roundToMidnight(date, side) {
    if (date == null)
        return date;
    const ts = (0, dayjs_1.default)(date).add(12, "hours").startOf("day");
    if (side === "end") {
        // we go back a minute to almost-fully-round to the end of the day.
        // this makes a difference when displaying it for the start/end ranges
        return ts.subtract(1, "minute").endOf("day").toDate();
    }
    else {
        return ts.toDate();
    }
}
exports.roundToMidnight = roundToMidnight;
/**
 * We play nice to the user. if the start date is before the current time,
 * which happens when you order something that is supposed to start "now" (and is corrected to the start of the day in the user's time zone),
 * then append that period that's already in the past to the end of the range.
 */
function adjustDateRangeEndOnSameDay([start, end,]) {
    if (start == null || end == null) {
        return [start, end];
    }
    const now = new Date();
    // we don't care about changing start, because it's already in the past
    end = appendAfterNowToDate({ now, start, end });
    return [start, end];
}
exports.adjustDateRangeEndOnSameDay = adjustDateRangeEndOnSameDay;
function appendAfterNowToDate({ now, start, end, }) {
    if (start < now) {
        const diff = now.getTime() - start.getTime();
        return new Date(end.getTime() + diff);
    }
    else {
        return end;
    }
}
exports.appendAfterNowToDate = appendAfterNowToDate;
//# sourceMappingURL=timecalcs.js.map

/***/ }),

/***/ 191982:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

var __webpack_unused_export__;

/*
 *  This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */
__webpack_unused_export__ = ({ value: true });
exports.ej = exports.iD = exports.bD = exports._q = exports.ur = exports.sJ = exports.YZ = exports.yx = exports.$e = void 0;
// These are defaults used by store (and also when parsing the quota params from a URL).
const upgrade_spec_1 = __webpack_require__(245067);
// RAM
exports.$e = upgrade_spec_1.upgrades.max_per_project.memory / 1000;
exports.yx = 2; // 2gb highly recommended
// CPU
exports.YZ = 1;
exports.sJ = upgrade_spec_1.upgrades.max_per_project.cores;
// DISK
exports.ur = 15;
exports._q = 3;
exports.bD = exports._q;
exports.iD = {
    cpu: {
        min: 1,
        dflt: exports.YZ,
        max: exports.sJ,
    },
    ram: {
        min: 1,
        dflt: exports.yx,
        max: exports.$e,
    },
    disk: {
        min: exports.bD,
        dflt: exports._q,
        max: exports.ur,
    },
};
exports.ej = {
    cpu: { min: 0, dflt: 0, max: exports.sJ - 1 },
    ram: { min: 0, dflt: 0, max: exports.$e - 1 },
    disk: { min: 0, dflt: 0, max: exports.ur - 1 * exports._q },
};
//# sourceMappingURL=consts.js.map

/***/ }),

/***/ 545725:
/***/ ((module) => {

module.exports = require("antd");

/***/ }),

/***/ 501635:
/***/ ((module) => {

module.exports = require("dayjs");

/***/ }),

/***/ 546517:
/***/ ((module) => {

module.exports = require("lodash");

/***/ }),

/***/ 65680:
/***/ ((module) => {

module.exports = require("lru-cache");

/***/ }),

/***/ 903280:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/app-router-context.js");

/***/ }),

/***/ 492796:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/head-manager-context.js");

/***/ }),

/***/ 294957:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/head.js");

/***/ }),

/***/ 703539:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/i18n/detect-domain-locale.js");

/***/ }),

/***/ 734014:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/i18n/normalize-locale-path.js");

/***/ }),

/***/ 450744:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/image-config-context.js");

/***/ }),

/***/ 435843:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/image-config.js");

/***/ }),

/***/ 278524:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/is-plain-object.js");

/***/ }),

/***/ 878020:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/mitt.js");

/***/ }),

/***/ 664406:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/page-path/denormalize-page-path.js");

/***/ }),

/***/ 424964:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router-context.js");

/***/ }),

/***/ 493431:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/add-locale.js");

/***/ }),

/***/ 611751:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/add-path-prefix.js");

/***/ }),

/***/ 746220:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/compare-states.js");

/***/ }),

/***/ 110299:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/format-next-pathname-info.js");

/***/ }),

/***/ 623938:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/format-url.js");

/***/ }),

/***/ 329565:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/get-asset-path-from-route.js");

/***/ }),

/***/ 735789:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/get-next-pathname-info.js");

/***/ }),

/***/ 801897:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/is-bot.js");

/***/ }),

/***/ 901428:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/is-dynamic.js");

/***/ }),

/***/ 528854:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/parse-path.js");

/***/ }),

/***/ 491292:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/parse-relative-url.js");

/***/ }),

/***/ 734567:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/path-has-prefix.js");

/***/ }),

/***/ 980979:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/querystring.js");

/***/ }),

/***/ 393297:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/remove-trailing-slash.js");

/***/ }),

/***/ 836052:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/resolve-rewrites.js");

/***/ }),

/***/ 584226:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/route-matcher.js");

/***/ }),

/***/ 95052:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/router/utils/route-regex.js");

/***/ }),

/***/ 359232:
/***/ ((module) => {

module.exports = require("next/dist/shared/lib/utils.js");

/***/ }),

/***/ 40968:
/***/ ((module) => {

module.exports = require("next/head");

/***/ }),

/***/ 371853:
/***/ ((module) => {

module.exports = require("next/router");

/***/ }),

/***/ 616689:
/***/ ((module) => {

module.exports = require("react");

/***/ }),

/***/ 920997:
/***/ ((module) => {

module.exports = require("react/jsx-runtime");

/***/ }),

/***/ 439491:
/***/ ((module) => {

module.exports = require("assert");

/***/ }),

/***/ 714300:
/***/ ((module) => {

module.exports = require("buffer");

/***/ }),

/***/ 706113:
/***/ ((module) => {

module.exports = require("crypto");

/***/ }),

/***/ 809523:
/***/ ((module) => {

module.exports = require("dns");

/***/ }),

/***/ 582361:
/***/ ((module) => {

module.exports = require("events");

/***/ }),

/***/ 657147:
/***/ ((module) => {

module.exports = require("fs");

/***/ }),

/***/ 773292:
/***/ ((module) => {

module.exports = require("fs/promises");

/***/ }),

/***/ 113685:
/***/ ((module) => {

module.exports = require("http");

/***/ }),

/***/ 241808:
/***/ ((module) => {

module.exports = require("net");

/***/ }),

/***/ 822037:
/***/ ((module) => {

module.exports = require("os");

/***/ }),

/***/ 371017:
/***/ ((module) => {

module.exports = require("path");

/***/ }),

/***/ 677282:
/***/ ((module) => {

module.exports = require("process");

/***/ }),

/***/ 12781:
/***/ ((module) => {

module.exports = require("stream");

/***/ }),

/***/ 371576:
/***/ ((module) => {

module.exports = require("string_decoder");

/***/ }),

/***/ 924404:
/***/ ((module) => {

module.exports = require("tls");

/***/ }),

/***/ 76224:
/***/ ((module) => {

module.exports = require("tty");

/***/ }),

/***/ 257310:
/***/ ((module) => {

module.exports = require("url");

/***/ }),

/***/ 473837:
/***/ ((module) => {

module.exports = require("util");

/***/ })

};
;

// load runtime
var __webpack_require__ = require("../../webpack-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, [6918,1199,676,1746,1664,7545,3854,5788,8759,2003,9066,981,5997,9580,821,4158,3542,8371], () => (__webpack_exec__(707594)));
module.exports = __webpack_exports__;

})();