From d57e6f8e097da6b22212ed550d6d2a0a6b7404f8 Mon Sep 17 00:00:00 2001 From: bobbydigitales Date: Sun, 10 Mar 2024 15:48:35 -0700 Subject: [PATCH] write TODO list and TypeScript map format has changed --- db.js | 2 +- main.go | 39 +++++++++++++++++++++++++++++++++++++++ main.js | 2 +- sw.js | 2 +- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/db.js b/db.js index 8cc0cdc..e81f273 100644 --- a/db.js +++ b/db.js @@ -132,4 +132,4 @@ export async function getAllData(userID) { }; }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBQzNCLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLElBQUk7QUFFSixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUM7QUFDOUIsTUFBTSxhQUFhLEdBQVcsT0FBTyxDQUFDO0FBQ3RDLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO0FBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQVliLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYTtJQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUUvQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDL0IsbUZBQW1GO1lBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7WUFDNUMsTUFBTSxDQUFDLG1CQUFtQixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDdkQsTUFBTSxFQUFFLEdBQWlCLEtBQUssQ0FBQyxNQUEyQixDQUFDLE1BQU0sQ0FBQztZQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVB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QUMsTUFBTSxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDakQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMERBQTBEO2FBQ2pGO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ2xDLG1GQUFtRjtZQUNuRixNQUFNLFVBQVUsR0FBRyxLQUF3QixDQUFDO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7UUFDOUUsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW50ZXJmYWNlIE15SnNvbk9iamVjdCB7XG4vLyAgIGlkOiBzdHJpbmc7XG4vLyAgIG5hbWU6IHN0cmluZztcbi8vICAgZW1haWw6IHN0cmluZztcbi8vIH1cblxuY29uc3QgZGJOYW1lOiBzdHJpbmcgPSBcImRkbG5cIjtcbmNvbnN0IHN0b3JlTmFtZUJhc2U6IHN0cmluZyA9IFwicG9zdHNcIjtcbmxldCBrZXlCYXNlID0gXCJkYW5kZWxpb25fcG9zdHNfdjFfXCJcbmxldCBrZXkgPSBcIlwiO1xuXG5cbmludGVyZmFjZSBJREJSZXF1ZXN0RXZlbnQ8VCA9IGFueT4gZXh0ZW5kcyBFdmVudCB7XG4gICAgdGFyZ2V0OiBJREJSZXF1ZXN0PFQ+O1xufVxuXG4vLyBJbmRleGVkREIgdXNlcyBET01FeGNlcHRpb24sIHNvIGxldCdzIHVzZSBpdCBmb3IgZXJyb3IgdHlwaW5nXG50eXBlIERCRXJyb3IgPSBFdmVudCAmIHtcbiAgICB0YXJnZXQ6IHsgZXJyb3JDb2RlOiBET01FeGNlcHRpb24gfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGF0YWJhc2UodXNlcklEOnN0cmluZyk6IFByb21pc2U8SURCRGF0YWJhc2U+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSwgMSk7XG5cbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRXZlbnQgPSBldmVudCBhcyBJREJSZXF1ZXN0RXZlbnQ7XG4gICAgICAgICAgICByZWplY3QoYERhdGFiYXNlIGVycm9yOiAke2Vycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50OiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRiOiBJREJEYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShzdG9yZU5hbWUsIHsga2V5UGF0aDogXCJpZFwiLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHN0b3JlLmNyZWF0ZUluZGV4KFwiZGF0ZXRpbWVJbmRleFwiLCBcInBvc3RfdGltZXN0YW1wXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGI6IElEQkRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGREYXRhKHVzZXJJRDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IG9wZW5EYXRhYmFzZSh1c2VySUQpO1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgICAgICBjb25zdCBhZGRSZXF1ZXN0ID0gc3RvcmUuYWRkKHtwb3N0X3RpbWVzdGFtcDogZGF0YS5wb3N0X3RpbWVzdGFtcCwgZGF0YTpkYXRhfSk7XG5cbiAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYXRhIGhhcyBiZWVuIGFkZGVkOicsIChlLnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFkZFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYWRkaW5nIGRhdGE6JywgZXJyb3JFdmVudC50YXJnZXQuZXJyb3I/Lm1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG9wZW5pbmcgZGF0YWJhc2U6JywgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZERhdGFBcnJheSh1c2VySUQ6IHN0cmluZywgYXJyYXk6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuRGF0YWJhc2UodXNlcklEKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcblxuICAgICAgICBhcnJheS5yZXZlcnNlKCk7XG5cbiAgICAgICAgZm9yIChsZXQgZGF0YSBvZiBhcnJheSkge1xuICAgICAgICAgICAgY29uc3QgYWRkUmVxdWVzdCA9IHN0b3JlLmFkZCh7cG9zdF90aW1lc3RhbXA6IGRhdGEucG9zdF90aW1lc3RhbXAsIGRhdGE6ZGF0YX0pO1xuICAgICAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGF0YSBoYXMgYmVlbiBhZGRlZDonLCAoZS50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBhZGRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGFkZGluZyBkYXRhOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgICAgIC8vIGlmIChjb3VudCAlIDEwMCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGBBZGRlZCAke2NvdW50fSBwb3N0cy4uLmApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvcGVuaW5nIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREYXRhKHVzZXJJRDpzdHJpbmcsIGxvd2VySUQ6RGF0ZSwgdXBwZXJJRDpEYXRlKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxvd2VySUQsIHVwcGVySUQpO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHM6IGFueVtdID0gW107XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBzdG9yZS5pbmRleChcImRhdGV0aW1lSW5kZXhcIik7XG5cblxuICAgICAgICBjb25zdCBjdXJzb3JSZXF1ZXN0ID0gaW5kZXgub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkN1cnNvcldpdGhWYWx1ZTtcbiAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2goY3Vyc29yLnZhbHVlLmRhdGEpOyAvLyBDb2xsZWN0IHRoZSByZWNvcmRcbiAgICAgICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSByYW5nZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBtb3JlIGVudHJpZXMgaW4gdGhlIHJhbmdlXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgYSB0eXBlIGFzc2VydGlvbiB0byBhY2Nlc3MgdGhlIHNwZWNpZmljIHByb3BlcnRpZXMgb2YgSURCUmVxdWVzdCBlcnJvciBldmVudFxuICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zYWN0aW9uIGZhaWxlZDonLCBlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3JFdmVudC50YXJnZXQuZXJyb3IpOyAvLyBSZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsRGF0YSh1c2VySUQ6c3RyaW5nKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmdldEFsbCgpO1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdldFJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnUmV0cmlldmVkIGRhdGE6JywgZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUoZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGRhdGEgcmVjb3JkIGZvdW5kIGZvciBrZXknLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTsgLy8gZXhwbGljaXRseSByZXNvbHZlIHdpdGggdW5kZWZpbmVkIHdoZW4gbm8gZGF0YSBpcyBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVHJhbnNhY3Rpb24gZmFpbGVkOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvckV2ZW50LnRhcmdldC5lcnJvcik7IC8vIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBQzNCLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLElBQUk7QUFFSixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUM7QUFDOUIsTUFBTSxhQUFhLEdBQVcsT0FBTyxDQUFDO0FBQ3RDLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO0FBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQVliLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYTtJQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUUvQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDL0IsbUZBQW1GO1lBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7WUFDNUMsTUFBTSxDQUFDLG1CQUFtQixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDdkQsTUFBTSxFQUFFLEdBQWlCLEtBQUssQ0FBQyxNQUEyQixDQUFDLE1BQU0sQ0FBQztZQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDcEYsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUU1RSxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxHQUFpQixLQUFLLENBQUMsTUFBMkIsQ0FBQyxNQUFNLENBQUM7WUFDbEUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUlELE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLE1BQWMsRUFBRSxJQUFTO0lBQ25ELElBQUksQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsYUFBYSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRS9FLFVBQVUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUNoQyx3RUFBd0U7UUFDNUUsQ0FBQyxDQUFDO1FBRUYsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ2xDLG1GQUFtRjtZQUNuRixNQUFNLFVBQVUsR0FBRyxLQUF3QixDQUFDO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsTUFBYyxFQUFFLEtBQVk7SUFDM0QsSUFBSSxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxhQUFhLElBQUksTUFBTSxFQUFFLENBQUM7UUFDL0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFZCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEIsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNyQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7WUFDL0UsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQVEsRUFBRSxFQUFFO2dCQUNoQyx3RUFBd0U7WUFDNUUsQ0FBQyxDQUFDO1lBRUYsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO2dCQUNsQyxtRkFBbUY7Z0JBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDO1lBRUYsS0FBSyxFQUFFLENBQUM7WUFFUiwyQkFBMkI7WUFDM0IsOENBQThDO1lBQzlDLElBQUk7UUFDUixDQUFDO0lBR0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQUMsTUFBYSxFQUFFLE9BQVksRUFBRSxPQUFZO0lBQ25FLE1BQU0sU0FBUyxHQUFHLEdBQUcsYUFBYSxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFakQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUUxRCxNQUFNLE9BQU8sR0FBVSxFQUFFLENBQUM7UUFFMUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUczQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXRELGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBSSxLQUFLLENBQUMsTUFBcUIsQ0FBQyxNQUE0QixDQUFDO1lBQ3pFLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCO2dCQUN0RCxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7WUFDNUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLCtCQUErQjtnQkFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixhQUFhLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDckMsbUZBQW1GO1lBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztRQUM5RSxDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxNQUFhO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsYUFBYSxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFakQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFbEMsVUFBVSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BCLGdFQUFnRTtnQkFDaEUsOENBQThDO2dCQUM5QyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQywwREFBMEQ7WUFDbEYsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUNsQyxtRkFBbUY7WUFDbkYsTUFBTSxVQUFVLEdBQUcsS0FBd0IsQ0FBQztZQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMseUNBQXlDO1FBQzlFLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGludGVyZmFjZSBNeUpzb25PYmplY3Qge1xuLy8gICBpZDogc3RyaW5nO1xuLy8gICBuYW1lOiBzdHJpbmc7XG4vLyAgIGVtYWlsOiBzdHJpbmc7XG4vLyB9XG5cbmNvbnN0IGRiTmFtZTogc3RyaW5nID0gXCJkZGxuXCI7XG5jb25zdCBzdG9yZU5hbWVCYXNlOiBzdHJpbmcgPSBcInBvc3RzXCI7XG5sZXQga2V5QmFzZSA9IFwiZGFuZGVsaW9uX3Bvc3RzX3YxX1wiXG5sZXQga2V5ID0gXCJcIjtcblxuXG5pbnRlcmZhY2UgSURCUmVxdWVzdEV2ZW50PFQgPSBhbnk+IGV4dGVuZHMgRXZlbnQge1xuICAgIHRhcmdldDogSURCUmVxdWVzdDxUPjtcbn1cblxuLy8gSW5kZXhlZERCIHVzZXMgRE9NRXhjZXB0aW9uLCBzbyBsZXQncyB1c2UgaXQgZm9yIGVycm9yIHR5cGluZ1xudHlwZSBEQkVycm9yID0gRXZlbnQgJiB7XG4gICAgdGFyZ2V0OiB7IGVycm9yQ29kZTogRE9NRXhjZXB0aW9uIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb3BlbkRhdGFiYXNlKHVzZXJJRDpzdHJpbmcpOiBQcm9taXNlPElEQkRhdGFiYXNlPiB7XG4gICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IElEQk9wZW5EQlJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYk5hbWUsIDEpO1xuXG4gICAgICAgIHJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgcmVqZWN0KGBEYXRhYmFzZSBlcnJvcjogJHtlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudDogSURCVmVyc2lvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYjogSURCRGF0YWJhc2UgPSAoZXZlbnQudGFyZ2V0IGFzIElEQk9wZW5EQlJlcXVlc3QpLnJlc3VsdDtcbiAgICAgICAgICAgIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhzdG9yZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiwgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBzdG9yZS5jcmVhdGVJbmRleChcImRhdGV0aW1lSW5kZXhcIiwgXCJwb3N0X3RpbWVzdGFtcFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRiOiBJREJEYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkRGF0YSh1c2VySUQ6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuRGF0YWJhc2UodXNlcklEKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgICAgY29uc3QgYWRkUmVxdWVzdCA9IHN0b3JlLmFkZCh7cG9zdF90aW1lc3RhbXA6IGRhdGEucG9zdF90aW1lc3RhbXAsIGRhdGE6ZGF0YX0pO1xuXG4gICAgICAgIGFkZFJlcXVlc3Qub25zdWNjZXNzID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGF0YSBoYXMgYmVlbiBhZGRlZDonLCAoZS50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgYSB0eXBlIGFzc2VydGlvbiB0byBhY2Nlc3MgdGhlIHNwZWNpZmljIHByb3BlcnRpZXMgb2YgSURCUmVxdWVzdCBlcnJvciBldmVudFxuICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGFkZGluZyBkYXRhOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvcGVuaW5nIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGREYXRhQXJyYXkodXNlcklEOiBzdHJpbmcsIGFycmF5OiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IGAke3N0b3JlTmFtZUJhc2V9XyR7dXNlcklEfWA7XG4gICAgICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICAgICAgYXJyYXkucmV2ZXJzZSgpO1xuXG4gICAgICAgIGZvciAobGV0IGRhdGEgb2YgYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZFJlcXVlc3QgPSBzdG9yZS5hZGQoe3Bvc3RfdGltZXN0YW1wOiBkYXRhLnBvc3RfdGltZXN0YW1wLCBkYXRhOmRhdGF9KTtcbiAgICAgICAgICAgIGFkZFJlcXVlc3Qub25zdWNjZXNzID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0RhdGEgaGFzIGJlZW4gYWRkZWQ6JywgKGUudGFyZ2V0IGFzIElEQlJlcXVlc3QpLnJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgIFxuICAgICAgICAgICAgYWRkUmVxdWVzdC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBhZGRpbmcgZGF0YTonLCBlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb3VudCsrO1xuXG4gICAgICAgICAgICAvLyBpZiAoY291bnQgJSAxMDAgPT09IDApIHtcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhgQWRkZWQgJHtjb3VudH0gcG9zdHMuLi5gKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuXG4gICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gb3BlbmluZyBkYXRhYmFzZTonLCBlcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGF0YSh1c2VySUQ6c3RyaW5nLCBsb3dlcklEOkRhdGUsIHVwcGVySUQ6RGF0ZSk6IFByb21pc2U8YW55IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICBjb25zdCBkYiA9IGF3YWl0IG9wZW5EYXRhYmFzZSh1c2VySUQpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpO1xuICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleVJhbmdlVmFsdWUgPSBJREJLZXlSYW5nZS5ib3VuZChsb3dlcklELCB1cHBlcklEKTtcblxuICAgICAgICBjb25zdCByZWNvcmRzOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3RvcmUuaW5kZXgoXCJkYXRldGltZUluZGV4XCIpO1xuXG5cbiAgICAgICAgY29uc3QgY3Vyc29yUmVxdWVzdCA9IGluZGV4Lm9wZW5DdXJzb3Ioa2V5UmFuZ2VWYWx1ZSk7XG5cbiAgICAgICAgY3Vyc29yUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJzb3IgPSAoZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3QpLnJlc3VsdCBhcyBJREJDdXJzb3JXaXRoVmFsdWU7XG4gICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKGN1cnNvci52YWx1ZS5kYXRhKTsgLy8gQ29sbGVjdCB0aGUgcmVjb3JkXG4gICAgICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7IC8vIE1vdmUgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgcmFuZ2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm8gbW9yZSBlbnRyaWVzIGluIHRoZSByYW5nZVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVjb3Jkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY3Vyc29yUmVxdWVzdC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRXZlbnQgPSBldmVudCBhcyBJREJSZXF1ZXN0RXZlbnQ7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUcmFuc2FjdGlvbiBmYWlsZWQ6JywgZXJyb3JFdmVudC50YXJnZXQuZXJyb3I/Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yRXZlbnQudGFyZ2V0LmVycm9yKTsgLy8gUmVqZWN0IHRoZSBwcm9taXNlIGlmIHRoZXJlJ3MgYW4gZXJyb3JcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbERhdGEodXNlcklEOnN0cmluZyk6IFByb21pc2U8YW55IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICBjb25zdCBkYiA9IGF3YWl0IG9wZW5EYXRhYmFzZSh1c2VySUQpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpO1xuICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFJlcXVlc3QgPSBzdG9yZS5nZXRBbGwoKTtcblxuICAgICAgICBnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChnZXRSZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ1JldHJpZXZlZCBkYXRhOicsIGdldFJlcXVlc3QucmVzdWx0Lmpzb25EYXRhKTtcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0Lmpzb25EYXRhIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShnZXRSZXF1ZXN0LnJlc3VsdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBkYXRhIHJlY29yZCBmb3VuZCBmb3Iga2V5Jywga2V5KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7IC8vIGV4cGxpY2l0bHkgcmVzb2x2ZSB3aXRoIHVuZGVmaW5lZCB3aGVuIG5vIGRhdGEgaXMgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgYSB0eXBlIGFzc2VydGlvbiB0byBhY2Nlc3MgdGhlIHNwZWNpZmljIHByb3BlcnRpZXMgb2YgSURCUmVxdWVzdCBlcnJvciBldmVudFxuICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zYWN0aW9uIGZhaWxlZDonLCBlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3JFdmVudC50YXJnZXQuZXJyb3IpOyAvLyByZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuIl19 \ No newline at end of file diff --git a/main.go b/main.go index 8dc7d07..4c2c9d7 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,41 @@ +// TODO +// 1. Convery network messages to flatbuffers so we don't need to parse JSON in Go. +// Use binary WS messages. Generate for Go and JS and use that everywhere. We can +// also use this for WebRTC messages. +// 2. Keep a list of all nodes that bootstrapped in the last N minutes. +// 3. When a node bootstraps, send it a random list of the nodes we know about. +// 4. Do the signalling to connect those nodes. +// 5. Each node will know about N other nodes. To find get the data for a feed, +// a node will need to find another node that has that data. To do that we'll need to +// implement a search message that is sent to all currently connected nodes, and they +// forward to all their nodes, passing back the address of the node that has the data. +// Once we find it, we'll do the signalling to connect to it via Web RTC via our existing connected nodes. +// ----- +// Feeds. People can curate feeds which can be any combination of hashtags, serch terms and users. +// Invite-only communities. Just block everyone else even if they post to it. +// Limit to friends and friends of friends + +// MVP +// You connect to the person you want to get the post from to get the post +// they give you the post +// If they're offline, you can't get their updates. +// This is very stupid, but it's simplest thing. +// The bootstrap server connects you to them directly via WebRTC +// This will make the thing actually function as a little toy for people to play with. +// This will let us test whether background tabs respond to webrtc requests. + +// THEN +// Need to have identity sorted out +// When you read someone's posts, you also cache them locally +// cache priority goes mutuals->people you follow->people who you folllow, follow, so you're always +// caching your mutual's posts +// Posts are samll, so caching per-post will work fine. +// Then the process is for the bootstrap server to remember all nodes and what they're caching +// This will allow distributed content delivery but put a memory and bendwidth strain on the +// bootstrap sever. Look into Web Transport for the raspberry pi overhead. Could buy a few more RPIs +// and make a little cluster +// Domain name so we can get a certificate and serve HTTPS / HTTP3 + package main import ( @@ -34,6 +72,7 @@ func handleWebSocket(w http.ResponseWriter, r *http.Request) { break } log.Printf("recv: %s", message) + err = conn.WriteMessage(mt, message) if err != nil { log.Println("Write error:", err) diff --git a/main.js b/main.js index 4a4592a..672649e 100644 --- a/main.js +++ b/main.js @@ -348,4 +348,4 @@ function renderPost(post) { return containerDiv; } window.addEventListener("load", main); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFHdEUsaUJBQWlCO0FBQ2pCLHNDQUFzQztBQUN0Qyx1QkFBdUI7QUFFdkIsNEJBQTRCO0FBQzVCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLElBQUk7QUFFSixNQUFNLElBQUk7SUFXUixZQUFZLE1BQWMsRUFBRSxTQUFpQixFQUFFLElBQVksRUFBRSxjQUFvQixFQUFFLFlBQWdDLElBQUksRUFBRSxlQUFpQyxJQUFJLEVBQUUsZUFBb0IsSUFBSTtRQUN0TCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUVyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUU1QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUNyQywrQkFBK0I7SUFDL0IsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFFbkQsMEJBQTBCO0lBQzFCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUV4RCw4QkFBOEI7SUFDOUIsSUFBSSxXQUFXLElBQUksZUFBZSxF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bkRhdGFiYXNlLCBnZXREYXRhLCBhZGREYXRhLCBhZGREYXRhQXJyYXkgfSBmcm9tIFwiLi9kYi5qc1wiXG5cbmRlY2xhcmUgbGV0IG1hcmtlZDogYW55O1xuLy8gbGV0IHBvc3RzOmFueTtcbi8vIGxldCBrZXlCYXNlID0gXCJkYW5kZWxpb25fcG9zdHNfdjFfXCJcbi8vIGxldCBrZXk6c3RyaW5nID0gXCJcIjtcblxuLy8gaW50ZXJmYWNlIFBvc3RUaW1lc3RhbXAge1xuLy8gICB5ZWFyOiBudW1iZXIsXG4vLyAgIG1vbnRoOiBudW1iZXIsXG4vLyAgIGRheTogbnVtYmVyLFxuLy8gICBob3VyOiBudW1iZXIsXG4vLyAgIG1pbnV0ZTogbnVtYmVyLFxuLy8gICBzZWNvbmQ6IG51bWJlcixcbi8vIH1cblxuY2xhc3MgUG9zdCB7XG4gIHBvc3RfdGltZXN0YW1wOiBEYXRlO1xuICBhdXRob3I6IHN0cmluZztcbiAgYXV0aG9yX2lkOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgaW1hZ2VfZGF0YTogQXJyYXlCdWZmZXIgfCBudWxsO1xuXG5cbiAgaW1wb3J0ZWRGcm9tOiBcInR3aXR0ZXJcIiB8IG51bGw7XG4gIGltcG9ydFNvdXJjZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGF1dGhvcjogc3RyaW5nLCBhdXRob3JfaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCBwb3N0X3RpbWVzdGFtcDogRGF0ZSwgaW1hZ2VEYXRhOiBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsLCBpbXBvcnRlZEZyb206IFwidHdpdHRlclwiIHwgbnVsbCA9IG51bGwsIGltcG9ydFNvdXJjZTogYW55ID0gbnVsbCkge1xuICAgIHRoaXMucG9zdF90aW1lc3RhbXAgPSBwb3N0X3RpbWVzdGFtcDtcblxuICAgIHRoaXMuYXV0aG9yID0gYXV0aG9yO1xuICAgIHRoaXMuYXV0aG9yX2lkID0gYXV0aG9yX2lkO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5pbWFnZV9kYXRhID0gaW1hZ2VEYXRhO1xuXG4gICAgdGhpcy5pbXBvcnRlZEZyb20gPSBpbXBvcnRlZEZyb207XG4gICAgdGhpcy5pbXBvcnRTb3VyY2UgPSBpbXBvcnRTb3VyY2U7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgLy8gVG90YWwgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudFxuICBjb25zdCB0b3RhbFBhZ2VIZWlnaHQgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcblxuICAvLyBDdXJyZW50IHNjcm9sbCBwb3NpdGlvblxuICBjb25zdCBzY3JvbGxQb2ludCA9IHdpbmRvdy5zY3JvbGxZICsgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gIC8vIENoZWNrIGlmIHNjcm9sbGVkIHRvIGJvdHRvbVxuICBpZiAoc2Nyb2xsUG9pbnQgPj0gdG90YWxQYWdlSGVpZ2h0KSB7XG4gICAgY29uc29sZS5sb2coJ1Njcm9sbGVkIHRvIHRoZSBib3R0b20hJyk7XG4gICAgY29uc29sZS5sb2coc2Nyb2xsUG9pbnQsIHRvdGFsUGFnZUhlaWdodCk7XG4gICAgLy8gWW91IGNhbiBwZXJmb3JtIHlvdXIgYWN0aW9uIGhlcmVcbiAgfVxufSk7XG5cblxuZnVuY3Rpb24gaW5pdE1hcmtkb3duKCkge1xuICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcbiAgcmVuZGVyZXIubGluayA9IChocmVmOiBhbnksIHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIiR7dGl0bGUgPyBgIHRpdGxlPVwiJHt0aXRsZX1cImAgOiAnJ30+JHt0ZXh0fTwvYT5gO1xuICB9O1xuICBtYXJrZWQuc2V0T3B0aW9ucyh7IHJlbmRlcmVyOiByZW5kZXJlciB9KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1zKGR1cmF0aW9uTXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uTXMpKTtcbn1cblxuZnVuY3Rpb24gdXVpZHY0KCkge1xuICByZXR1cm4gXCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLCAoYzogYW55KSA9PlxuICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXG4gICk7XG59XG5cbmxldCBsb2dMaW5lczogc3RyaW5nW10gPSBbXTtcbmxldCBsb2dMZW5ndGggPSAxMDtcbmZ1bmN0aW9uIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgbG9nTGluZXMucHVzaChgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpfTogJHttZXNzYWdlfWApO1xuICBpZiAobG9nTGluZXMubGVuZ3RoID4gMTApIHtcbiAgICBsb2dMaW5lcyA9IGxvZ0xpbmVzLnNsaWNlKGxvZ0xpbmVzLmxlbmd0aCAtIGxvZ0xlbmd0aCk7XG4gIH1cbiAgbGV0IGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG9nXCIpO1xuICBpZiAoIWxvZykge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG4gIGxvZy5pbm5lclRleHQgPSBsb2dMaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSk7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICBpZiAoIWRhdGFVcmwpIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZTY0ID0gZGF0YVVybC5zcGxpdCgnLCcpWzFdO1xuICAgICAgcmVzb2x2ZShiYXNlNjQpO1xuICAgIH07XG5cbiAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9O1xuXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUZXN0RGF0YSgpIHtcbiAgbGV0IHBvc3RzVGVzdERhdGEgPSBhd2FpdCAoYXdhaXQgZmV0Y2goXCIuL3Bvc3RzVGVzdERhdGEuanNvblwiKSkuanNvbigpO1xuXG4gIHJldHVybiBwb3N0c1Rlc3REYXRhO1xufVxuXG5sZXQgdGltZSA9IDA7XG5cbmZ1bmN0aW9uIHRpbWVyU3RhcnQoKSB7XG4gIHRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbn1cblxuZnVuY3Rpb24gdGltZXJEZWx0YSgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpIC0gdGltZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Rml4ZWRUd2VldFRleHQoZW50cnk6IGFueSkge1xuXG5cbiAgbGV0IGZ1bGxUZXh0ID0gZW50cnkudHdlZXQuZnVsbF90ZXh0O1xuXG4gIGxldCBsaW5rTWFya2Rvd24gPSBcIlwiO1xuICBmb3IgKGNvbnN0IHVybCBvZiBlbnRyeS50d2VldC5lbnRpdGllcy51cmxzKSB7XG4gICAgbGlua01hcmtkb3duID0gYFske3VybC5kaXNwbGF5X3VybH1dKCR7dXJsLmV4cGFuZGVkX3VybH0pYDtcbiAgICBmdWxsVGV4dCA9IGZ1bGxUZXh0LnJlcGxhY2UodXJsLnVybCwgbGlua01hcmtkb3duKTtcbiAgfVxuXG4gIHJldHVybiBmdWxsVGV4dFxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUZXN0RGF0YTIodXNlcklEOiBzdHJpbmcpIHtcbiAgbG9nKFwiSW1wb3J0aW5nIHR3ZWV0IGFyY2hpdmVcIilcbiAgbGV0IHBvc3RzVGVzdERhdGE6IGFueVtdID0gW107XG5cbiAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIuL3R3ZWV0cy5qc1wiKTtcbiAgbGV0IHR3ZWV0c1RleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gIHR3ZWV0c1RleHQgPSB0d2VldHNUZXh0LnJlcGxhY2UoXCJ3aW5kb3cuWVRELnR3ZWV0cy5wYXJ0MFwiLCBcIndpbmRvdy50d2VldERhdGFcIik7XG5cbiAgbmV3IEZ1bmN0aW9uKHR3ZWV0c1RleHQpKCk7XG5cblxuICAvLyBsZXQgdHdlZXRzID0gSlNPTi5wYXJzZSh0d2VldEpTT04pO1xuICBsZXQgY291bnQgPSAwO1xuXG4gIGZvciAobGV0IGVudHJ5IG9mICh3aW5kb3cgYXMgYW55KS50d2VldERhdGEpIHtcbiAgICAvLyBpZiAoZW50cnkudHdlZXQuaGFzT3duUHJvcGVydHkoXCJpbl9yZXBseV90b19zY3JlZW5fbmFtZVwiKSB8fCBlbnRyeS50d2VldC5yZXR3ZWV0ZWQgfHwgZW50cnkudHdlZXQuZnVsbF90ZXh0LnN0YXJ0c1dpdGgoXCJSVFwiKSkge1xuICAgIC8vICAgY29udGludWU7XG4gICAgLy8gfVxuXG4gICAgbGV0IG1lZGlhVVJMOiBzdHJpbmcgPSBlbnRyeS50d2VldD8uZW50aXRpZXM/Lm1lZGlhPy5bMF0/Lm1lZGlhX3VybDtcbiAgICBsZXQgaXNJbWFnZSA9IGZhbHNlO1xuICAgIGlmIChtZWRpYVVSTCkge1xuICAgICAgaXNJbWFnZSA9IG1lZGlhVVJMLmluY2x1ZGVzKCdqcGcnKTtcbiAgICB9XG5cbiAgICBsZXQgaW1hZ2VEYXRhID0gbnVsbDtcbiAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWVkaWFVUkwpO1xuICAgICAgICBhd2FpdCB3YWl0TXMoMTAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2VEYXRhID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhpbWFnZURhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGxldCB0aW1lU3RhbXAgPSBuZXcgRGF0ZShlbnRyeS50d2VldC5jcmVhdGVkX2F0KTtcbiAgICBsZXQgdHdlZXRUZXh0ID0gYXdhaXQgZ2V0Rml4ZWRUd2VldFRleHQoZW50cnkpO1xuICAgIGxldCBuZXdQb3N0ID0gbmV3IFBvc3QoJ2JvYmJ5ZGlnaXRhbGVzJywgdXNlcklELCB0d2VldFRleHQsIHRpbWVTdGFtcCwgaW1hZ2VEYXRhLCAndHdpdHRlcicsIGVudHJ5KTtcblxuICAgIHBvc3RzVGVzdERhdGEucHVzaChuZXdQb3N0KTtcblxuICAgIGNvdW50Kys7XG4gICAgaWYgKGNvdW50ICUgMTAwID09PSAwKSB7XG4gICAgICBsb2coYEltcG9ydGVkICR7Y291bnR9IHBvc3RzLi4uYCk7XG4gICAgICAvLyByZW5kZXIocG9zdHNUZXN0RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKGNvdW50ID09IDEwMC0xKSB7XG4gICAgLy8gICBicmVhaztcbiAgICAvLyB9XG5cbiAgfVxuICByZXR1cm4gcG9zdHNUZXN0RGF0YTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVzdERhdGEzKHVzZXJJRDogc3RyaW5nKSB7XG4gIGxldCBwb3N0cyA9IGF3YWl0IChhd2FpdCAoZmV0Y2goJy4vcG9zdHMuanNvbicpKSkuanNvbigpO1xuXG4gIHJldHVybiBwb3N0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJTZXJ2aWNlV29ya2VyKCkge1xuICBpZiAoIShcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlZ2lzdHJhdGlvbnMgPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCk7XG4gIGlmIChyZWdpc3RyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2Ugd29ya2VyIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7XG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbnNbMF07XG4gIH1cblxuICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlclxuICAgIC5yZWdpc3RlcihcIi9zdy5qc1wiKVxuICAgIC50aGVuKChyZWdpc3RyYXRpb24pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBXb3JrZXIgcmVnaXN0ZXJlZCB3aXRoIHNjb3BlOlwiLCByZWdpc3RyYXRpb24uc2NvcGUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJTZXJ2aWNlIFdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFBvc3QodXNlcklEOiBzdHJpbmcsIHBvc3RzOiBQb3N0W10sIHBvc3RUZXh0OiBzdHJpbmcpIHtcbiAgaWYgKCh0eXBlb2YgcG9zdFRleHQgIT09IFwic3RyaW5nXCIpIHx8IHBvc3RUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhcIk5vdCBwb3N0aW5nIGFuIGVtcHR5IHN0cmluZy4uLlwiKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3N0ID0gbmV3IFBvc3QoYGJvYmJ5ZGlnaXRhbGVzYCwgdXNlcklELCBwb3N0VGV4dCwgbmV3IERhdGUoKSk7XG5cbiAgcG9zdHMucHVzaChwb3N0KTtcbiAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwb3N0cykpO1xuICBhZGREYXRhKHVzZXJJRCwgcG9zdClcblxuICByZW5kZXIocG9zdHMpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUlEKCkge1xuICBpZiAoc2VsZi5jcnlwdG8uaGFzT3duUHJvcGVydHkoXCJyYW5kb21VVUlEXCIpKSB7XG4gICAgcmV0dXJuIHNlbGYuY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkdjQoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlcklEKCkge1xuICBsZXQgaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhbmRlbGlvbl9pZFwiKTtcblxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZW5lcmF0ZUlEKCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJkYW5kZWxpb25faWRcIiwgaWQpO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0V2Vic29ja2V0KHVzZXJJRDogc3RyaW5nKSB7XG4gIGxldCB3ZWJzb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfToke3dpbmRvdy5sb2NhdGlvbi5wb3J0fS93c2ApO1xuXG4gIHdlYnNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKFwiV2Vic29ja2V0OiBDT05ORUNURURcIik7XG4gICAgd2Vic29ja2V0LnNlbmQoYHtcIm1lc3NhZ2VUeXBlXCI6XCJjb25uZWN0XCIsIFwiaWRcIjogXCIke3VzZXJJRH1cIn1gKTtcblxuICAgIGxldCB3ZWJzb2NrZXRQaW5nSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCk9Pnt3ZWJzb2NrZXQuc2VuZChge1wibWVzc2FnZVR5cGVcIjpcInBpbmdcIiwgXCJpZFwiOiBcIiR7dXNlcklEfVwifWApO30sIDUwMDApXG4gIH07XG5cbiAgd2Vic29ja2V0Lm9uY2xvc2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKFwiV2Vic29ja2V0OiBESVNDT05ORUNURURcIik7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBsb2coJ1dlYnNvY2tldDogUkVTUE9OU0U6ICcgKyBldnQuZGF0YSk7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKCdXZWJzb2NrZXQ6IEVSUk9SOiAnICsgZXZ0KTtcbiAgfTtcblxuICByZXR1cm4gd2Vic29ja2V0O1xufVxuXG5mdW5jdGlvbiBzZXRGb250KGZvbnROYW1lOiBzdHJpbmcsIGZvbnRTaXplOiBzdHJpbmcpIHtcblxuICBsZXQgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50Jyk7XG5cbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGVudC5zdHlsZS5mb250RmFtaWx5ID0gZm9udE5hbWU7XG4gIGNvbnRlbnQuc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZTtcblxuICBsZXQgdGV4dEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWFfcG9zdCcpO1xuICBpZiAoIXRleHRBcmVhKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGV4dEFyZWEuc3R5bGUuZm9udEZhbWlseSA9IGZvbnROYW1lO1xuICB0ZXh0QXJlYS5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplO1xufVxuXG5mdW5jdGlvbiBpbml0T2ZmbGluZSgpIHtcbiAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGdvaW5nIG9mZmxpbmVcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCAoKSA9PiB7IGxvZyhcIm9mZmxpbmVcIikgfSk7XG5cbiAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGdvaW5nIG9ubGluZVxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4geyBsb2coXCJvbmxpbmVcIikgfSk7XG5cbiAgbG9nKGBPbmxpbmUgc3RhdHVzOiAke25hdmlnYXRvci5vbkxpbmUgPyBcIm9ubGluZVwiIDogXCJvZmZsaW5lXCJ9YClcblxufVxuXG5mdW5jdGlvbiBpbml0QnV0dG9ucyh1c2VySUQ6IHN0cmluZywgcG9zdHM6IFBvc3RbXSkge1xuICBsZXQgZm9udDFCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbl9mb250MVwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcbiAgbGV0IGZvbnQyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b25fZm9udDJcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cbiAgZm9udDFCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IHNldEZvbnQoJ0Jvb2tlcmx5JywgJzE2cHgnKSB9KTtcbiAgZm9udDJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IHNldEZvbnQoJ1ZpcmdpbCcsICcyNHB4JykgfSk7XG5cblxuICBsZXQgcG9zdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnV0dG9uX3Bvc3RcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIGxldCBwb3N0VGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGV4dGFyZWFfcG9zdFwiKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gIGlmICghKHBvc3RCdXR0b24gJiYgcG9zdFRleHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH1cblxuICBwb3N0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgYWRkUG9zdCh1c2VySUQsIHBvc3RzLCBwb3N0VGV4dC52YWx1ZSk7XG4gICAgcG9zdFRleHQudmFsdWUgPSBcIlwiO1xuICB9KTtcblxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkUG9zdHModXNlcklEOiBzdHJpbmcpIHtcblxuICB0aW1lclN0YXJ0KCk7XG4gIGxldCBwb3N0czogYW55ID0gYXdhaXQgZ2V0RGF0YSh1c2VySUQsIG5ldyBEYXRlKDIwMjIsIDgpLCBuZXcgRGF0ZSgpKTtcblxuICBpZiAocG9zdHMubGVuZ3RoID4gMCkge1xuICAgIGxvZyhgTG9hZGVkICR7cG9zdHMubGVuZ3RofSBwb3N0cyBpbiAke3RpbWVyRGVsdGEoKS50b0ZpeGVkKDIpfW1zYCk7XG4gICAgcmV0dXJuIHBvc3RzO1xuICB9XG5cbiAgcG9zdHMgPSBhd2FpdCBjcmVhdGVUZXN0RGF0YTIodXNlcklEKTtcblxuICBsb2coXCJBZGRpbmcgdGVzdCBkYXRhLi4uXCIpO1xuICBhZGREYXRhQXJyYXkodXNlcklELCBwb3N0cyk7XG4gIHJldHVybiBhd2FpdCBnZXREYXRhKHVzZXJJRCwgbmV3IERhdGUoMjAyMiwgOCksIG5ldyBEYXRlKCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBsZXQgcG9zdHM6IFBvc3RbXSA9IFtdO1xuICBsZXQgdGltZSA9IDA7IGBgXG4gIGxldCBkZWx0YSA9IDA7XG5cbiAgbGV0IHVybFBhcmFtcyA9IChuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkuc2VhcmNoUGFyYW1zO1xuXG4gIGlmICh1cmxQYXJhbXMuZ2V0KFwic3dcIikgPT09IFwidHJ1ZVwiKSB7XG4gICAgbGV0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IHJlZ2lzdGVyU2VydmljZVdvcmtlcigpO1xuICB9XG5cbiAgbGV0IHVzZXJJRCA9IGdldFVzZXJJRCgpO1xuICBsb2coYFlvdXIgdXNlciBJRCBpczogJHt1c2VySUR9YCk7XG5cbiAgaWYgKG5hdmlnYXRvci5zdG9yYWdlICYmIG5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3QgJiYgIW5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3RlZCkge1xuICAgIGNvbnN0IGlzUGVyc2lzdGVkID0gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UucGVyc2lzdCgpO1xuICAgIGxvZyhgUGVyc2lzdGVkIHN0b3JhZ2UgZ3JhbnRlZDogJHtpc1BlcnNpc3RlZH1gKTtcbiAgfVxuXG4gIGxvZyhgUGVyc2lzdGVkOiAkeyhhd2FpdCBuYXZpZ2F0b3I/LnN0b3JhZ2U/LnBlcnNpc3RlZCgpKT8udG9TdHJpbmcoKX1gKTtcblxuICBpbml0TWFya2Rvd24oKTtcblxuICAvLyBsZXQgbWFpbiA9IGF3YWl0IGZldGNoKFwiL21haW4uanNcIik7XG4gIC8vIGxldCBjb2RlID0gYXdhaXQgbWFpbi50ZXh0KCk7XG4gIC8vICAgY29uc29sZS5sb2coY29kZSk7XG4gIC8vICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7dHlwZTpcInVwZGF0ZU1haW5cIiwgY29kZTpjb2RlfSk7XG5cbiAgcG9zdHMgPSBhd2FpdCBsb2FkUG9zdHModXNlcklEKTtcblxuICBsZXQgd2Vic29ja2V0ID0gY29ubmVjdFdlYnNvY2tldCh1c2VySUQpO1xuICBpbml0T2ZmbGluZSgpO1xuICBpbml0QnV0dG9ucyh1c2VySUQsIHBvc3RzKTtcbiAgLy8gZGVidWdnZXI7XG5cbiAgdGltZXJTdGFydCgpO1xuICByZW5kZXIocG9zdHMpO1xuICBsZXQgcmVuZGVyVGltZSA9IHRpbWVyRGVsdGEoKTtcblxuICBsb2coYHJlbmRlciB0b29rOiAke3JlbmRlclRpbWUudG9GaXhlZCgyKX1tc2ApO1xuXG4gIGxvZyhgbWVtb3J5IHVzZWQ6ICR7KChwZXJmb3JtYW5jZSBhcyBhbnkpLm1lbW9yeS51c2VkSlNIZWFwU2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpfU1iYClcbn1cblxuZnVuY3Rpb24gcmVuZGVyKHBvc3RzOiBQb3N0W10pIHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGxldCBjb250ZW50RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb250ZW50XCIpO1xuICBpZiAoIWNvbnRlbnREaXYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuICBjb250ZW50RGl2LmlubmVySFRNTCA9IFwiXCI7XG4gIGxldCBjb3VudCA9IDA7XG5cblxuICBmb3IgKGxldCBpID0gcG9zdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgcG9zdERhdGEgPSBwb3N0c1tpXTtcblxuICAgIGxldCBwb3N0ID0gcmVuZGVyUG9zdChwb3N0RGF0YSk7XG5cbiAgICBpZiAocG9zdCkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQocG9zdCk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgICBpZiAoY291bnQgPiAxMDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG5cbiAgaWYgKCFjb250ZW50RGl2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZ2V0IGNvbnRlbnQgZGl2IVwiKTtcbiAgfVxuXG4gIGNvbnRlbnREaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG59XG5cbmZ1bmN0aW9uIHJlbmRlclBvc3QocG9zdDogUG9zdCkge1xuICBpZiAoIShwb3N0Lmhhc093blByb3BlcnR5KFwidGV4dFwiKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0IGlzIG1hbGZvcm1lZCFcIik7XG4gIH1cbiAgbGV0IGNvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgbGV0IHRpbWVzdGFtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCBociA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoclwiKTtcblxuXG4gIHRleHREaXYuaW5uZXJIVE1MID0gbWFya2VkLnBhcnNlKHBvc3QudGV4dCk7XG4gIC8vIHRleHREaXYuaW5uZXJIVE1MID0gRE9NUHVyaWZ5LnNhbml0aXplKG1hcmtlZC5wYXJzZShwb3N0LnRleHQpKTtcblxuICB0aW1lc3RhbXBEaXYuaW5uZXJUZXh0ID0gYCR7cG9zdC5wb3N0X3RpbWVzdGFtcC50b0RhdGVTdHJpbmcoKX1gO1xuICB0aW1lc3RhbXBEaXYudGl0bGUgPSBgJHtwb3N0LnBvc3RfdGltZXN0YW1wLnRvTG9jYWxlVGltZVN0cmluZygpfSDCtyAke3Bvc3QucG9zdF90aW1lc3RhbXAudG9EYXRlU3RyaW5nKCl9YFxuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoaHIpO1xuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGV4dERpdik7XG5cbiAgaWYgKCEoXCJpbWFnZV9kYXRhXCIgaW4gcG9zdCAmJiBwb3N0LmltYWdlX2RhdGEpKSB7XG4gICAgY29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRpbWVzdGFtcERpdik7XG4gICAgcmV0dXJuIGNvbnRhaW5lckRpdjtcbiAgICAvLyByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcG9zdC5pbWFnZV9kYXRhIGFzIEFycmF5QnVmZmVyXSwgeyB0eXBlOiAnaW1hZ2UvanBnJyB9KTtcbiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfTtcblxuXG4gIGltYWdlLnNyYyA9IHVybDtcbiAgLy8gaW1hZ2Uuc3JjID0gaW1hZ2Uuc3JjID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsXCIgKyBwb3N0LmltYWdlO1xuICBpbWFnZS5jbGFzc05hbWUgPSBcInBvc3RJbWFnZVwiO1xuXG4gIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChpbWFnZSk7XG4gIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aW1lc3RhbXBEaXYpO1xuXG4gIHJldHVybiBjb250YWluZXJEaXY7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBtYWluKTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFHdEUsaUJBQWlCO0FBQ2pCLHNDQUFzQztBQUN0Qyx1QkFBdUI7QUFFdkIsNEJBQTRCO0FBQzVCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLElBQUk7QUFFSixNQUFNLElBQUk7SUFXUixZQUFZLE1BQWMsRUFBRSxTQUFpQixFQUFFLElBQVksRUFBRSxjQUFvQixFQUFFLFlBQWdDLElBQUksRUFBRSxlQUFpQyxJQUFJLEVBQUUsZUFBb0IsSUFBSTtRQUN0TCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUVyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUU1QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUNyQywrQkFBK0I7SUFDL0IsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFFbkQsMEJBQTBCO0lBQzFCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUV4RCw4QkFBOEI7SUFDOUIsSUFBSSxXQUFXLElBQUksZUFBZSxF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Q0FBQztJQUMzQixDQUFDLENBQUM7SUFHRixLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNoQixpRUFBaUU7SUFDakUsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFFOUIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxZQUFZLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXZDLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3BlbkRhdGFiYXNlLCBnZXREYXRhLCBhZGREYXRhLCBhZGREYXRhQXJyYXkgfSBmcm9tIFwiLi9kYi5qc1wiXG5cbmRlY2xhcmUgbGV0IG1hcmtlZDogYW55O1xuLy8gbGV0IHBvc3RzOmFueTtcbi8vIGxldCBrZXlCYXNlID0gXCJkYW5kZWxpb25fcG9zdHNfdjFfXCJcbi8vIGxldCBrZXk6c3RyaW5nID0gXCJcIjtcblxuLy8gaW50ZXJmYWNlIFBvc3RUaW1lc3RhbXAge1xuLy8gICB5ZWFyOiBudW1iZXIsXG4vLyAgIG1vbnRoOiBudW1iZXIsXG4vLyAgIGRheTogbnVtYmVyLFxuLy8gICBob3VyOiBudW1iZXIsXG4vLyAgIG1pbnV0ZTogbnVtYmVyLFxuLy8gICBzZWNvbmQ6IG51bWJlcixcbi8vIH1cblxuY2xhc3MgUG9zdCB7XG4gIHBvc3RfdGltZXN0YW1wOiBEYXRlO1xuICBhdXRob3I6IHN0cmluZztcbiAgYXV0aG9yX2lkOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgaW1hZ2VfZGF0YTogQXJyYXlCdWZmZXIgfCBudWxsO1xuXG5cbiAgaW1wb3J0ZWRGcm9tOiBcInR3aXR0ZXJcIiB8IG51bGw7XG4gIGltcG9ydFNvdXJjZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGF1dGhvcjogc3RyaW5nLCBhdXRob3JfaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCBwb3N0X3RpbWVzdGFtcDogRGF0ZSwgaW1hZ2VEYXRhOiBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsLCBpbXBvcnRlZEZyb206IFwidHdpdHRlclwiIHwgbnVsbCA9IG51bGwsIGltcG9ydFNvdXJjZTogYW55ID0gbnVsbCkge1xuICAgIHRoaXMucG9zdF90aW1lc3RhbXAgPSBwb3N0X3RpbWVzdGFtcDtcblxuICAgIHRoaXMuYXV0aG9yID0gYXV0aG9yO1xuICAgIHRoaXMuYXV0aG9yX2lkID0gYXV0aG9yX2lkO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5pbWFnZV9kYXRhID0gaW1hZ2VEYXRhO1xuXG4gICAgdGhpcy5pbXBvcnRlZEZyb20gPSBpbXBvcnRlZEZyb207XG4gICAgdGhpcy5pbXBvcnRTb3VyY2UgPSBpbXBvcnRTb3VyY2U7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgLy8gVG90YWwgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudFxuICBjb25zdCB0b3RhbFBhZ2VIZWlnaHQgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcblxuICAvLyBDdXJyZW50IHNjcm9sbCBwb3NpdGlvblxuICBjb25zdCBzY3JvbGxQb2ludCA9IHdpbmRvdy5zY3JvbGxZICsgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gIC8vIENoZWNrIGlmIHNjcm9sbGVkIHRvIGJvdHRvbVxuICBpZiAoc2Nyb2xsUG9pbnQgPj0gdG90YWxQYWdlSGVpZ2h0KSB7XG4gICAgY29uc29sZS5sb2coJ1Njcm9sbGVkIHRvIHRoZSBib3R0b20hJyk7XG4gICAgY29uc29sZS5sb2coc2Nyb2xsUG9pbnQsIHRvdGFsUGFnZUhlaWdodCk7XG4gICAgLy8gWW91IGNhbiBwZXJmb3JtIHlvdXIgYWN0aW9uIGhlcmVcbiAgfVxufSk7XG5cblxuZnVuY3Rpb24gaW5pdE1hcmtkb3duKCkge1xuICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcbiAgcmVuZGVyZXIubGluayA9IChocmVmOiBhbnksIHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIiR7dGl0bGUgPyBgIHRpdGxlPVwiJHt0aXRsZX1cImAgOiAnJ30+JHt0ZXh0fTwvYT5gO1xuICB9O1xuICBtYXJrZWQuc2V0T3B0aW9ucyh7IHJlbmRlcmVyOiByZW5kZXJlciB9KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1zKGR1cmF0aW9uTXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uTXMpKTtcbn1cblxuZnVuY3Rpb24gdXVpZHY0KCkge1xuICByZXR1cm4gXCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLCAoYzogYW55KSA9PlxuICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXG4gICk7XG59XG5cbmxldCBsb2dMaW5lczogc3RyaW5nW10gPSBbXTtcbmxldCBsb2dMZW5ndGggPSAxMDtcbmZ1bmN0aW9uIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgbG9nTGluZXMucHVzaChgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpfTogJHttZXNzYWdlfWApO1xuICBpZiAobG9nTGluZXMubGVuZ3RoID4gMTApIHtcbiAgICBsb2dMaW5lcyA9IGxvZ0xpbmVzLnNsaWNlKGxvZ0xpbmVzLmxlbmd0aCAtIGxvZ0xlbmd0aCk7XG4gIH1cbiAgbGV0IGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG9nXCIpO1xuICBpZiAoIWxvZykge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG4gIGxvZy5pbm5lclRleHQgPSBsb2dMaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSk7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICBpZiAoIWRhdGFVcmwpIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZTY0ID0gZGF0YVVybC5zcGxpdCgnLCcpWzFdO1xuICAgICAgcmVzb2x2ZShiYXNlNjQpO1xuICAgIH07XG5cbiAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9O1xuXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUZXN0RGF0YSgpIHtcbiAgbGV0IHBvc3RzVGVzdERhdGEgPSBhd2FpdCAoYXdhaXQgZmV0Y2goXCIuL3Bvc3RzVGVzdERhdGEuanNvblwiKSkuanNvbigpO1xuXG4gIHJldHVybiBwb3N0c1Rlc3REYXRhO1xufVxuXG5sZXQgdGltZSA9IDA7XG5cbmZ1bmN0aW9uIHRpbWVyU3RhcnQoKSB7XG4gIHRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbn1cblxuZnVuY3Rpb24gdGltZXJEZWx0YSgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpIC0gdGltZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Rml4ZWRUd2VldFRleHQoZW50cnk6IGFueSkge1xuXG5cbiAgbGV0IGZ1bGxUZXh0ID0gZW50cnkudHdlZXQuZnVsbF90ZXh0O1xuXG4gIGxldCBsaW5rTWFya2Rvd24gPSBcIlwiO1xuICBmb3IgKGNvbnN0IHVybCBvZiBlbnRyeS50d2VldC5lbnRpdGllcy51cmxzKSB7XG4gICAgbGlua01hcmtkb3duID0gYFske3VybC5kaXNwbGF5X3VybH1dKCR7dXJsLmV4cGFuZGVkX3VybH0pYDtcbiAgICBmdWxsVGV4dCA9IGZ1bGxUZXh0LnJlcGxhY2UodXJsLnVybCwgbGlua01hcmtkb3duKTtcbiAgfVxuXG4gIHJldHVybiBmdWxsVGV4dFxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUZXN0RGF0YTIodXNlcklEOiBzdHJpbmcpIHtcbiAgbG9nKFwiSW1wb3J0aW5nIHR3ZWV0IGFyY2hpdmVcIilcbiAgbGV0IHBvc3RzVGVzdERhdGE6IGFueVtdID0gW107XG5cbiAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIuL3R3ZWV0cy5qc1wiKTtcbiAgbGV0IHR3ZWV0c1RleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gIHR3ZWV0c1RleHQgPSB0d2VldHNUZXh0LnJlcGxhY2UoXCJ3aW5kb3cuWVRELnR3ZWV0cy5wYXJ0MFwiLCBcIndpbmRvdy50d2VldERhdGFcIik7XG5cbiAgbmV3IEZ1bmN0aW9uKHR3ZWV0c1RleHQpKCk7XG5cblxuICAvLyBsZXQgdHdlZXRzID0gSlNPTi5wYXJzZSh0d2VldEpTT04pO1xuICBsZXQgY291bnQgPSAwO1xuXG4gIGZvciAobGV0IGVudHJ5IG9mICh3aW5kb3cgYXMgYW55KS50d2VldERhdGEpIHtcbiAgICAvLyBpZiAoZW50cnkudHdlZXQuaGFzT3duUHJvcGVydHkoXCJpbl9yZXBseV90b19zY3JlZW5fbmFtZVwiKSB8fCBlbnRyeS50d2VldC5yZXR3ZWV0ZWQgfHwgZW50cnkudHdlZXQuZnVsbF90ZXh0LnN0YXJ0c1dpdGgoXCJSVFwiKSkge1xuICAgIC8vICAgY29udGludWU7XG4gICAgLy8gfVxuXG4gICAgbGV0IG1lZGlhVVJMOiBzdHJpbmcgPSBlbnRyeS50d2VldD8uZW50aXRpZXM/Lm1lZGlhPy5bMF0/Lm1lZGlhX3VybDtcbiAgICBsZXQgaXNJbWFnZSA9IGZhbHNlO1xuICAgIGlmIChtZWRpYVVSTCkge1xuICAgICAgaXNJbWFnZSA9IG1lZGlhVVJMLmluY2x1ZGVzKCdqcGcnKTtcbiAgICB9XG5cbiAgICBsZXQgaW1hZ2VEYXRhID0gbnVsbDtcbiAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWVkaWFVUkwpO1xuICAgICAgICBhd2FpdCB3YWl0TXMoMTAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2VEYXRhID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhpbWFnZURhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGxldCB0aW1lU3RhbXAgPSBuZXcgRGF0ZShlbnRyeS50d2VldC5jcmVhdGVkX2F0KTtcbiAgICBsZXQgdHdlZXRUZXh0ID0gYXdhaXQgZ2V0Rml4ZWRUd2VldFRleHQoZW50cnkpO1xuICAgIGxldCBuZXdQb3N0ID0gbmV3IFBvc3QoJ2JvYmJ5ZGlnaXRhbGVzJywgdXNlcklELCB0d2VldFRleHQsIHRpbWVTdGFtcCwgaW1hZ2VEYXRhLCAndHdpdHRlcicsIGVudHJ5KTtcblxuICAgIHBvc3RzVGVzdERhdGEucHVzaChuZXdQb3N0KTtcblxuICAgIGNvdW50Kys7XG4gICAgaWYgKGNvdW50ICUgMTAwID09PSAwKSB7XG4gICAgICBsb2coYEltcG9ydGVkICR7Y291bnR9IHBvc3RzLi4uYCk7XG4gICAgICAvLyByZW5kZXIocG9zdHNUZXN0RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKGNvdW50ID09IDEwMC0xKSB7XG4gICAgLy8gICBicmVhaztcbiAgICAvLyB9XG5cbiAgfVxuICByZXR1cm4gcG9zdHNUZXN0RGF0YTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVzdERhdGEzKHVzZXJJRDogc3RyaW5nKSB7XG4gIGxldCBwb3N0cyA9IGF3YWl0IChhd2FpdCAoZmV0Y2goJy4vcG9zdHMuanNvbicpKSkuanNvbigpO1xuXG4gIHJldHVybiBwb3N0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJTZXJ2aWNlV29ya2VyKCkge1xuICBpZiAoIShcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlZ2lzdHJhdGlvbnMgPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCk7XG4gIGlmIChyZWdpc3RyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2Ugd29ya2VyIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7XG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbnNbMF07XG4gIH1cblxuICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlclxuICAgIC5yZWdpc3RlcihcIi9zdy5qc1wiKVxuICAgIC50aGVuKChyZWdpc3RyYXRpb24pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBXb3JrZXIgcmVnaXN0ZXJlZCB3aXRoIHNjb3BlOlwiLCByZWdpc3RyYXRpb24uc2NvcGUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJTZXJ2aWNlIFdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFBvc3QodXNlcklEOiBzdHJpbmcsIHBvc3RzOiBQb3N0W10sIHBvc3RUZXh0OiBzdHJpbmcpIHtcbiAgaWYgKCh0eXBlb2YgcG9zdFRleHQgIT09IFwic3RyaW5nXCIpIHx8IHBvc3RUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhcIk5vdCBwb3N0aW5nIGFuIGVtcHR5IHN0cmluZy4uLlwiKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3N0ID0gbmV3IFBvc3QoYGJvYmJ5ZGlnaXRhbGVzYCwgdXNlcklELCBwb3N0VGV4dCwgbmV3IERhdGUoKSk7XG5cbiAgcG9zdHMucHVzaChwb3N0KTtcbiAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwb3N0cykpO1xuICBhZGREYXRhKHVzZXJJRCwgcG9zdClcblxuICByZW5kZXIocG9zdHMpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUlEKCkge1xuICBpZiAoc2VsZi5jcnlwdG8uaGFzT3duUHJvcGVydHkoXCJyYW5kb21VVUlEXCIpKSB7XG4gICAgcmV0dXJuIHNlbGYuY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkdjQoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlcklEKCkge1xuICBsZXQgaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhbmRlbGlvbl9pZFwiKTtcblxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZW5lcmF0ZUlEKCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJkYW5kZWxpb25faWRcIiwgaWQpO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0V2Vic29ja2V0KHVzZXJJRDogc3RyaW5nKSB7XG4gIGxldCB3ZWJzb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfToke3dpbmRvdy5sb2NhdGlvbi5wb3J0fS93c2ApO1xuXG4gIHdlYnNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKFwiV2Vic29ja2V0OiBDT05ORUNURURcIik7XG4gICAgd2Vic29ja2V0LnNlbmQoYHtcIm1lc3NhZ2VUeXBlXCI6XCJjb25uZWN0XCIsIFwiaWRcIjogXCIke3VzZXJJRH1cIn1gKTtcblxuICAgIGxldCB3ZWJzb2NrZXRQaW5nSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCk9Pnt3ZWJzb2NrZXQuc2VuZChge1wibWVzc2FnZVR5cGVcIjpcInBpbmdcIiwgXCJpZFwiOiBcIiR7dXNlcklEfVwifWApO30sIDUwMDApXG4gIH07XG5cbiAgd2Vic29ja2V0Lm9uY2xvc2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKFwiV2Vic29ja2V0OiBESVNDT05ORUNURURcIik7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBsb2coJ1dlYnNvY2tldDogUkVTUE9OU0U6ICcgKyBldnQuZGF0YSk7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKCdXZWJzb2NrZXQ6IEVSUk9SOiAnICsgZXZ0KTtcbiAgfTtcblxuICByZXR1cm4gd2Vic29ja2V0O1xufVxuXG5mdW5jdGlvbiBzZXRGb250KGZvbnROYW1lOiBzdHJpbmcsIGZvbnRTaXplOiBzdHJpbmcpIHtcblxuICBsZXQgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50Jyk7XG5cbiAgaWYgKCFjb250ZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGVudC5zdHlsZS5mb250RmFtaWx5ID0gZm9udE5hbWU7XG4gIGNvbnRlbnQuc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZTtcblxuICBsZXQgdGV4dEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWFfcG9zdCcpO1xuICBpZiAoIXRleHRBcmVhKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGV4dEFyZWEuc3R5bGUuZm9udEZhbWlseSA9IGZvbnROYW1lO1xuICB0ZXh0QXJlYS5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplO1xufVxuXG5mdW5jdGlvbiBpbml0T2ZmbGluZSgpIHtcbiAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGdvaW5nIG9mZmxpbmVcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCAoKSA9PiB7IGxvZyhcIm9mZmxpbmVcIikgfSk7XG5cbiAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGdvaW5nIG9ubGluZVxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4geyBsb2coXCJvbmxpbmVcIikgfSk7XG5cbiAgbG9nKGBPbmxpbmUgc3RhdHVzOiAke25hdmlnYXRvci5vbkxpbmUgPyBcIm9ubGluZVwiIDogXCJvZmZsaW5lXCJ9YClcblxufVxuXG5mdW5jdGlvbiBpbml0QnV0dG9ucyh1c2VySUQ6IHN0cmluZywgcG9zdHM6IFBvc3RbXSkge1xuICBsZXQgZm9udDFCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbl9mb250MVwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcbiAgbGV0IGZvbnQyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b25fZm9udDJcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cbiAgZm9udDFCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IHNldEZvbnQoJ0Jvb2tlcmx5JywgJzE2cHgnKSB9KTtcbiAgZm9udDJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IHNldEZvbnQoJ1ZpcmdpbCcsICcyNHB4JykgfSk7XG5cblxuICBsZXQgcG9zdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnV0dG9uX3Bvc3RcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIGxldCBwb3N0VGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGV4dGFyZWFfcG9zdFwiKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gIGlmICghKHBvc3RCdXR0b24gJiYgcG9zdFRleHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH1cblxuICBwb3N0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgYWRkUG9zdCh1c2VySUQsIHBvc3RzLCBwb3N0VGV4dC52YWx1ZSk7XG4gICAgcG9zdFRleHQudmFsdWUgPSBcIlwiO1xuICB9KTtcblxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkUG9zdHModXNlcklEOiBzdHJpbmcpIHtcblxuICB0aW1lclN0YXJ0KCk7XG4gIGxldCBwb3N0czogYW55ID0gYXdhaXQgZ2V0RGF0YSh1c2VySUQsIG5ldyBEYXRlKDIwMjIsIDgpLCBuZXcgRGF0ZSgpKTtcblxuICBpZiAocG9zdHMubGVuZ3RoID4gMCkge1xuICAgIGxvZyhgTG9hZGVkICR7cG9zdHMubGVuZ3RofSBwb3N0cyBpbiAke3RpbWVyRGVsdGEoKS50b0ZpeGVkKDIpfW1zYCk7XG4gICAgcmV0dXJuIHBvc3RzO1xuICB9XG5cbiAgcG9zdHMgPSBhd2FpdCBjcmVhdGVUZXN0RGF0YTIodXNlcklEKTtcblxuICBsb2coXCJBZGRpbmcgdGVzdCBkYXRhLi4uXCIpO1xuICBhZGREYXRhQXJyYXkodXNlcklELCBwb3N0cyk7XG4gIHJldHVybiBhd2FpdCBnZXREYXRhKHVzZXJJRCwgbmV3IERhdGUoMjAyMiwgOCksIG5ldyBEYXRlKCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBsZXQgcG9zdHM6IFBvc3RbXSA9IFtdO1xuICBsZXQgdGltZSA9IDA7IGBgXG4gIGxldCBkZWx0YSA9IDA7XG5cbiAgbGV0IHVybFBhcmFtcyA9IChuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkuc2VhcmNoUGFyYW1zO1xuXG4gIGlmICh1cmxQYXJhbXMuZ2V0KFwic3dcIikgPT09IFwidHJ1ZVwiKSB7XG4gICAgbGV0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IHJlZ2lzdGVyU2VydmljZVdvcmtlcigpO1xuICB9XG5cbiAgbGV0IHVzZXJJRCA9IGdldFVzZXJJRCgpO1xuICBsb2coYFlvdXIgdXNlciBJRCBpczogJHt1c2VySUR9YCk7XG5cbiAgaWYgKG5hdmlnYXRvci5zdG9yYWdlICYmIG5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3QgJiYgIW5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3RlZCkge1xuICAgIGNvbnN0IGlzUGVyc2lzdGVkID0gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UucGVyc2lzdCgpO1xuICAgIGxvZyhgUGVyc2lzdGVkIHN0b3JhZ2UgZ3JhbnRlZDogJHtpc1BlcnNpc3RlZH1gKTtcbiAgfVxuXG4gIGxvZyhgUGVyc2lzdGVkOiAkeyhhd2FpdCBuYXZpZ2F0b3I/LnN0b3JhZ2U/LnBlcnNpc3RlZCgpKT8udG9TdHJpbmcoKX1gKTtcblxuICBpbml0TWFya2Rvd24oKTtcblxuICAvLyBsZXQgbWFpbiA9IGF3YWl0IGZldGNoKFwiL21haW4uanNcIik7XG4gIC8vIGxldCBjb2RlID0gYXdhaXQgbWFpbi50ZXh0KCk7XG4gIC8vICAgY29uc29sZS5sb2coY29kZSk7XG4gIC8vICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7dHlwZTpcInVwZGF0ZU1haW5cIiwgY29kZTpjb2RlfSk7XG5cbiAgcG9zdHMgPSBhd2FpdCBsb2FkUG9zdHModXNlcklEKTtcblxuICBsZXQgd2Vic29ja2V0ID0gY29ubmVjdFdlYnNvY2tldCh1c2VySUQpO1xuICBpbml0T2ZmbGluZSgpO1xuICBpbml0QnV0dG9ucyh1c2VySUQsIHBvc3RzKTtcbiAgLy8gZGVidWdnZXI7XG5cbiAgdGltZXJTdGFydCgpO1xuICByZW5kZXIocG9zdHMpO1xuICBsZXQgcmVuZGVyVGltZSA9IHRpbWVyRGVsdGEoKTtcblxuICBsb2coYHJlbmRlciB0b29rOiAke3JlbmRlclRpbWUudG9GaXhlZCgyKX1tc2ApO1xuXG4gIGxvZyhgbWVtb3J5IHVzZWQ6ICR7KChwZXJmb3JtYW5jZSBhcyBhbnkpLm1lbW9yeS51c2VkSlNIZWFwU2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpfU1iYClcbn1cblxuZnVuY3Rpb24gcmVuZGVyKHBvc3RzOiBQb3N0W10pIHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGxldCBjb250ZW50RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb250ZW50XCIpO1xuICBpZiAoIWNvbnRlbnREaXYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuICBjb250ZW50RGl2LmlubmVySFRNTCA9IFwiXCI7XG4gIGxldCBjb3VudCA9IDA7XG5cblxuICBmb3IgKGxldCBpID0gcG9zdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgcG9zdERhdGEgPSBwb3N0c1tpXTtcblxuICAgIGxldCBwb3N0ID0gcmVuZGVyUG9zdChwb3N0RGF0YSk7XG5cbiAgICBpZiAocG9zdCkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQocG9zdCk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgICBpZiAoY291bnQgPiAxMDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG5cbiAgaWYgKCFjb250ZW50RGl2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZ2V0IGNvbnRlbnQgZGl2IVwiKTtcbiAgfVxuXG4gIGNvbnRlbnREaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG59XG5cbmZ1bmN0aW9uIHJlbmRlclBvc3QocG9zdDogUG9zdCkge1xuICBpZiAoIShwb3N0Lmhhc093blByb3BlcnR5KFwidGV4dFwiKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0IGlzIG1hbGZvcm1lZCFcIik7XG4gIH1cbiAgbGV0IGNvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgbGV0IHRpbWVzdGFtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCBociA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoclwiKTtcblxuXG4gIHRleHREaXYuaW5uZXJIVE1MID0gbWFya2VkLnBhcnNlKHBvc3QudGV4dCk7XG4gIC8vIHRleHREaXYuaW5uZXJIVE1MID0gRE9NUHVyaWZ5LnNhbml0aXplKG1hcmtlZC5wYXJzZShwb3N0LnRleHQpKTtcblxuICB0aW1lc3RhbXBEaXYuaW5uZXJUZXh0ID0gYCR7cG9zdC5wb3N0X3RpbWVzdGFtcC50b0RhdGVTdHJpbmcoKX1gO1xuICB0aW1lc3RhbXBEaXYudGl0bGUgPSBgJHtwb3N0LnBvc3RfdGltZXN0YW1wLnRvTG9jYWxlVGltZVN0cmluZygpfSDCtyAke3Bvc3QucG9zdF90aW1lc3RhbXAudG9EYXRlU3RyaW5nKCl9YFxuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoaHIpO1xuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGV4dERpdik7XG5cbiAgaWYgKCEoXCJpbWFnZV9kYXRhXCIgaW4gcG9zdCAmJiBwb3N0LmltYWdlX2RhdGEpKSB7XG4gICAgY29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRpbWVzdGFtcERpdik7XG4gICAgcmV0dXJuIGNvbnRhaW5lckRpdjtcbiAgICAvLyByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcG9zdC5pbWFnZV9kYXRhIGFzIEFycmF5QnVmZmVyXSwgeyB0eXBlOiAnaW1hZ2UvanBnJyB9KTtcbiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfTtcblxuXG4gIGltYWdlLnNyYyA9IHVybDtcbiAgLy8gaW1hZ2Uuc3JjID0gaW1hZ2Uuc3JjID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsXCIgKyBwb3N0LmltYWdlO1xuICBpbWFnZS5jbGFzc05hbWUgPSBcInBvc3RJbWFnZVwiO1xuXG4gIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChpbWFnZSk7XG4gIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aW1lc3RhbXBEaXYpO1xuXG4gIHJldHVybiBjb250YWluZXJEaXY7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBtYWluKTtcbiJdfQ== \ No newline at end of file diff --git a/sw.js b/sw.js index 172cea6..893eac8 100644 --- a/sw.js +++ b/sw.js @@ -51,4 +51,4 @@ addEventListener("message", async (e) => { break; } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvc3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUF5QjtBQUN6QixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRztJQUN2QixhQUFhO0lBQ2IsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixjQUFjO0NBQ2IsQ0FBQztBQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFLLEVBQUUsRUFBRTtJQUN6QyxDQUFDLENBQUMsU0FBUyxDQUNULENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDVixNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCxxREFBcUQsRUFDckQsY0FBYyxDQUNmLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBSyxFQUFFLEVBQUU7SUFDdkMsQ0FBQyxDQUFDLFdBQVcsQ0FDWCxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ1YsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQ1QsNENBQTRDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQzVELENBQUM7WUFDRixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCw4REFBOEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDOUUsQ0FBQztZQUVGLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakI7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCw4Q0FBOEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDOUQsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7U0FDOUQ7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDbkIsS0FBSyxZQUFZO1lBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEMsTUFBTTtLQUNUO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFc3RhYmxpc2ggYSBjYWNoZSBuYW1lXG5jb25zdCBjYWNoZU5hbWUgPSBcImRhbmRlbGlvbl9jYWNoZV92MVwiO1xuXG5jb25zdCBjb250ZW50VG9DYWNoZSA9IFtcblwiL2luZGV4Lmh0bWxcIixcblwiL21haW4uanNcIixcblwiL21hcmtlZC5taW4uanNcIixcblwiL2RiLmpzXCIsXG5cIi9ib29rZXJseS53b2ZmMlwiLFxuXCIvdmlyZ2lsLndvZmYyXCIsXG5cIi9mYXZpY29uLmljb1wiXG5dO1xuXG5zZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnN0YWxsXCIsIChlOmFueSkgPT4ge1xuICBlLndhaXRVbnRpbChcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBjYWNoZXMub3BlbihjYWNoZU5hbWUpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiW1NlcnZpY2UgV29ya2VyXSBDYWNoaW5nIGFsbDogYXBwIHNoZWxsIGFuZCBjb250ZW50XCIsXG4gICAgICAgIGNvbnRlbnRUb0NhY2hlXG4gICAgICApO1xuICAgICAgYXdhaXQgY2FjaGUuYWRkQWxsKGNvbnRlbnRUb0NhY2hlKTtcbiAgICB9KSgpXG4gICk7XG59KTtcblxuc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiZmV0Y2hcIiwgKGU6YW55KSA9PiB7XG4gIGUucmVzcG9uZFdpdGgoXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBjYWNoZXMubWF0Y2goZS5yZXF1ZXN0KTtcbiAgICAgIGlmIChyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbU2VydmljZSBXb3JrZXJdIENhY2hlIGhpdCBmb3IgcmVzb3VyY2U6ICR7ZS5yZXF1ZXN0LnVybH1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1NlcnZpY2UgV29ya2VyXSBDYWNoZSBtaXNzLCBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlOiAke2UucmVxdWVzdC51cmx9YFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZS5yZXF1ZXN0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBjYWNoZXMub3BlbihjYWNoZU5hbWUpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbU2VydmljZSBXb3JrZXJdIEFkZGluZyByZXNvdXJjZSB0byBjYWNoZTogJHtlLnJlcXVlc3QudXJsfWBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcmVzb3VyY2U6ICR7ZS5yZXF1ZXN0LnVybH1gKVxuICAgICAgfVxuICAgICAgY2FjaGUucHV0KGUucmVxdWVzdCwgcmVzcG9uc2UuY2xvbmUoKSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkoKVxuICApO1xufSk7XG5cbmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jIChlKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBNZXNzYWdlIHJlY2VpdmVkOiAke2UuZGF0YX1gKTtcblxuICBzd2l0Y2ggKGUuZGF0YS50eXBlKSB7XG4gICAgY2FzZSBcInVwZGF0ZU1haW5cIjpcbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgY2FjaGVzLm9wZW4oY2FjaGVOYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmljZSBXb3JrZXJdIENhY2hpbmcgbmV3IHJlc291cmNlOiBtYWluLmpzYCk7XG4gICAgICBjYWNoZS5wdXQoXCIvbWFpbi5qc1wiLCBuZXcgUmVzcG9uc2UoKSk7XG4gICAgICBicmVhaztcbiAgfVxufSk7XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvc3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUF5QjtBQUN6QixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRztJQUN2QixhQUFhO0lBQ2IsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixjQUFjO0NBQ2IsQ0FBQztBQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFLLEVBQUUsRUFBRTtJQUN6QyxDQUFDLENBQUMsU0FBUyxDQUNULENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDVixNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCxxREFBcUQsRUFDckQsY0FBYyxDQUNmLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBSyxFQUFFLEVBQUU7SUFDdkMsQ0FBQyxDQUFDLFdBQVcsQ0FDWCxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ1YsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FDVCw0Q0FBNEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDNUQsQ0FBQztZQUNGLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FDVCw4REFBOEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDOUUsQ0FBQztZQUVGLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FDVCw4Q0FBOEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDOUQsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUMvRCxDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxFQUFFLENBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUzQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsS0FBSyxZQUFZO1lBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEMsTUFBTTtJQUNWLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVzdGFibGlzaCBhIGNhY2hlIG5hbWVcbmNvbnN0IGNhY2hlTmFtZSA9IFwiZGFuZGVsaW9uX2NhY2hlX3YxXCI7XG5cbmNvbnN0IGNvbnRlbnRUb0NhY2hlID0gW1xuXCIvaW5kZXguaHRtbFwiLFxuXCIvbWFpbi5qc1wiLFxuXCIvbWFya2VkLm1pbi5qc1wiLFxuXCIvZGIuanNcIixcblwiL2Jvb2tlcmx5LndvZmYyXCIsXG5cIi92aXJnaWwud29mZjJcIixcblwiL2Zhdmljb24uaWNvXCJcbl07XG5cbnNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImluc3RhbGxcIiwgKGU6YW55KSA9PiB7XG4gIGUud2FpdFVudGlsKFxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGNhY2hlcy5vcGVuKGNhY2hlTmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJbU2VydmljZSBXb3JrZXJdIENhY2hpbmcgYWxsOiBhcHAgc2hlbGwgYW5kIGNvbnRlbnRcIixcbiAgICAgICAgY29udGVudFRvQ2FjaGVcbiAgICAgICk7XG4gICAgICBhd2FpdCBjYWNoZS5hZGRBbGwoY29udGVudFRvQ2FjaGUpO1xuICAgIH0pKClcbiAgKTtcbn0pO1xuXG5zZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJmZXRjaFwiLCAoZTphbnkpID0+IHtcbiAgZS5yZXNwb25kV2l0aChcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGNhY2hlcy5tYXRjaChlLnJlcXVlc3QpO1xuICAgICAgaWYgKHIpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtTZXJ2aWNlIFdvcmtlcl0gQ2FjaGUgaGl0IGZvciByZXNvdXJjZTogJHtlLnJlcXVlc3QudXJsfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG5cbiAgICAgIGxldCByZXNwb25zZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbU2VydmljZSBXb3JrZXJdIENhY2hlIG1pc3MsIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2U6ICR7ZS5yZXF1ZXN0LnVybH1gXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlLnJlcXVlc3QpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IGNhY2hlcy5vcGVuKGNhY2hlTmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtTZXJ2aWNlIFdvcmtlcl0gQWRkaW5nIHJlc291cmNlIHRvIGNhY2hlOiAke2UucmVxdWVzdC51cmx9YFxuICAgICAgKTtcblxuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCByZXNvdXJjZTogJHtlLnJlcXVlc3QudXJsfWApXG4gICAgICB9XG4gICAgICBjYWNoZS5wdXQoZS5yZXF1ZXN0LCByZXNwb25zZS5jbG9uZSgpKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KSgpXG4gICk7XG59KTtcblxuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgYXN5bmMgKGUpID0+IHtcbiAgY29uc29sZS5sb2coYE1lc3NhZ2UgcmVjZWl2ZWQ6ICR7ZS5kYXRhfWApO1xuXG4gIHN3aXRjaCAoZS5kYXRhLnR5cGUpIHtcbiAgICBjYXNlIFwidXBkYXRlTWFpblwiOlxuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBjYWNoZXMub3BlbihjYWNoZU5hbWUpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2aWNlIFdvcmtlcl0gQ2FjaGluZyBuZXcgcmVzb3VyY2U6IG1haW4uanNgKTtcbiAgICAgIGNhY2hlLnB1dChcIi9tYWluLmpzXCIsIG5ldyBSZXNwb25zZSgpKTtcbiAgICAgIGJyZWFrO1xuICB9XG59KTtcbiJdfQ== \ No newline at end of file