UNPKG

faastjs

Version:

Serverless batch computing made simple.

233 lines 21.8 kB
export const FAAST_URL = import.meta.url; export function test() { return "Successfully called test function."; } export function empty() { } export function identityString(name) { return name; } export function identityNum(n) { return n; } export function identityBool(b) { return b; } export function identityUndefined(u) { return u; } export function identityNull(n) { return n; } export function identityObject(o) { return o; } export function identityArrayNum(n) { return n; } export function identityArrayString(s) { return s; } export function identityInt8(a) { return a; } export function identityUint8(a) { return a; } export function identityUint8Clamped(a) { return a; } export function identityInt16(a) { return a; } export function identityUint16(a) { return a; } export function identityInt32(a) { return a; } export function identityUint32(a) { return a; } export function identityFloat32(a) { return a; } export function identityFloat64(a) { return a; } export function identityBigInt64(a) { return a; } export function identityBigUint64(a) { return a; } export function identityMap(m) { return m; } export function identitySet(s) { return s; } export const arrow = (str) => str; export const asyncArrow = async (str) => str; export function hello(name) { return `Hello ${name}!`; } export function fact(n) { return n <= 1 ? 1 : n * fact(n - 1); } export function concat(a, b) { return a + b; } export function error(a) { throw new Error(`Expected error. Arg: ${a}`); } export function noargs() { return "called function with no args."; } export function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } export function delayReject(ms) { return new Promise((_, reject) => setTimeout(reject, ms)); } export async function async() { await sleep(200); return "async function: success"; } export function path() { return sleep(200).then(() => process.env.PATH || "no PATH variable"); } export function emptyReject() { return Promise.reject(); } export function rejected() { return Promise.reject("intentionally rejected"); } export async function timer(delayMs) { const start = Date.now(); await sleep(delayMs); const end = Date.now(); return { start, end }; } export function spin(ms) { const start = Date.now(); while (true) { if (Date.now() - start >= ms) { break; } } const end = Date.now(); return { start, end }; } export function infiniteLoop() { while (true) { } } export function optionalArg(arg) { return arg ? arg : "No arg"; } export function consoleLog(str) { console.log(str); } export function consoleWarn(str) { console.warn(str); } export function consoleError(str) { console.error(str); } export function consoleInfo(str) { console.info(str); } export function processExit(code) { process.exit(code); } class CustomError extends Error { constructor(message, custom) { super(message); this.custom = custom; } } export function customError() { throw new CustomError("custom error message", "custom value"); } export function returnsError() { return new Error("a returned non-thrown error"); } export async function allocate(bytes) { const array = new Array(bytes / 8); const elems = array.length; for (let i = 0; i < elems; i++) { array[i] = i; } console.log(`allocated: %O`, { bytes, elems }); console.log(`post allocate memory usage: %O`, process.memoryUsage()); await sleep(1000); console.log(`Returning from allocate`); return { bytes, elems }; } export function getEnv(key) { return process.env[key]; } export function monteCarloPI(samples) { let inside = 0; for (let n = 0; n < samples; n++) { const [x, y] = [Math.random(), Math.random()]; if (x ** 2 + y ** 2 <= 1) { inside++; } } return { inside, samples }; } export function* generator(args) { yield* args; } export async function* asyncGenerator(args) { yield* args; } export async function* generateThenInfiniteLoop(arg) { yield arg; while (true) { } } export async function* asyncGeneratorDelay(args, delay) { for (const arg of args) { await sleep(delay); yield arg; } } export async function* asyncGeneratorError(msg) { yield 1; throw new Error(msg); } /** * Not supported. * @remarks * Examples of functions arguments or return values that are not supported. */ export function promiseArg(promise) { return promise; } export function identityFunction(fn) { return fn; } export function functionReturn() { return () => { console.log("returned a function"); }; } export function identityBuffer(buf) { return buf; } export function identityDate(arg) { return arg; } export class Cls { constructor() { } } export function identityClass(arg) { return arg; } export function classReturn() { return new Cls(); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZml4dHVyZXMvZnVuY3Rpb25zLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFFekMsTUFBTSxVQUFVLElBQUk7SUFDaEIsT0FBTyxvQ0FBb0MsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssS0FBSSxDQUFDO0FBRTFCLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFTO0lBQ2pDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBVTtJQUNuQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsQ0FBWTtJQUMxQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQU87SUFDaEMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxDQUFTO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFXO0lBQ3hDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxDQUFXO0lBQzNDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBWTtJQUNyQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQWE7SUFDdkMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0QsTUFBTSxV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cG9ydC5tZXRhLnVybDtcblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgcmV0dXJuIFwiU3VjY2Vzc2Z1bGx5IGNhbGxlZCB0ZXN0IGZ1bmN0aW9uLlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHkoKSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlTdHJpbmcobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlOdW0objogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG47XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCb29sKGI6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVuZGVmaW5lZCh1OiB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU51bGwobjogbnVsbCkge1xuICAgIHJldHVybiBuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5T2JqZWN0KG86IG9iamVjdCkge1xuICAgIHJldHVybiBvO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QXJyYXlOdW0objogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUFycmF5U3RyaW5nKHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHM7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlJbnQ4KGE6IEludDhBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDgoYTogVWludDhBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDhDbGFtcGVkKGE6IFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlJbnQxNihhOiBJbnQxNkFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50MTYoYTogVWludDE2QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDMyKGE6IEludDMyQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVpbnQzMihhOiBVaW50MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RmxvYXQzMihhOiBGbG9hdDMyQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUZsb2F0NjQoYTogRmxvYXQ2NEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCaWdJbnQ2NChhOiBCaWdJbnQ2NEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlCaWdVaW50NjQoYTogQmlnVWludDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU1hcChtOiBNYXA8bnVtYmVyLCBudW1iZXI+KSB7XG4gICAgcmV0dXJuIG07XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlTZXQoczogU2V0PG51bWJlcj4pIHtcbiAgICByZXR1cm4gcztcbn1cblxuZXhwb3J0IGNvbnN0IGFycm93ID0gKHN0cjogc3RyaW5nKSA9PiBzdHI7XG5cbmV4cG9ydCBjb25zdCBhc3luY0Fycm93ID0gYXN5bmMgKHN0cjogc3RyaW5nKSA9PiBzdHI7XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWxsbyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYEhlbGxvICR7bmFtZX0hYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhY3QobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbiA8PSAxID8gMSA6IG4gKiBmYWN0KG4gLSAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICAgIHJldHVybiBhICsgYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yKGE6IHN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXJyb3IuIEFyZzogJHthfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9hcmdzKCkge1xuICAgIHJldHVybiBcImNhbGxlZCBmdW5jdGlvbiB3aXRoIG5vIGFyZ3MuXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsYXlSZWplY3QobXM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiBzZXRUaW1lb3V0KHJlamVjdCwgbXMpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuICAgIGF3YWl0IHNsZWVwKDIwMCk7XG4gICAgcmV0dXJuIFwiYXN5bmMgZnVuY3Rpb246IHN1Y2Nlc3NcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gc2xlZXAoMjAwKS50aGVuKCgpID0+IHByb2Nlc3MuZW52LlBBVEggfHwgXCJubyBQQVRIIHZhcmlhYmxlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlSZWplY3QoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3RlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJpbnRlbnRpb25hbGx5IHJlamVjdGVkXCIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZyB7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVyKGRlbGF5TXM6IG51bWJlcik6IFByb21pc2U8VGltaW5nPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGF3YWl0IHNsZWVwKGRlbGF5TXMpO1xuICAgIGNvbnN0IGVuZCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BpbihtczogbnVtYmVyKTogVGltaW5nIHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydCA+PSBtcykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZUxvb3AoKSB7XG4gICAgd2hpbGUgKHRydWUpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbEFyZyhhcmc/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJnID8gYXJnIDogXCJObyBhcmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVMb2coc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZVdhcm4oc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLndhcm4oc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVFcnJvcihzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUuZXJyb3Ioc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVJbmZvKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc29sZS5pbmZvKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRXhpdChjb2RlPzogbnVtYmVyKSB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5jbGFzcyBDdXN0b21FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBjdXN0b206IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FcnJvcigpIHtcbiAgICB0aHJvdyBuZXcgQ3VzdG9tRXJyb3IoXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcImN1c3RvbSB2YWx1ZVwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybnNFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFwiYSByZXR1cm5lZCBub24tdGhyb3duIGVycm9yXCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWxsb2NhdGUoYnl0ZXM6IG51bWJlcikge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KGJ5dGVzIC8gOCk7XG4gICAgY29uc3QgZWxlbXMgPSBhcnJheS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtczsgaSsrKSB7XG4gICAgICAgIGFycmF5W2ldID0gaTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYGFsbG9jYXRlZDogJU9gLCB7IGJ5dGVzLCBlbGVtcyB9KTtcbiAgICBjb25zb2xlLmxvZyhgcG9zdCBhbGxvY2F0ZSBtZW1vcnkgdXNhZ2U6ICVPYCwgcHJvY2Vzcy5tZW1vcnlVc2FnZSgpKTtcbiAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICBjb25zb2xlLmxvZyhgUmV0dXJuaW5nIGZyb20gYWxsb2NhdGVgKTtcbiAgICByZXR1cm4geyBieXRlcywgZWxlbXMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltrZXldO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRlQ2FybG9SZXR1cm4ge1xuICAgIGluc2lkZTogbnVtYmVyO1xuICAgIHNhbXBsZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRlQ2FybG9QSShzYW1wbGVzOiBudW1iZXIpOiBNb250ZUNhcmxvUmV0dXJuIHtcbiAgICBsZXQgaW5zaWRlID0gMDtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IHNhbXBsZXM7IG4rKykge1xuICAgICAgICBjb25zdCBbeCwgeV0gPSBbTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKV07XG4gICAgICAgIGlmICh4ICoqIDIgKyB5ICoqIDIgPD0gMSkge1xuICAgICAgICAgICAgaW5zaWRlKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5zaWRlLFxuICAgICAgICBzYW1wbGVzXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBnZW5lcmF0b3IoYXJnczogc3RyaW5nW10pIHtcbiAgICB5aWVsZCogYXJncztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvcihhcmdzOiBzdHJpbmdbXSkge1xuICAgIHlpZWxkKiBhcmdzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlVGhlbkluZmluaXRlTG9vcChhcmc6IHN0cmluZykge1xuICAgIHlpZWxkIGFyZztcbiAgICB3aGlsZSAodHJ1ZSkge31cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvckRlbGF5KGFyZ3M6IHN0cmluZ1tdLCBkZWxheTogbnVtYmVyKSB7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgICAgIHlpZWxkIGFyZztcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogYXN5bmNHZW5lcmF0b3JFcnJvcihtc2c6IHN0cmluZykge1xuICAgIHlpZWxkIDE7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbi8qKlxuICogTm90IHN1cHBvcnRlZC5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlcyBvZiBmdW5jdGlvbnMgYXJndW1lbnRzIG9yIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VBcmcocHJvbWlzZTogUHJvbWlzZTxhbnk+KSB7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUZ1bmN0aW9uKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIGZuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25SZXR1cm4oKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXR1cm5lZCBhIGZ1bmN0aW9uXCIpO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJ1ZmZlcihidWY6IEJ1ZmZlcikge1xuICAgIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eURhdGUoYXJnOiBEYXRlKSB7XG4gICAgcmV0dXJuIGFyZztcbn1cblxuZXhwb3J0IGNsYXNzIENscyB7XG4gICAgY29uc3RydWN0b3IoKSB7fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlDbGFzcyhhcmc6IENscykge1xuICAgIHJldHVybiBhcmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc1JldHVybigpIHtcbiAgICByZXR1cm4gbmV3IENscygpO1xufVxuIl19