@silverbirder/zoom-meeting-creator
Version:
zoom-meeting-creator is a Google Apps Script for creating zoom meetings.
235 lines (206 loc) • 18.6 kB
JavaScript
// @see https://qiita.com/kudota/items/b480610cc3f575a8ec6f
function Zoom() {
}
function Slack() {
}/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
!*** (webpack)/buildin/global.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
var g;
// This works in non-strict mode
g = (function() {
return this;
})();
try {
// This works if eval is allowed (see CSP)
g = g || new Function("return this")();
} catch (e) {
// This works if the window reference is available
if (typeof window === "object") g = window;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/***/ "./src/index.ts":
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
/*! exports provided: Zoom, Slack */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _zoom_zoomImpl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom/zoomImpl */ "./src/zoom/zoomImpl.ts");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Zoom", function() { return _zoom_zoomImpl__WEBPACK_IMPORTED_MODULE_0__["ZoomImpl"]; });
/* harmony import */ var _slack_slackImpl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slack/slackImpl */ "./src/slack/slackImpl.ts");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Slack", function() { return _slack_slackImpl__WEBPACK_IMPORTED_MODULE_1__["SlackImpl"]; });
// @see https://qiita.com/kudota/items/b480610cc3f575a8ec6f
global.Zoom = _zoom_zoomImpl__WEBPACK_IMPORTED_MODULE_0__["ZoomImpl"];
global.Slack = _slack_slackImpl__WEBPACK_IMPORTED_MODULE_1__["SlackImpl"];
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
/***/ }),
/***/ "./src/slack/slackImpl.ts":
/*!********************************!*\
!*** ./src/slack/slackImpl.ts ***!
\********************************/
/*! exports provided: SlackImpl */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SlackImpl", function() { return SlackImpl; });
var SlackImpl = /** @class */ (function () {
function SlackImpl() {
}
SlackImpl.prototype.sendToWebHook = function (webHookUrl, payload) {
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(webHookUrl, options);
};
return SlackImpl;
}());
/***/ }),
/***/ "./src/zoom/zoomImpl.ts":
/*!******************************!*\
!*** ./src/zoom/zoomImpl.ts ***!
\******************************/
/*! exports provided: ZoomImpl */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZoomImpl", function() { return ZoomImpl; });
var CHARSET = 'UTF-8';
var ZoomImpl = /** @class */ (function () {
function ZoomImpl(apiKey, apiSecret) {
this.apiKey = apiKey;
this.apiSecret = apiSecret;
this.token = '';
}
ZoomImpl.prototype.updateToken = function () {
var encodeText = Utilities.base64Encode(JSON.stringify({
'alg': 'HS256',
'typ': 'JWT'
})) + "." + Utilities.base64Encode(JSON.stringify({
"iss": this.apiKey,
"exp": Date.now() + 3600
}));
this.token = encodeText + "." + Utilities.base64Encode(Utilities.computeHmacSha256Signature(encodeText, this.apiSecret));
};
ZoomImpl.prototype.createUserMeeting = function (userId, params) {
var requestOptions = this._requestOptions('post');
requestOptions.payload = JSON.stringify(params);
var response = UrlFetchApp.fetch("https://api.zoom.us/v2/users/" + userId + "/meetings", requestOptions);
return JSON.parse(response.getContentText(CHARSET));
};
ZoomImpl.prototype.getUsers = function () {
var response = UrlFetchApp.fetch("https://api.zoom.us/v2/users/", this._requestOptions('get'));
return JSON.parse(response.getContentText(CHARSET)).users;
};
ZoomImpl.prototype.getUserByEmail = function (email) {
var users = this.getUsers();
return users.filter(function (user) { return user.email == email; })[0];
};
ZoomImpl.prototype._requestOptions = function (method) {
return {
'method': method,
'contentType': 'application/json',
'headers': { 'Authorization': 'Bearer ' + this.token }
};
};
return ZoomImpl;
}());
/***/ })
/******/ });
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3NsYWNrL3NsYWNrSW1wbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvem9vbS96b29tSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7QUNsRkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7Ozs7Ozs7O0FDbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDMkM7QUFDRztBQUM5QyxjQUFjLHVEQUFRO0FBQ3RCLGVBQWUsMERBQVM7QUFDeUI7Ozs7Ozs7Ozs7Ozs7O0FDTGpEO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ29COzs7Ozs7Ozs7Ozs7O0FDYnJCO0FBQUE7QUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDRCQUE0QixFQUFFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNtQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLy8gQHNlZSBodHRwczovL3FpaXRhLmNvbS9rdWRvdGEvaXRlbXMvYjQ4MDYxMGNjM2Y1NzVhOGVjNmZcbmltcG9ydCB7IFpvb21JbXBsIH0gZnJvbSBcIi4vem9vbS96b29tSW1wbFwiO1xuaW1wb3J0IHsgU2xhY2tJbXBsIH0gZnJvbSBcIi4vc2xhY2svc2xhY2tJbXBsXCI7XG5nbG9iYWwuWm9vbSA9IFpvb21JbXBsO1xuZ2xvYmFsLlNsYWNrID0gU2xhY2tJbXBsO1xuZXhwb3J0IHsgWm9vbUltcGwgYXMgWm9vbSwgU2xhY2tJbXBsIGFzIFNsYWNrLCB9O1xuIiwidmFyIFNsYWNrSW1wbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTbGFja0ltcGwoKSB7XG4gICAgfVxuICAgIFNsYWNrSW1wbC5wcm90b3R5cGUuc2VuZFRvV2ViSG9vayA9IGZ1bmN0aW9uICh3ZWJIb29rVXJsLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgXCJtZXRob2RcIjogXCJwb3N0XCIsXG4gICAgICAgICAgICBcImNvbnRlbnRUeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgXCJwYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH07XG4gICAgICAgIFVybEZldGNoQXBwLmZldGNoKHdlYkhvb2tVcmwsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFNsYWNrSW1wbDtcbn0oKSk7XG5leHBvcnQgeyBTbGFja0ltcGwgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBDSEFSU0VUID0gJ1VURi04JztcbnZhciBab29tSW1wbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBab29tSW1wbChhcGlLZXksIGFwaVNlY3JldCkge1xuICAgICAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICAgICAgdGhpcy5hcGlTZWNyZXQgPSBhcGlTZWNyZXQ7XG4gICAgICAgIHRoaXMudG9rZW4gPSAnJztcbiAgICB9XG4gICAgWm9vbUltcGwucHJvdG90eXBlLnVwZGF0ZVRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW5jb2RlVGV4dCA9IFV0aWxpdGllcy5iYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgJ2FsZyc6ICdIUzI1NicsXG4gICAgICAgICAgICAndHlwJzogJ0pXVCdcbiAgICAgICAgfSkpICsgXCIuXCIgKyBVdGlsaXRpZXMuYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIFwiaXNzXCI6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgXCJleHBcIjogRGF0ZS5ub3coKSArIDM2MDBcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnRva2VuID0gZW5jb2RlVGV4dCArIFwiLlwiICsgVXRpbGl0aWVzLmJhc2U2NEVuY29kZShVdGlsaXRpZXMuY29tcHV0ZUhtYWNTaGEyNTZTaWduYXR1cmUoZW5jb2RlVGV4dCwgdGhpcy5hcGlTZWNyZXQpKTtcbiAgICB9O1xuICAgIFpvb21JbXBsLnByb3RvdHlwZS5jcmVhdGVVc2VyTWVldGluZyA9IGZ1bmN0aW9uICh1c2VySWQsIHBhcmFtcykge1xuICAgICAgICB2YXIgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLl9yZXF1ZXN0T3B0aW9ucygncG9zdCcpO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gVXJsRmV0Y2hBcHAuZmV0Y2goXCJodHRwczovL2FwaS56b29tLnVzL3YyL3VzZXJzL1wiICsgdXNlcklkICsgXCIvbWVldGluZ3NcIiwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRDb250ZW50VGV4dChDSEFSU0VUKSk7XG4gICAgfTtcbiAgICBab29tSW1wbC5wcm90b3R5cGUuZ2V0VXNlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXNwb25zZSA9IFVybEZldGNoQXBwLmZldGNoKFwiaHR0cHM6Ly9hcGkuem9vbS51cy92Mi91c2Vycy9cIiwgdGhpcy5fcmVxdWVzdE9wdGlvbnMoJ2dldCcpKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0Q29udGVudFRleHQoQ0hBUlNFVCkpLnVzZXJzO1xuICAgIH07XG4gICAgWm9vbUltcGwucHJvdG90eXBlLmdldFVzZXJCeUVtYWlsID0gZnVuY3Rpb24gKGVtYWlsKSB7XG4gICAgICAgIHZhciB1c2VycyA9IHRoaXMuZ2V0VXNlcnMoKTtcbiAgICAgICAgcmV0dXJuIHVzZXJzLmZpbHRlcihmdW5jdGlvbiAodXNlcikgeyByZXR1cm4gdXNlci5lbWFpbCA9PSBlbWFpbDsgfSlbMF07XG4gICAgfTtcbiAgICBab29tSW1wbC5wcm90b3R5cGUuX3JlcXVlc3RPcHRpb25zID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21ldGhvZCc6IG1ldGhvZCxcbiAgICAgICAgICAgICdjb250ZW50VHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdoZWFkZXJzJzogeyAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRoaXMudG9rZW4gfVxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFpvb21JbXBsO1xufSgpKTtcbmV4cG9ydCB7IFpvb21JbXBsIH07XG4iXSwic291cmNlUm9vdCI6IiJ9