diff --git a/CHANGELOG.md b/CHANGELOG.md
index fd2e5e4c8bf90660e28c2d9615465183b6154527..d156de24453fbaeb502648889a48bf9e31c1e597 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.14.0] - 2024-07-25 ##
+
+### Added ###
+
+- GRPC Entity Service can be enabled with
+  `BUILD_MODULE_EXT_GRPC_ENTIY_SERVICE=ENABLED`. Defaults to
+  `DISABLED`. More info on this module under
+  `src/doc/extension/grpc-entity-service.rst`. <https://docs.indiscale.com/caosdb-webui/extension/grpc-entity-service.html>
+
+### Fixed ###
+
+- [#252](https://gitlab.com/linkahead/linkahead-webui/-/issues/252) Make
+  different link to parent dir more visible.
+- [#255](https://gitlab.com/linkahead/linkahead-webui/-/issues/255) Remove
+  disabled scroll bar under property names that would show on some browsers.
+- [#258](https://gitlab.com/linkahead/linkahead-webui/-/issues/258)
+  Ignore `auto_focus` when `create_show_form_callback` is called on an
+  element without HTML `form` elements.
+
 ## [0.13.3 - 2024-04-23] ##
 
 ### Fixed ###
diff --git a/CITATION.cff b/CITATION.cff
index 9c61739c32ef1730d3f7ab5608875b4d712c70ae..2a53c7abc8c5e00ccf49d2543133c84380493fc7 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -20,6 +20,6 @@ authors:
     given-names: Stefan
     orcid: https://orcid.org/0000-0001-7214-8125
 title: LinkAhead - WebUI
-version: 0.13.2
+version: 0.14.0
 doi: 10.3390/data4020083
-date-released: 2024-02-20
+date-released: 2024-07-25
diff --git a/build.properties.d/00_default.properties b/build.properties.d/00_default.properties
index 96017406e54c3275ed9b5884f7292ca8611e6142..17d3d2fdf979f373073f9f5efb19085b124200a6 100644
--- a/build.properties.d/00_default.properties
+++ b/build.properties.d/00_default.properties
@@ -58,6 +58,7 @@ BUILD_MODULE_SHOW_ID_IN_LABEL=DISABLED
 BUILD_MODULE_LEGACY_QUERY_FORM=DISABLED
 BUILD_MODULE_LEGACY_MAP=ENABLED
 BUILD_MODULE_EXT_FILE_UPLOAD=ENABLED
+BUILD_MODULE_EXT_GRPC_ENTITY_SERVICE=DISABLED
 
 BUILD_MODULE_USER_MANAGEMENT=ENABLED
 BUILD_MODULE_USER_MANAGEMENT_CHANGE_OWN_PASSWORD_REALM=CaosDB
diff --git a/src/core/css/webcaosdb.css b/src/core/css/webcaosdb.css
index bf8f2666bba3bb2a03c7dc3c1cca70ac439d4dca..036457bc7906ab03b9876effb4d6efd15d55b2ad 100644
--- a/src/core/css/webcaosdb.css
+++ b/src/core/css/webcaosdb.css
@@ -249,7 +249,7 @@ h5 {
 .caosdb-v-property-left-col {
     min-height: 30px;
     display: inline-block;
-    overflow-x: scroll;
+    overflow-x: auto;
 }
 
 .caosdb-v-property-left-col > * {
@@ -872,7 +872,7 @@ details p {
 }
 
 .caosdb-select-table > .card-body {
-    overflow-x: scroll;
+    overflow-x: auto;
 }
 
 .caosdb-f-property-value .caosdb-value-list details summary::after {
@@ -898,6 +898,11 @@ details p {
   max-width: 80vw;
 }
 
+/* Make different link to parent dir more visible. */
+.caosdb-entity-heading-attr a {
+  margin-right: .75em;
+}
+
 @media (min-width: 576px) {
   .caosdb-f-property-value .caosdb-value-list details[open] {
     max-width: 200px;
diff --git a/src/core/js/ext_bookmarks.js b/src/core/js/ext_bookmarks.js
index 34eea46ff4bc2e0952e3423cc66899b2115be03b..b92d361e6eae2ccb60d50017679df609673c8c82 100644
--- a/src/core/js/ext_bookmarks.js
+++ b/src/core/js/ext_bookmarks.js
@@ -115,6 +115,7 @@ var ext_bookmarks = function ($, logger, config) {
     const set_export_button_click = config["set_export_button_click"] || function (cb) {
         $("#caosdb-f-bookmarks-export-link")
             .toggleClass("disabled", !cb)
+            .off("click") // remove old click handler
             .on("click", cb);
     }
 
@@ -804,4 +805,4 @@ $(document).ready(function () {
         ext_bookmarks = ext_bookmarks($, log.getLogger("ext_bookmarks"), config);
         caosdb_modules.register(ext_bookmarks);
     }
-});
\ No newline at end of file
+});
diff --git a/src/core/js/form_panel.js b/src/core/js/form_panel.js
index 4eb2ddca72c5e35a9af58cf7d5f14d5a8fe85b04..80f754b6f420bcbca7adfe25c300ad79a780168a 100644
--- a/src/core/js/form_panel.js
+++ b/src/core/js/form_panel.js
@@ -26,7 +26,7 @@
  * form_panel module for creating a panel below the navbar where forms can be
  * placed.
  */
-var form_panel = new function () {
+var form_panel = new function() {
     const logger = log.getLogger("form_panel");
     this.version = "0.1";
     this.dependencies = ["log", "caosdb_utils", "markdown", "bootstrap"];
@@ -38,7 +38,7 @@ var form_panel = new function () {
      * 1. Creates the form panel if it does not exist.
      * 2. Removes the welcome panel if present.
      */
-    this.get_form_panel = function (panel_id, title) {
+    this.get_form_panel = function(panel_id, title) {
         // remove welcome
         $(".caosdb-f-welcome-panel").remove();
         $(".caosdb-v-welcome-panel").remove();
@@ -60,7 +60,7 @@ var form_panel = new function () {
     /**
      * Remove the form panel from the DOM tree.
      */
-    this.destroy_form_panel = function (panel) {
+    this.destroy_form_panel = function(panel) {
         $(panel).remove();
     };
 
@@ -75,22 +75,22 @@ var form_panel = new function () {
      * The first input element will be focused unless you specify `false` as
      * fifths parameter.
      */
-    this.create_show_form_callback = function (
-        panel_id, title, form_config, form_creator=undefined, auto_focus=true
+    this.create_show_form_callback = function(
+        panel_id, title, form_config, form_creator = undefined, auto_focus = true
     ) {
         return (e) => {
             logger.trace("enter show_form_panel", e);
 
             const panel = $(form_panel.get_form_panel(panel_id, title));
             if (panel.find("form").length === 0) {
-                if (form_config != undefined && form_creator!=undefined){
+                if (form_config != undefined && form_creator != undefined) {
                     throw new Error("create_show_form_callback takes either a FormConfig or a function that creates the form");
                 }
 
                 var form;
-                if (form_config != undefined ){
+                if (form_config != undefined) {
                     form = form_elements.make_form(form_config);
-                } else if (form_creator != undefined ){
+                } else if (form_creator != undefined) {
                     form = form_creator();
                 } else {
                     throw new Error("create_show_form_callback takes a FormConfig or a function that creates the form");
@@ -104,17 +104,18 @@ var form_panel = new function () {
                 );
             }
             if (typeof auto_focus === "undefined" || !!auto_focus === true) {
-                if (panel.find("form")[0].length>0) {
+                if (panel.find("form").length > 0 && panel.find("form")[0].length > 0) {
                     panel.find("form")[0][0].focus();
+                } else {
+                    logger.debug("create_show_form_callback was called with auto_focus = true (default), but no form is given.");
                 }
             }
         }
     };
 
-    this.init = function () {
-    }
+    this.init = function() {}
 }
 
-$(document).ready(function () {
+$(document).ready(function() {
     caosdb_modules.register(form_panel);
 });
diff --git a/src/core/js/grpc-entity-service.bundle.js b/src/core/js/grpc-entity-service.bundle.js
new file mode 100644
index 0000000000000000000000000000000000000000..67603ffba6b53295e344c906310398a9bd11cdc5
--- /dev/null
+++ b/src/core/js/grpc-entity-service.bundle.js
@@ -0,0 +1 @@
+(()=>{var __webpack_modules__={326:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(748);\n/* harmony import */ var _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }\nfunction _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a \'" + methodName + "\' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\n\n/**\n * Expose the entity service to the legacy webui.\n *\n * You can, among other things,\n *\n * 1. create a new TransactionService:\n *    var service = new window.entityService.TransactionService(\n *        window.connection.getBasePath() + "api");\n * 2. execute a query:\n *    response = await service.executeQuery("FIND Something");\n * 3. Use the Entity class to wrapp the "Entity" WebGRPC-Message:\n *    var entity = new windown.entityService.Entity(\n *        response.getResponsesList()[0]\n *                .getRetrieveResponse()\n *                .getFindQueryResult()\n *                .getResultSetList()[0]\n *                .getEntityResponse()\n *                .getEntity());\n */\nvar entity_service = {\n  init: function () {\n    var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) switch (_context.prev = _context.next) {\n          case 0:\n            window.entityService = _indiscale_caosdb_webui_entity_service__WEBPACK_IMPORTED_MODULE_0__;\n          case 1:\n          case "end":\n            return _context.stop();\n        }\n      }, _callee);\n    }));\n    function init() {\n      return _init.apply(this, arguments);\n    }\n    return init;\n  }()\n};\n$(document).ready(function () {\n  var build = window.BUILD_MODULE_EXT_GRPC_ENTITY_SERVICE || "${BUILD_MODULE_EXT_GRPC_ENTITY_SERVICE}";\n  if (build === "ENABLED") {\n    caosdb_modules.register(entity_service);\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFDNUIsSUFBTUMsS0FBSyxHQUFHTCxNQUFNLENBQUNNLG9DQUFvQyxJQUFJLHlDQUF5QztFQUN0RyxJQUFJRCxLQUFLLEtBQUssU0FBUyxFQUFFO0lBQ3ZCRSxjQUFjLENBQUNDLFFBQVEsQ0FBQ2QsY0FBYyxDQUFDO0VBQ3pDO0FBQ0YsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2Fvc0RCV2VidWkyLy4vc3JjL2VudGl0eS1zZXJ2aWNlLmpzPzI3ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgRW50aXR5U2VydmljZU1vZHVsZSBmcm9tIFwiQGluZGlzY2FsZS9jYW9zZGItd2VidWktZW50aXR5LXNlcnZpY2VcIjtcblxuLyoqXG4gKiBFeHBvc2UgdGhlIGVudGl0eSBzZXJ2aWNlIHRvIHRoZSBsZWdhY3kgd2VidWkuXG4gKlxuICogWW91IGNhbiwgYW1vbmcgb3RoZXIgdGhpbmdzLFxuICpcbiAqIDEuIGNyZWF0ZSBhIG5ldyBUcmFuc2FjdGlvblNlcnZpY2U6XG4gKiAgICB2YXIgc2VydmljZSA9IG5ldyB3aW5kb3cuZW50aXR5U2VydmljZS5UcmFuc2FjdGlvblNlcnZpY2UoXG4gKiAgICAgICAgd2luZG93LmNvbm5lY3Rpb24uZ2V0QmFzZVBhdGgoKSArIFwiYXBpXCIpO1xuICogMi4gZXhlY3V0ZSBhIHF1ZXJ5OlxuICogICAgcmVzcG9uc2UgPSBhd2FpdCBzZXJ2aWNlLmV4ZWN1dGVRdWVyeShcIkZJTkQgU29tZXRoaW5nXCIpO1xuICogMy4gVXNlIHRoZSBFbnRpdHkgY2xhc3MgdG8gd3JhcHAgdGhlIFwiRW50aXR5XCIgV2ViR1JQQy1NZXNzYWdlOlxuICogICAgdmFyIGVudGl0eSA9IG5ldyB3aW5kb3duLmVudGl0eVNlcnZpY2UuRW50aXR5KFxuICogICAgICAgIHJlc3BvbnNlLmdldFJlc3BvbnNlc0xpc3QoKVswXVxuICogICAgICAgICAgICAgICAgLmdldFJldHJpZXZlUmVzcG9uc2UoKVxuICogICAgICAgICAgICAgICAgLmdldEZpbmRRdWVyeVJlc3VsdCgpXG4gKiAgICAgICAgICAgICAgICAuZ2V0UmVzdWx0U2V0TGlzdCgpWzBdXG4gKiAgICAgICAgICAgICAgICAuZ2V0RW50aXR5UmVzcG9uc2UoKVxuICogICAgICAgICAgICAgICAgLmdldEVudGl0eSgpKTtcbiAqL1xuY29uc3QgZW50aXR5X3NlcnZpY2UgPSB7XG5cbiAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHdpbmRvdy5lbnRpdHlTZXJ2aWNlID0gRW50aXR5U2VydmljZU1vZHVsZTtcbiAgfSxcbn07XG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYnVpbGQgPSB3aW5kb3cuQlVJTERfTU9EVUxFX0VYVF9HUlBDX0VOVElUWV9TRVJWSUNFIHx8IFwiJHtCVUlMRF9NT0RVTEVfRVhUX0dSUENfRU5USVRZX1NFUlZJQ0V9XCJcbiAgaWYgKGJ1aWxkID09PSBcIkVOQUJMRURcIikge1xuICAgIGNhb3NkYl9tb2R1bGVzLnJlZ2lzdGVyKGVudGl0eV9zZXJ2aWNlKTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImV4cG9ydHMiLCJPcCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093biIsImhhc093blByb3BlcnR5IiwiZGVmaW5lUHJvcGVydHkiLCJvYmoiLCJrZXkiLCJkZXNjIiwidmFsdWUiLCIkU3ltYm9sIiwiU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJpdGVyYXRvciIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImVyciIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInNlbGYiLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY3JlYXRlIiwiY29udGV4dCIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJmbiIsImFyZyIsInR5cGUiLCJjYWxsIiwiQ29udGludWVTZW50aW5lbCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJOYXRpdmVJdGVyYXRvclByb3RvdHlwZSIsInZhbHVlcyIsIkdwIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIm1ldGhvZCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiUHJvbWlzZUltcGwiLCJpbnZva2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVjb3JkIiwicmVzdWx0IiwiX3R5cGVvZiIsIl9fYXdhaXQiLCJ0aGVuIiwidW53cmFwcGVkIiwiZXJyb3IiLCJwcmV2aW91c1Byb21pc2UiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsInN0YXRlIiwiRXJyb3IiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsImRvbmUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaW5mbyIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJlbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsImlzTmFOIiwibGVuZ3RoIiwiaSIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsIml0ZXIiLCJrZXlzIiwidmFsIiwib2JqZWN0IiwicmV2ZXJzZSIsInBvcCIsInNraXBUZW1wUmVzZXQiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicm9vdFJlY29yZCIsInJ2YWwiLCJleGNlcHRpb24iLCJoYW5kbGUiLCJsb2MiLCJjYXVnaHQiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsInRocm93biIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiRW50aXR5U2VydmljZU1vZHVsZSIsImVudGl0eV9zZXJ2aWNlIiwiaW5pdCIsIl9pbml0IiwiX2NhbGxlZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJ3aW5kb3ciLCJlbnRpdHlTZXJ2aWNlIiwiJCIsImRvY3VtZW50IiwicmVhZHkiLCJidWlsZCIsIkJVSUxEX01PRFVMRV9FWFRfR1JQQ19FTlRJVFlfU0VSVklDRSIsImNhb3NkYl9tb2R1bGVzIiwicmVnaXN0ZXIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n')},748:module=>{eval('!function(e,t){ true?module.exports=t():0}(self,(function(){return(()=>{var __webpack_modules__={347:(e,t,o)=>{var r={};r.v1=o(400),t.h=r},400:(e,t,o)=>{var r={};r.web=o(40);var n={caosdb:{}};n.caosdb.entity={},n.caosdb.entity.v1=o(226),n.caosdb.entity.v1.EntityTransactionServiceClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")},n.caosdb.entity.v1.EntityTransactionServicePromiseClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")};var s=new r.web.MethodDescriptor("/caosdb.entity.v1.EntityTransactionService/MultiTransaction",r.web.MethodType.UNARY,n.caosdb.entity.v1.MultiTransactionRequest,n.caosdb.entity.v1.MultiTransactionResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.MultiTransactionResponse.deserializeBinary);n.caosdb.entity.v1.EntityTransactionServiceClient.prototype.multiTransaction=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiTransaction",e,t||{},s,o)},n.caosdb.entity.v1.EntityTransactionServicePromiseClient.prototype.multiTransaction=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiTransaction",e,t||{},s)};var i=new r.web.MethodDescriptor("/caosdb.entity.v1.EntityTransactionService/MultiRetrieveEntityACL",r.web.MethodType.UNARY,n.caosdb.entity.v1.MultiRetrieveEntityACLRequest,n.caosdb.entity.v1.MultiRetrieveEntityACLResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinary);n.caosdb.entity.v1.EntityTransactionServiceClient.prototype.multiRetrieveEntityACL=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiRetrieveEntityACL",e,t||{},i,o)},n.caosdb.entity.v1.EntityTransactionServicePromiseClient.prototype.multiRetrieveEntityACL=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiRetrieveEntityACL",e,t||{},i)};var a=new r.web.MethodDescriptor("/caosdb.entity.v1.EntityTransactionService/MultiUpdateEntityACL",r.web.MethodType.UNARY,n.caosdb.entity.v1.MultiUpdateEntityACLRequest,n.caosdb.entity.v1.MultiUpdateEntityACLResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinary);n.caosdb.entity.v1.EntityTransactionServiceClient.prototype.multiUpdateEntityACL=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiUpdateEntityACL",e,t||{},a,o)},n.caosdb.entity.v1.EntityTransactionServicePromiseClient.prototype.multiUpdateEntityACL=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.EntityTransactionService/MultiUpdateEntityACL",e,t||{},a)},n.caosdb.entity.v1.FileTransmissionServiceClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")},n.caosdb.entity.v1.FileTransmissionServicePromiseClient=function(e,t,o){o||(o={}),o.format="text",this.client_=new r.web.GrpcWebClientBase(o),this.hostname_=e.replace(/\\/+$/,"")};var g=new r.web.MethodDescriptor("/caosdb.entity.v1.FileTransmissionService/RegisterFileUpload",r.web.MethodType.UNARY,n.caosdb.entity.v1.RegisterFileUploadRequest,n.caosdb.entity.v1.RegisterFileUploadResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinary);n.caosdb.entity.v1.FileTransmissionServiceClient.prototype.registerFileUpload=function(e,t,o){return this.client_.rpcCall(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/RegisterFileUpload",e,t||{},g,o)},n.caosdb.entity.v1.FileTransmissionServicePromiseClient.prototype.registerFileUpload=function(e,t){return this.client_.unaryCall(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/RegisterFileUpload",e,t||{},g)};var p=new r.web.MethodDescriptor("/caosdb.entity.v1.FileTransmissionService/FileDownload",r.web.MethodType.SERVER_STREAMING,n.caosdb.entity.v1.FileDownloadRequest,n.caosdb.entity.v1.FileDownloadResponse,(function(e){return e.serializeBinary()}),n.caosdb.entity.v1.FileDownloadResponse.deserializeBinary);n.caosdb.entity.v1.FileTransmissionServiceClient.prototype.fileDownload=function(e,t){return this.client_.serverStreaming(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/FileDownload",e,t||{},p)},n.caosdb.entity.v1.FileTransmissionServicePromiseClient.prototype.fileDownload=function(e,t){return this.client_.serverStreaming(this.hostname_+"/caosdb.entity.v1.FileTransmissionService/FileDownload",e,t||{},p)},e.exports=n.caosdb.entity.v1},226:(e,t,o)=>{var r=o(19),n=r,s="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof window&&window||void 0!==s&&s||"undefined"!=typeof self&&self||function(){return this}.call(null)||Function("return this")();n.exportSymbol("proto.caosdb.entity.v1.AtomicDataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.CollectionValues",null,s),n.exportSymbol("proto.caosdb.entity.v1.DataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.DataType.DataTypeCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteRequest.WrappedRequestCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.DeleteResponse.WrappedResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Entity",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityACL",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityAclPermission",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityPermission",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityPermissionRule",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityPermissionRuleCapability",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.EntityRole",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileChunk",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileDescriptor",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileDownloadRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileDownloadResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileTransmissionId",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileTransmissionSettings",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileUploadRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.FileUploadResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.FindQueryResult",null,s),n.exportSymbol("proto.caosdb.entity.v1.Hash",null,s),n.exportSymbol("proto.caosdb.entity.v1.IdResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.Importance",null,s),n.exportSymbol("proto.caosdb.entity.v1.InsertRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.InsertResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.InsertResponse.WrappedResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.ListDataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.ListDataType.ListDataTypeCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Message",null,s),n.exportSymbol("proto.caosdb.entity.v1.MessageCode",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiTransactionRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiTransactionResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiUpdateEntityACLRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.MultiUpdateEntityACLResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.Parent",null,s),n.exportSymbol("proto.caosdb.entity.v1.Property",null,s),n.exportSymbol("proto.caosdb.entity.v1.Query",null,s),n.exportSymbol("proto.caosdb.entity.v1.ReferenceDataType",null,s),n.exportSymbol("proto.caosdb.entity.v1.RegisterFileUploadRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.RegisterFileUploadResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.RegistrationStatus",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveRequest.WrappedRequestCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.RetrieveResponse.RetrieveResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.ScalarValue",null,s),n.exportSymbol("proto.caosdb.entity.v1.ScalarValue.ScalarValueCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryColumn",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryHeader",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryResult",null,s),n.exportSymbol("proto.caosdb.entity.v1.SelectQueryRow",null,s),n.exportSymbol("proto.caosdb.entity.v1.SpecialValue",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionRequest.WrappedRequestsCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransactionResponse.TransactionResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.TransmissionStatus",null,s),n.exportSymbol("proto.caosdb.entity.v1.UpdateRequest",null,s),n.exportSymbol("proto.caosdb.entity.v1.UpdateResponse",null,s),n.exportSymbol("proto.caosdb.entity.v1.UpdateResponse.WrappedResponseCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Value",null,s),n.exportSymbol("proto.caosdb.entity.v1.Value.ValueCase",null,s),n.exportSymbol("proto.caosdb.entity.v1.Version",null,s),proto.caosdb.entity.v1.ReferenceDataType=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.ReferenceDataType,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.ReferenceDataType.displayName="proto.caosdb.entity.v1.ReferenceDataType"),proto.caosdb.entity.v1.ListDataType=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.ListDataType.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.ListDataType,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.ListDataType.displayName="proto.caosdb.entity.v1.ListDataType"),proto.caosdb.entity.v1.DataType=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.DataType.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.DataType,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.DataType.displayName="proto.caosdb.entity.v1.DataType"),proto.caosdb.entity.v1.CollectionValues=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.CollectionValues.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.CollectionValues,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.CollectionValues.displayName="proto.caosdb.entity.v1.CollectionValues"),proto.caosdb.entity.v1.ScalarValue=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.ScalarValue.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.ScalarValue,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.ScalarValue.displayName="proto.caosdb.entity.v1.ScalarValue"),proto.caosdb.entity.v1.Value=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.Value.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.Value,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Value.displayName="proto.caosdb.entity.v1.Value"),proto.caosdb.entity.v1.Message=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Message,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Message.displayName="proto.caosdb.entity.v1.Message"),proto.caosdb.entity.v1.Version=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Version,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Version.displayName="proto.caosdb.entity.v1.Version"),proto.caosdb.entity.v1.Entity=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.Entity.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.Entity,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Entity.displayName="proto.caosdb.entity.v1.Entity"),proto.caosdb.entity.v1.FileDescriptor=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.FileDescriptor.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.FileDescriptor,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileDescriptor.displayName="proto.caosdb.entity.v1.FileDescriptor"),proto.caosdb.entity.v1.Hash=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Hash,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Hash.displayName="proto.caosdb.entity.v1.Hash"),proto.caosdb.entity.v1.Property=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.Property.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.Property,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Property.displayName="proto.caosdb.entity.v1.Property"),proto.caosdb.entity.v1.Parent=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.Parent.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.Parent,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Parent.displayName="proto.caosdb.entity.v1.Parent"),proto.caosdb.entity.v1.EntityRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.EntityRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityRequest.displayName="proto.caosdb.entity.v1.EntityRequest"),proto.caosdb.entity.v1.EntityResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.EntityResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.EntityResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityResponse.displayName="proto.caosdb.entity.v1.EntityResponse"),proto.caosdb.entity.v1.IdResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.IdResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.IdResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.IdResponse.displayName="proto.caosdb.entity.v1.IdResponse"),proto.caosdb.entity.v1.Query=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.Query,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.Query.displayName="proto.caosdb.entity.v1.Query"),proto.caosdb.entity.v1.FindQueryResult=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.FindQueryResult.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.FindQueryResult,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FindQueryResult.displayName="proto.caosdb.entity.v1.FindQueryResult"),proto.caosdb.entity.v1.SelectQueryRow=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.SelectQueryRow.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryRow,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryRow.displayName="proto.caosdb.entity.v1.SelectQueryRow"),proto.caosdb.entity.v1.SelectQueryColumn=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryColumn,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryColumn.displayName="proto.caosdb.entity.v1.SelectQueryColumn"),proto.caosdb.entity.v1.SelectQueryHeader=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.SelectQueryHeader.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryHeader,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryHeader.displayName="proto.caosdb.entity.v1.SelectQueryHeader"),proto.caosdb.entity.v1.SelectQueryResult=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.SelectQueryResult.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.SelectQueryResult,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.SelectQueryResult.displayName="proto.caosdb.entity.v1.SelectQueryResult"),proto.caosdb.entity.v1.RetrieveRequest=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.RetrieveRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RetrieveRequest.displayName="proto.caosdb.entity.v1.RetrieveRequest"),proto.caosdb.entity.v1.RetrieveResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.RetrieveResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RetrieveResponse.displayName="proto.caosdb.entity.v1.RetrieveResponse"),proto.caosdb.entity.v1.DeleteRequest=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.DeleteRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.DeleteRequest.displayName="proto.caosdb.entity.v1.DeleteRequest"),proto.caosdb.entity.v1.DeleteResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.DeleteResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.DeleteResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.DeleteResponse.displayName="proto.caosdb.entity.v1.DeleteResponse"),proto.caosdb.entity.v1.UpdateRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.UpdateRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.UpdateRequest.displayName="proto.caosdb.entity.v1.UpdateRequest"),proto.caosdb.entity.v1.UpdateResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.UpdateResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.UpdateResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.UpdateResponse.displayName="proto.caosdb.entity.v1.UpdateResponse"),proto.caosdb.entity.v1.InsertRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.InsertRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.InsertRequest.displayName="proto.caosdb.entity.v1.InsertRequest"),proto.caosdb.entity.v1.InsertResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.InsertResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.InsertResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.InsertResponse.displayName="proto.caosdb.entity.v1.InsertResponse"),proto.caosdb.entity.v1.TransactionRequest=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.TransactionRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.TransactionRequest.displayName="proto.caosdb.entity.v1.TransactionRequest"),proto.caosdb.entity.v1.TransactionResponse=function(e){r.Message.initialize(this,e,0,-1,null,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_)},n.inherits(proto.caosdb.entity.v1.TransactionResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.TransactionResponse.displayName="proto.caosdb.entity.v1.TransactionResponse"),proto.caosdb.entity.v1.MultiTransactionRequest=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiTransactionRequest.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiTransactionRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiTransactionRequest.displayName="proto.caosdb.entity.v1.MultiTransactionRequest"),proto.caosdb.entity.v1.MultiTransactionResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiTransactionResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiTransactionResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiTransactionResponse.displayName="proto.caosdb.entity.v1.MultiTransactionResponse"),proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.displayName="proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest"),proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.displayName="proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse"),proto.caosdb.entity.v1.MultiUpdateEntityACLRequest=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.MultiUpdateEntityACLRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.displayName="proto.caosdb.entity.v1.MultiUpdateEntityACLRequest"),proto.caosdb.entity.v1.MultiUpdateEntityACLResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.MultiUpdateEntityACLResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.displayName="proto.caosdb.entity.v1.MultiUpdateEntityACLResponse"),proto.caosdb.entity.v1.EntityACL=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.EntityACL.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.EntityACL,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityACL.displayName="proto.caosdb.entity.v1.EntityACL"),proto.caosdb.entity.v1.EntityPermissionRule=function(e){r.Message.initialize(this,e,0,-1,proto.caosdb.entity.v1.EntityPermissionRule.repeatedFields_,null)},n.inherits(proto.caosdb.entity.v1.EntityPermissionRule,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.EntityPermissionRule.displayName="proto.caosdb.entity.v1.EntityPermissionRule"),proto.caosdb.entity.v1.FileChunk=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileChunk,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileChunk.displayName="proto.caosdb.entity.v1.FileChunk"),proto.caosdb.entity.v1.FileTransmissionId=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileTransmissionId,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileTransmissionId.displayName="proto.caosdb.entity.v1.FileTransmissionId"),proto.caosdb.entity.v1.FileTransmissionSettings=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileTransmissionSettings,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileTransmissionSettings.displayName="proto.caosdb.entity.v1.FileTransmissionSettings"),proto.caosdb.entity.v1.RegisterFileUploadRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.RegisterFileUploadRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RegisterFileUploadRequest.displayName="proto.caosdb.entity.v1.RegisterFileUploadRequest"),proto.caosdb.entity.v1.RegisterFileUploadResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.RegisterFileUploadResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.RegisterFileUploadResponse.displayName="proto.caosdb.entity.v1.RegisterFileUploadResponse"),proto.caosdb.entity.v1.FileUploadRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileUploadRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileUploadRequest.displayName="proto.caosdb.entity.v1.FileUploadRequest"),proto.caosdb.entity.v1.FileUploadResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileUploadResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileUploadResponse.displayName="proto.caosdb.entity.v1.FileUploadResponse"),proto.caosdb.entity.v1.FileDownloadRequest=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileDownloadRequest,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileDownloadRequest.displayName="proto.caosdb.entity.v1.FileDownloadRequest"),proto.caosdb.entity.v1.FileDownloadResponse=function(e){r.Message.initialize(this,e,0,-1,null,null)},n.inherits(proto.caosdb.entity.v1.FileDownloadResponse,r.Message),n.DEBUG&&!COMPILED&&(proto.caosdb.entity.v1.FileDownloadResponse.displayName="proto.caosdb.entity.v1.FileDownloadResponse"),r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.ReferenceDataType.prototype.toObject=function(e){return proto.caosdb.entity.v1.ReferenceDataType.toObject(e,this)},proto.caosdb.entity.v1.ReferenceDataType.toObject=function(e,t){var o={name:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.ReferenceDataType.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.ReferenceDataType;return proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setName(o)}else t.skipField();return e},proto.caosdb.entity.v1.ReferenceDataType.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter=function(e,t){var o;(o=e.getName()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.ReferenceDataType.prototype.getName=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.ReferenceDataType.prototype.setName=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.ListDataType.oneofGroups_=[[1,2]],proto.caosdb.entity.v1.ListDataType.ListDataTypeCase={LIST_DATA_TYPE_NOT_SET:0,ATOMIC_DATA_TYPE:1,REFERENCE_DATA_TYPE:2},proto.caosdb.entity.v1.ListDataType.prototype.getListDataTypeCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.ListDataType.prototype.toObject=function(e){return proto.caosdb.entity.v1.ListDataType.toObject(e,this)},proto.caosdb.entity.v1.ListDataType.toObject=function(e,t){var o,n={atomicDataType:r.Message.getFieldWithDefault(t,1,0),referenceDataType:(o=t.getReferenceDataType())&&proto.caosdb.entity.v1.ReferenceDataType.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.ListDataType.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.ListDataType;return proto.caosdb.entity.v1.ListDataType.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.ListDataType.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setAtomicDataType(o);break;case 2:o=new proto.caosdb.entity.v1.ReferenceDataType,t.readMessage(o,proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader),e.setReferenceDataType(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.ListDataType.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.ListDataType.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.ListDataType.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeEnum(1,o),null!=(o=e.getReferenceDataType())&&t.writeMessage(2,o,proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter)},proto.caosdb.entity.v1.ListDataType.prototype.getAtomicDataType=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.ListDataType.prototype.setAtomicDataType=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.ListDataType.prototype.clearAtomicDataType=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ListDataType.prototype.hasAtomicDataType=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.ListDataType.prototype.getReferenceDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ReferenceDataType,2)},proto.caosdb.entity.v1.ListDataType.prototype.setReferenceDataType=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.ListDataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.ListDataType.prototype.clearReferenceDataType=function(){return this.setReferenceDataType(void 0)},proto.caosdb.entity.v1.ListDataType.prototype.hasReferenceDataType=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.DataType.oneofGroups_=[[1,2,3]],proto.caosdb.entity.v1.DataType.DataTypeCase={DATA_TYPE_NOT_SET:0,ATOMIC_DATA_TYPE:1,LIST_DATA_TYPE:2,REFERENCE_DATA_TYPE:3},proto.caosdb.entity.v1.DataType.prototype.getDataTypeCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.DataType.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.DataType.prototype.toObject=function(e){return proto.caosdb.entity.v1.DataType.toObject(e,this)},proto.caosdb.entity.v1.DataType.toObject=function(e,t){var o,n={atomicDataType:r.Message.getFieldWithDefault(t,1,0),listDataType:(o=t.getListDataType())&&proto.caosdb.entity.v1.ListDataType.toObject(e,o),referenceDataType:(o=t.getReferenceDataType())&&proto.caosdb.entity.v1.ReferenceDataType.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.DataType.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.DataType;return proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setAtomicDataType(o);break;case 2:o=new proto.caosdb.entity.v1.ListDataType,t.readMessage(o,proto.caosdb.entity.v1.ListDataType.deserializeBinaryFromReader),e.setListDataType(o);break;case 3:o=new proto.caosdb.entity.v1.ReferenceDataType,t.readMessage(o,proto.caosdb.entity.v1.ReferenceDataType.deserializeBinaryFromReader),e.setReferenceDataType(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.DataType.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.DataType.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.DataType.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeEnum(1,o),null!=(o=e.getListDataType())&&t.writeMessage(2,o,proto.caosdb.entity.v1.ListDataType.serializeBinaryToWriter),null!=(o=e.getReferenceDataType())&&t.writeMessage(3,o,proto.caosdb.entity.v1.ReferenceDataType.serializeBinaryToWriter)},proto.caosdb.entity.v1.DataType.prototype.getAtomicDataType=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.DataType.prototype.setAtomicDataType=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.DataType.prototype.clearAtomicDataType=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DataType.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.DataType.prototype.hasAtomicDataType=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.DataType.prototype.getListDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ListDataType,2)},proto.caosdb.entity.v1.DataType.prototype.setListDataType=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.DataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.DataType.prototype.clearListDataType=function(){return this.setListDataType(void 0)},proto.caosdb.entity.v1.DataType.prototype.hasListDataType=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.DataType.prototype.getReferenceDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ReferenceDataType,3)},proto.caosdb.entity.v1.DataType.prototype.setReferenceDataType=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.DataType.oneofGroups_[0],e)},proto.caosdb.entity.v1.DataType.prototype.clearReferenceDataType=function(){return this.setReferenceDataType(void 0)},proto.caosdb.entity.v1.DataType.prototype.hasReferenceDataType=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.CollectionValues.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.CollectionValues.prototype.toObject=function(e){return proto.caosdb.entity.v1.CollectionValues.toObject(e,this)},proto.caosdb.entity.v1.CollectionValues.toObject=function(e,t){var o={valuesList:r.Message.toObjectList(t.getValuesList(),proto.caosdb.entity.v1.ScalarValue.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.CollectionValues.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.CollectionValues;return proto.caosdb.entity.v1.CollectionValues.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.CollectionValues.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.ScalarValue;t.readMessage(o,proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader),e.addValues(o)}else t.skipField();return e},proto.caosdb.entity.v1.CollectionValues.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.CollectionValues.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.CollectionValues.serializeBinaryToWriter=function(e,t){var o;(o=e.getValuesList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter)},proto.caosdb.entity.v1.CollectionValues.prototype.getValuesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.ScalarValue,1)},proto.caosdb.entity.v1.CollectionValues.prototype.setValuesList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.CollectionValues.prototype.addValues=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.ScalarValue,t)},proto.caosdb.entity.v1.CollectionValues.prototype.clearValuesList=function(){return this.setValuesList([])},proto.caosdb.entity.v1.ScalarValue.oneofGroups_=[[1,2,3,4,5]],proto.caosdb.entity.v1.ScalarValue.ScalarValueCase={SCALAR_VALUE_NOT_SET:0,INTEGER_VALUE:1,DOUBLE_VALUE:2,BOOLEAN_VALUE:3,STRING_VALUE:4,SPECIAL_VALUE:5},proto.caosdb.entity.v1.ScalarValue.prototype.getScalarValueCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.ScalarValue.prototype.toObject=function(e){return proto.caosdb.entity.v1.ScalarValue.toObject(e,this)},proto.caosdb.entity.v1.ScalarValue.toObject=function(e,t){var o={integerValue:r.Message.getFieldWithDefault(t,1,0),doubleValue:r.Message.getFloatingPointFieldWithDefault(t,2,0),booleanValue:r.Message.getBooleanFieldWithDefault(t,3,!1),stringValue:r.Message.getFieldWithDefault(t,4,""),specialValue:r.Message.getFieldWithDefault(t,5,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.ScalarValue.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.ScalarValue;return proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readInt64();e.setIntegerValue(o);break;case 2:o=t.readDouble(),e.setDoubleValue(o);break;case 3:o=t.readBool(),e.setBooleanValue(o);break;case 4:o=t.readString(),e.setStringValue(o);break;case 5:o=t.readEnum(),e.setSpecialValue(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.ScalarValue.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeInt64(1,o),null!=(o=r.Message.getField(e,2))&&t.writeDouble(2,o),null!=(o=r.Message.getField(e,3))&&t.writeBool(3,o),null!=(o=r.Message.getField(e,4))&&t.writeString(4,o),null!=(o=r.Message.getField(e,5))&&t.writeEnum(5,o)},proto.caosdb.entity.v1.ScalarValue.prototype.getIntegerValue=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.ScalarValue.prototype.setIntegerValue=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearIntegerValue=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasIntegerValue=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.ScalarValue.prototype.getDoubleValue=function(){return r.Message.getFloatingPointFieldWithDefault(this,2,0)},proto.caosdb.entity.v1.ScalarValue.prototype.setDoubleValue=function(e){return r.Message.setOneofField(this,2,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearDoubleValue=function(){return r.Message.setOneofField(this,2,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasDoubleValue=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.ScalarValue.prototype.getBooleanValue=function(){return r.Message.getBooleanFieldWithDefault(this,3,!1)},proto.caosdb.entity.v1.ScalarValue.prototype.setBooleanValue=function(e){return r.Message.setOneofField(this,3,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearBooleanValue=function(){return r.Message.setOneofField(this,3,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasBooleanValue=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.ScalarValue.prototype.getStringValue=function(){return r.Message.getFieldWithDefault(this,4,"")},proto.caosdb.entity.v1.ScalarValue.prototype.setStringValue=function(e){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearStringValue=function(){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasStringValue=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.ScalarValue.prototype.getSpecialValue=function(){return r.Message.getFieldWithDefault(this,5,0)},proto.caosdb.entity.v1.ScalarValue.prototype.setSpecialValue=function(e){return r.Message.setOneofField(this,5,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],e)},proto.caosdb.entity.v1.ScalarValue.prototype.clearSpecialValue=function(){return r.Message.setOneofField(this,5,proto.caosdb.entity.v1.ScalarValue.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.ScalarValue.prototype.hasSpecialValue=function(){return null!=r.Message.getField(this,5)},proto.caosdb.entity.v1.Value.oneofGroups_=[[1,2]],proto.caosdb.entity.v1.Value.ValueCase={VALUE_NOT_SET:0,SCALAR_VALUE:1,LIST_VALUES:2},proto.caosdb.entity.v1.Value.prototype.getValueCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.Value.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Value.prototype.toObject=function(e){return proto.caosdb.entity.v1.Value.toObject(e,this)},proto.caosdb.entity.v1.Value.toObject=function(e,t){var o,r={scalarValue:(o=t.getScalarValue())&&proto.caosdb.entity.v1.ScalarValue.toObject(e,o),listValues:(o=t.getListValues())&&proto.caosdb.entity.v1.CollectionValues.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.Value.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Value;return proto.caosdb.entity.v1.Value.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Value.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.ScalarValue;t.readMessage(o,proto.caosdb.entity.v1.ScalarValue.deserializeBinaryFromReader),e.setScalarValue(o);break;case 2:o=new proto.caosdb.entity.v1.CollectionValues,t.readMessage(o,proto.caosdb.entity.v1.CollectionValues.deserializeBinaryFromReader),e.setListValues(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Value.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Value.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Value.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getScalarValue())&&t.writeMessage(1,o,proto.caosdb.entity.v1.ScalarValue.serializeBinaryToWriter),null!=(o=e.getListValues())&&t.writeMessage(2,o,proto.caosdb.entity.v1.CollectionValues.serializeBinaryToWriter)},proto.caosdb.entity.v1.Value.prototype.getScalarValue=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.ScalarValue,1)},proto.caosdb.entity.v1.Value.prototype.setScalarValue=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.Value.oneofGroups_[0],e)},proto.caosdb.entity.v1.Value.prototype.clearScalarValue=function(){return this.setScalarValue(void 0)},proto.caosdb.entity.v1.Value.prototype.hasScalarValue=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.Value.prototype.getListValues=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.CollectionValues,2)},proto.caosdb.entity.v1.Value.prototype.setListValues=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.Value.oneofGroups_[0],e)},proto.caosdb.entity.v1.Value.prototype.clearListValues=function(){return this.setListValues(void 0)},proto.caosdb.entity.v1.Value.prototype.hasListValues=function(){return null!=r.Message.getField(this,2)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Message.prototype.toObject=function(e){return proto.caosdb.entity.v1.Message.toObject(e,this)},proto.caosdb.entity.v1.Message.toObject=function(e,t){var o={code:r.Message.getFieldWithDefault(t,1,0),description:r.Message.getFieldWithDefault(t,2,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Message.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Message;return proto.caosdb.entity.v1.Message.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Message.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readInt32();e.setCode(o);break;case 2:o=t.readString(),e.setDescription(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Message.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Message.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Message.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getCode())&&t.writeInt32(1,o),(o=e.getDescription()).length>0&&t.writeString(2,o)},proto.caosdb.entity.v1.Message.prototype.getCode=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.Message.prototype.setCode=function(e){return r.Message.setProto3IntField(this,1,e)},proto.caosdb.entity.v1.Message.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Message.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Version.prototype.toObject=function(e){return proto.caosdb.entity.v1.Version.toObject(e,this)},proto.caosdb.entity.v1.Version.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Version.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Version;return proto.caosdb.entity.v1.Version.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Version.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setId(o)}else t.skipField();return e},proto.caosdb.entity.v1.Version.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Version.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Version.serializeBinaryToWriter=function(e,t){var o;(o=e.getId()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.Version.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Version.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Entity.repeatedFields_=[9,10],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Entity.prototype.toObject=function(e){return proto.caosdb.entity.v1.Entity.toObject(e,this)},proto.caosdb.entity.v1.Entity.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),name:r.Message.getFieldWithDefault(t,2,""),description:r.Message.getFieldWithDefault(t,3,""),version:(o=t.getVersion())&&proto.caosdb.entity.v1.Version.toObject(e,o),role:r.Message.getFieldWithDefault(t,5,0),unit:r.Message.getFieldWithDefault(t,6,""),dataType:(o=t.getDataType())&&proto.caosdb.entity.v1.DataType.toObject(e,o),value:(o=t.getValue())&&proto.caosdb.entity.v1.Value.toObject(e,o),propertiesList:r.Message.toObjectList(t.getPropertiesList(),proto.caosdb.entity.v1.Property.toObject,e),parentsList:r.Message.toObjectList(t.getParentsList(),proto.caosdb.entity.v1.Parent.toObject,e),fileDescriptor:(o=t.getFileDescriptor())&&proto.caosdb.entity.v1.FileDescriptor.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.Entity.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Entity;return proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=t.readString(),e.setName(o);break;case 3:o=t.readString(),e.setDescription(o);break;case 4:o=new proto.caosdb.entity.v1.Version,t.readMessage(o,proto.caosdb.entity.v1.Version.deserializeBinaryFromReader),e.setVersion(o);break;case 5:o=t.readEnum(),e.setRole(o);break;case 6:o=t.readString(),e.setUnit(o);break;case 7:o=new proto.caosdb.entity.v1.DataType,t.readMessage(o,proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader),e.setDataType(o);break;case 8:o=new proto.caosdb.entity.v1.Value,t.readMessage(o,proto.caosdb.entity.v1.Value.deserializeBinaryFromReader),e.setValue(o);break;case 9:o=new proto.caosdb.entity.v1.Property,t.readMessage(o,proto.caosdb.entity.v1.Property.deserializeBinaryFromReader),e.addProperties(o);break;case 10:o=new proto.caosdb.entity.v1.Parent,t.readMessage(o,proto.caosdb.entity.v1.Parent.deserializeBinaryFromReader),e.addParents(o);break;case 14:o=new proto.caosdb.entity.v1.FileDescriptor,t.readMessage(o,proto.caosdb.entity.v1.FileDescriptor.deserializeBinaryFromReader),e.setFileDescriptor(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Entity.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Entity.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Entity.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getName()).length>0&&t.writeString(2,o),(o=e.getDescription()).length>0&&t.writeString(3,o),null!=(o=e.getVersion())&&t.writeMessage(4,o,proto.caosdb.entity.v1.Version.serializeBinaryToWriter),0!==(o=e.getRole())&&t.writeEnum(5,o),(o=e.getUnit()).length>0&&t.writeString(6,o),null!=(o=e.getDataType())&&t.writeMessage(7,o,proto.caosdb.entity.v1.DataType.serializeBinaryToWriter),null!=(o=e.getValue())&&t.writeMessage(8,o,proto.caosdb.entity.v1.Value.serializeBinaryToWriter),(o=e.getPropertiesList()).length>0&&t.writeRepeatedMessage(9,o,proto.caosdb.entity.v1.Property.serializeBinaryToWriter),(o=e.getParentsList()).length>0&&t.writeRepeatedMessage(10,o,proto.caosdb.entity.v1.Parent.serializeBinaryToWriter),null!=(o=e.getFileDescriptor())&&t.writeMessage(14,o,proto.caosdb.entity.v1.FileDescriptor.serializeBinaryToWriter)},proto.caosdb.entity.v1.Entity.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Entity.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Entity.prototype.getName=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Entity.prototype.setName=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Entity.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,3,"")},proto.caosdb.entity.v1.Entity.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,3,e)},proto.caosdb.entity.v1.Entity.prototype.getVersion=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Version,4)},proto.caosdb.entity.v1.Entity.prototype.setVersion=function(e){return r.Message.setWrapperField(this,4,e)},proto.caosdb.entity.v1.Entity.prototype.clearVersion=function(){return this.setVersion(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasVersion=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.Entity.prototype.getRole=function(){return r.Message.getFieldWithDefault(this,5,0)},proto.caosdb.entity.v1.Entity.prototype.setRole=function(e){return r.Message.setProto3EnumField(this,5,e)},proto.caosdb.entity.v1.Entity.prototype.getUnit=function(){return r.Message.getFieldWithDefault(this,6,"")},proto.caosdb.entity.v1.Entity.prototype.setUnit=function(e){return r.Message.setProto3StringField(this,6,e)},proto.caosdb.entity.v1.Entity.prototype.getDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DataType,7)},proto.caosdb.entity.v1.Entity.prototype.setDataType=function(e){return r.Message.setWrapperField(this,7,e)},proto.caosdb.entity.v1.Entity.prototype.clearDataType=function(){return this.setDataType(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasDataType=function(){return null!=r.Message.getField(this,7)},proto.caosdb.entity.v1.Entity.prototype.getValue=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Value,8)},proto.caosdb.entity.v1.Entity.prototype.setValue=function(e){return r.Message.setWrapperField(this,8,e)},proto.caosdb.entity.v1.Entity.prototype.clearValue=function(){return this.setValue(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasValue=function(){return null!=r.Message.getField(this,8)},proto.caosdb.entity.v1.Entity.prototype.getPropertiesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Property,9)},proto.caosdb.entity.v1.Entity.prototype.setPropertiesList=function(e){return r.Message.setRepeatedWrapperField(this,9,e)},proto.caosdb.entity.v1.Entity.prototype.addProperties=function(e,t){return r.Message.addToRepeatedWrapperField(this,9,e,proto.caosdb.entity.v1.Property,t)},proto.caosdb.entity.v1.Entity.prototype.clearPropertiesList=function(){return this.setPropertiesList([])},proto.caosdb.entity.v1.Entity.prototype.getParentsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Parent,10)},proto.caosdb.entity.v1.Entity.prototype.setParentsList=function(e){return r.Message.setRepeatedWrapperField(this,10,e)},proto.caosdb.entity.v1.Entity.prototype.addParents=function(e,t){return r.Message.addToRepeatedWrapperField(this,10,e,proto.caosdb.entity.v1.Parent,t)},proto.caosdb.entity.v1.Entity.prototype.clearParentsList=function(){return this.setParentsList([])},proto.caosdb.entity.v1.Entity.prototype.getFileDescriptor=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileDescriptor,14)},proto.caosdb.entity.v1.Entity.prototype.setFileDescriptor=function(e){return r.Message.setWrapperField(this,14,e)},proto.caosdb.entity.v1.Entity.prototype.clearFileDescriptor=function(){return this.setFileDescriptor(void 0)},proto.caosdb.entity.v1.Entity.prototype.hasFileDescriptor=function(){return null!=r.Message.getField(this,14)},proto.caosdb.entity.v1.FileDescriptor.repeatedFields_=[4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileDescriptor.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileDescriptor.toObject(e,this)},proto.caosdb.entity.v1.FileDescriptor.toObject=function(e,t){var o={entityId:r.Message.getFieldWithDefault(t,1,""),path:r.Message.getFieldWithDefault(t,2,""),size:r.Message.getFieldWithDefault(t,3,0),hashesList:r.Message.toObjectList(t.getHashesList(),proto.caosdb.entity.v1.Hash.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileDescriptor.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileDescriptor;return proto.caosdb.entity.v1.FileDescriptor.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileDescriptor.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setEntityId(o);break;case 2:o=t.readString(),e.setPath(o);break;case 3:o=t.readInt64(),e.setSize(o);break;case 4:o=new proto.caosdb.entity.v1.Hash,t.readMessage(o,proto.caosdb.entity.v1.Hash.deserializeBinaryFromReader),e.addHashes(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileDescriptor.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileDescriptor.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileDescriptor.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getEntityId()).length>0&&t.writeString(1,o),(o=e.getPath()).length>0&&t.writeString(2,o),0!==(o=e.getSize())&&t.writeInt64(3,o),(o=e.getHashesList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Hash.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileDescriptor.prototype.getEntityId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.FileDescriptor.prototype.setEntityId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.getPath=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.FileDescriptor.prototype.setPath=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.getSize=function(){return r.Message.getFieldWithDefault(this,3,0)},proto.caosdb.entity.v1.FileDescriptor.prototype.setSize=function(e){return r.Message.setProto3IntField(this,3,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.getHashesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Hash,4)},proto.caosdb.entity.v1.FileDescriptor.prototype.setHashesList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.FileDescriptor.prototype.addHashes=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Hash,t)},proto.caosdb.entity.v1.FileDescriptor.prototype.clearHashesList=function(){return this.setHashesList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Hash.prototype.toObject=function(e){return proto.caosdb.entity.v1.Hash.toObject(e,this)},proto.caosdb.entity.v1.Hash.toObject=function(e,t){var o={algorithm:r.Message.getFieldWithDefault(t,1,""),value:r.Message.getFieldWithDefault(t,2,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Hash.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Hash;return proto.caosdb.entity.v1.Hash.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Hash.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setAlgorithm(o);break;case 2:o=t.readString(),e.setValue(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Hash.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Hash.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Hash.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getAlgorithm()).length>0&&t.writeString(1,o),(o=e.getValue()).length>0&&t.writeString(2,o)},proto.caosdb.entity.v1.Hash.prototype.getAlgorithm=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Hash.prototype.setAlgorithm=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Hash.prototype.getValue=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Hash.prototype.setValue=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Property.repeatedFields_=[8,9,10],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Property.prototype.toObject=function(e){return proto.caosdb.entity.v1.Property.toObject(e,this)},proto.caosdb.entity.v1.Property.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),name:r.Message.getFieldWithDefault(t,2,""),description:r.Message.getFieldWithDefault(t,3,""),value:(o=t.getValue())&&proto.caosdb.entity.v1.Value.toObject(e,o),importance:r.Message.getFieldWithDefault(t,5,0),unit:r.Message.getFieldWithDefault(t,6,""),dataType:(o=t.getDataType())&&proto.caosdb.entity.v1.DataType.toObject(e,o),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.Property.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Property;return proto.caosdb.entity.v1.Property.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Property.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=t.readString(),e.setName(o);break;case 3:o=t.readString(),e.setDescription(o);break;case 4:o=new proto.caosdb.entity.v1.Value,t.readMessage(o,proto.caosdb.entity.v1.Value.deserializeBinaryFromReader),e.setValue(o);break;case 5:o=t.readEnum(),e.setImportance(o);break;case 6:o=t.readString(),e.setUnit(o);break;case 7:o=new proto.caosdb.entity.v1.DataType,t.readMessage(o,proto.caosdb.entity.v1.DataType.deserializeBinaryFromReader),e.setDataType(o);break;case 8:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 9:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 10:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Property.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Property.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Property.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getName()).length>0&&t.writeString(2,o),(o=e.getDescription()).length>0&&t.writeString(3,o),null!=(o=e.getValue())&&t.writeMessage(4,o,proto.caosdb.entity.v1.Value.serializeBinaryToWriter),0!==(o=e.getImportance())&&t.writeEnum(5,o),(o=e.getUnit()).length>0&&t.writeString(6,o),null!=(o=e.getDataType())&&t.writeMessage(7,o,proto.caosdb.entity.v1.DataType.serializeBinaryToWriter),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(8,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(9,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(10,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.Property.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Property.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Property.prototype.getName=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Property.prototype.setName=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Property.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,3,"")},proto.caosdb.entity.v1.Property.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,3,e)},proto.caosdb.entity.v1.Property.prototype.getValue=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Value,4)},proto.caosdb.entity.v1.Property.prototype.setValue=function(e){return r.Message.setWrapperField(this,4,e)},proto.caosdb.entity.v1.Property.prototype.clearValue=function(){return this.setValue(void 0)},proto.caosdb.entity.v1.Property.prototype.hasValue=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.Property.prototype.getImportance=function(){return r.Message.getFieldWithDefault(this,5,0)},proto.caosdb.entity.v1.Property.prototype.setImportance=function(e){return r.Message.setProto3EnumField(this,5,e)},proto.caosdb.entity.v1.Property.prototype.getUnit=function(){return r.Message.getFieldWithDefault(this,6,"")},proto.caosdb.entity.v1.Property.prototype.setUnit=function(e){return r.Message.setProto3StringField(this,6,e)},proto.caosdb.entity.v1.Property.prototype.getDataType=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DataType,7)},proto.caosdb.entity.v1.Property.prototype.setDataType=function(e){return r.Message.setWrapperField(this,7,e)},proto.caosdb.entity.v1.Property.prototype.clearDataType=function(){return this.setDataType(void 0)},proto.caosdb.entity.v1.Property.prototype.hasDataType=function(){return null!=r.Message.getField(this,7)},proto.caosdb.entity.v1.Property.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,8)},proto.caosdb.entity.v1.Property.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,8,e)},proto.caosdb.entity.v1.Property.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,8,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Property.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.Property.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,9)},proto.caosdb.entity.v1.Property.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,9,e)},proto.caosdb.entity.v1.Property.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,9,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Property.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.Property.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,10)},proto.caosdb.entity.v1.Property.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,10,e)},proto.caosdb.entity.v1.Property.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,10,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Property.prototype.clearInfosList=function(){return this.setInfosList([])},proto.caosdb.entity.v1.Parent.repeatedFields_=[4,5,6],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Parent.prototype.toObject=function(e){return proto.caosdb.entity.v1.Parent.toObject(e,this)},proto.caosdb.entity.v1.Parent.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,""),name:r.Message.getFieldWithDefault(t,2,""),description:r.Message.getFieldWithDefault(t,3,""),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Parent.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Parent;return proto.caosdb.entity.v1.Parent.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Parent.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=t.readString(),e.setName(o);break;case 3:o=t.readString(),e.setDescription(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 5:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 6:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.Parent.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Parent.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Parent.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getName()).length>0&&t.writeString(2,o),(o=e.getDescription()).length>0&&t.writeString(3,o),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(5,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(6,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.Parent.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Parent.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.Parent.prototype.getName=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.Parent.prototype.setName=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.Parent.prototype.getDescription=function(){return r.Message.getFieldWithDefault(this,3,"")},proto.caosdb.entity.v1.Parent.prototype.setDescription=function(e){return r.Message.setProto3StringField(this,3,e)},proto.caosdb.entity.v1.Parent.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.Parent.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.Parent.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Parent.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.Parent.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,5)},proto.caosdb.entity.v1.Parent.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,5,e)},proto.caosdb.entity.v1.Parent.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,5,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Parent.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.Parent.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,6)},proto.caosdb.entity.v1.Parent.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,6,e)},proto.caosdb.entity.v1.Parent.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,6,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.Parent.prototype.clearInfosList=function(){return this.setInfosList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityRequest.toObject(e,this)},proto.caosdb.entity.v1.EntityRequest.toObject=function(e,t){var o,r={entity:(o=t.getEntity())&&proto.caosdb.entity.v1.Entity.toObject(e,o),uploadId:(o=t.getUploadId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.EntityRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityRequest;return proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.Entity;t.readMessage(o,proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader),e.setEntity(o);break;case 2:o=new proto.caosdb.entity.v1.FileTransmissionId,t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setUploadId(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getEntity())&&t.writeMessage(1,o,proto.caosdb.entity.v1.Entity.serializeBinaryToWriter),null!=(o=e.getUploadId())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter)},proto.caosdb.entity.v1.EntityRequest.prototype.getEntity=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Entity,1)},proto.caosdb.entity.v1.EntityRequest.prototype.setEntity=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.EntityRequest.prototype.clearEntity=function(){return this.setEntity(void 0)},proto.caosdb.entity.v1.EntityRequest.prototype.hasEntity=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.EntityRequest.prototype.getUploadId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,2)},proto.caosdb.entity.v1.EntityRequest.prototype.setUploadId=function(e){return r.Message.setWrapperField(this,2,e)},proto.caosdb.entity.v1.EntityRequest.prototype.clearUploadId=function(){return this.setUploadId(void 0)},proto.caosdb.entity.v1.EntityRequest.prototype.hasUploadId=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.EntityResponse.repeatedFields_=[3,4,5],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityResponse.toObject(e,this)},proto.caosdb.entity.v1.EntityResponse.toObject=function(e,t){var o,n={entity:(o=t.getEntity())&&proto.caosdb.entity.v1.Entity.toObject(e,o),downloadId:(o=t.getDownloadId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.EntityResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityResponse;return proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.Entity;t.readMessage(o,proto.caosdb.entity.v1.Entity.deserializeBinaryFromReader),e.setEntity(o);break;case 2:o=new proto.caosdb.entity.v1.FileTransmissionId,t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setDownloadId(o);break;case 3:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 5:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getEntity())&&t.writeMessage(1,o,proto.caosdb.entity.v1.Entity.serializeBinaryToWriter),null!=(o=e.getDownloadId())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(3,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(5,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.EntityResponse.prototype.getEntity=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Entity,1)},proto.caosdb.entity.v1.EntityResponse.prototype.setEntity=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.EntityResponse.prototype.clearEntity=function(){return this.setEntity(void 0)},proto.caosdb.entity.v1.EntityResponse.prototype.hasEntity=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.EntityResponse.prototype.getDownloadId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,2)},proto.caosdb.entity.v1.EntityResponse.prototype.setDownloadId=function(e){return r.Message.setWrapperField(this,2,e)},proto.caosdb.entity.v1.EntityResponse.prototype.clearDownloadId=function(){return this.setDownloadId(void 0)},proto.caosdb.entity.v1.EntityResponse.prototype.hasDownloadId=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.EntityResponse.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,3)},proto.caosdb.entity.v1.EntityResponse.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,3,e)},proto.caosdb.entity.v1.EntityResponse.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,3,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.EntityResponse.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.EntityResponse.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.EntityResponse.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.EntityResponse.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.EntityResponse.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.EntityResponse.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,5)},proto.caosdb.entity.v1.EntityResponse.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,5,e)},proto.caosdb.entity.v1.EntityResponse.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,5,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.EntityResponse.prototype.clearInfosList=function(){return this.setInfosList([])},proto.caosdb.entity.v1.IdResponse.repeatedFields_=[2,3,4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.IdResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.IdResponse.toObject(e,this)},proto.caosdb.entity.v1.IdResponse.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),version:(o=t.getVersion())&&proto.caosdb.entity.v1.Version.toObject(e,o),errorsList:r.Message.toObjectList(t.getErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),warningsList:r.Message.toObjectList(t.getWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),infosList:r.Message.toObjectList(t.getInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.IdResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.IdResponse;return proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 5:o=new proto.caosdb.entity.v1.Version,t.readMessage(o,proto.caosdb.entity.v1.Version.deserializeBinaryFromReader),e.setVersion(o);break;case 2:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addErrors(o);break;case 3:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addWarnings(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.IdResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),null!=(o=e.getVersion())&&t.writeMessage(5,o,proto.caosdb.entity.v1.Version.serializeBinaryToWriter),(o=e.getErrorsList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getWarningsList()).length>0&&t.writeRepeatedMessage(3,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getInfosList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.IdResponse.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.IdResponse.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.IdResponse.prototype.getVersion=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Version,5)},proto.caosdb.entity.v1.IdResponse.prototype.setVersion=function(e){return r.Message.setWrapperField(this,5,e)},proto.caosdb.entity.v1.IdResponse.prototype.clearVersion=function(){return this.setVersion(void 0)},proto.caosdb.entity.v1.IdResponse.prototype.hasVersion=function(){return null!=r.Message.getField(this,5)},proto.caosdb.entity.v1.IdResponse.prototype.getErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,2)},proto.caosdb.entity.v1.IdResponse.prototype.setErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.IdResponse.prototype.addErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.IdResponse.prototype.clearErrorsList=function(){return this.setErrorsList([])},proto.caosdb.entity.v1.IdResponse.prototype.getWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,3)},proto.caosdb.entity.v1.IdResponse.prototype.setWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,3,e)},proto.caosdb.entity.v1.IdResponse.prototype.addWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,3,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.IdResponse.prototype.clearWarningsList=function(){return this.setWarningsList([])},proto.caosdb.entity.v1.IdResponse.prototype.getInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.IdResponse.prototype.setInfosList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.IdResponse.prototype.addInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.IdResponse.prototype.clearInfosList=function(){return this.setInfosList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.Query.prototype.toObject=function(e){return proto.caosdb.entity.v1.Query.toObject(e,this)},proto.caosdb.entity.v1.Query.toObject=function(e,t){var o={query:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.Query.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.Query;return proto.caosdb.entity.v1.Query.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.Query.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setQuery(o)}else t.skipField();return e},proto.caosdb.entity.v1.Query.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.Query.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.Query.serializeBinaryToWriter=function(e,t){var o;(o=e.getQuery()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.Query.prototype.getQuery=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.Query.prototype.setQuery=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.FindQueryResult.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FindQueryResult.prototype.toObject=function(e){return proto.caosdb.entity.v1.FindQueryResult.toObject(e,this)},proto.caosdb.entity.v1.FindQueryResult.toObject=function(e,t){var o={resultSetList:r.Message.toObjectList(t.getResultSetList(),proto.caosdb.entity.v1.EntityResponse.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FindQueryResult.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FindQueryResult;return proto.caosdb.entity.v1.FindQueryResult.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FindQueryResult.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityResponse;t.readMessage(o,proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader),e.addResultSet(o)}else t.skipField();return e},proto.caosdb.entity.v1.FindQueryResult.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FindQueryResult.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FindQueryResult.serializeBinaryToWriter=function(e,t){var o;(o=e.getResultSetList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.FindQueryResult.prototype.getResultSetList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityResponse,1)},proto.caosdb.entity.v1.FindQueryResult.prototype.setResultSetList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.FindQueryResult.prototype.addResultSet=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.EntityResponse,t)},proto.caosdb.entity.v1.FindQueryResult.prototype.clearResultSetList=function(){return this.setResultSetList([])},proto.caosdb.entity.v1.SelectQueryRow.repeatedFields_=[2],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryRow.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryRow.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryRow.toObject=function(e,t){var o={cellsList:r.Message.toObjectList(t.getCellsList(),proto.caosdb.entity.v1.Value.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.SelectQueryRow.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryRow;return proto.caosdb.entity.v1.SelectQueryRow.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryRow.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(2===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.Value;t.readMessage(o,proto.caosdb.entity.v1.Value.deserializeBinaryFromReader),e.addCells(o)}else t.skipField();return e},proto.caosdb.entity.v1.SelectQueryRow.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryRow.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryRow.serializeBinaryToWriter=function(e,t){var o;(o=e.getCellsList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.Value.serializeBinaryToWriter)},proto.caosdb.entity.v1.SelectQueryRow.prototype.getCellsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Value,2)},proto.caosdb.entity.v1.SelectQueryRow.prototype.setCellsList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.SelectQueryRow.prototype.addCells=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.Value,t)},proto.caosdb.entity.v1.SelectQueryRow.prototype.clearCellsList=function(){return this.setCellsList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryColumn.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryColumn.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryColumn.toObject=function(e,t){var o={name:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryColumn;return proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setName(o)}else t.skipField();return e},proto.caosdb.entity.v1.SelectQueryColumn.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryColumn.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryColumn.serializeBinaryToWriter=function(e,t){var o;(o=e.getName()).length>0&&t.writeString(1,o)},proto.caosdb.entity.v1.SelectQueryColumn.prototype.getName=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.SelectQueryColumn.prototype.setName=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.SelectQueryHeader.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryHeader.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryHeader.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryHeader.toObject=function(e,t){var o={columnsList:r.Message.toObjectList(t.getColumnsList(),proto.caosdb.entity.v1.SelectQueryColumn.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryHeader;return proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.SelectQueryColumn;t.readMessage(o,proto.caosdb.entity.v1.SelectQueryColumn.deserializeBinaryFromReader),e.addColumns(o)}else t.skipField();return e},proto.caosdb.entity.v1.SelectQueryHeader.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryHeader.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryHeader.serializeBinaryToWriter=function(e,t){var o;(o=e.getColumnsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.SelectQueryColumn.serializeBinaryToWriter)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.getColumnsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.SelectQueryColumn,1)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.setColumnsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.addColumns=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.SelectQueryColumn,t)},proto.caosdb.entity.v1.SelectQueryHeader.prototype.clearColumnsList=function(){return this.setColumnsList([])},proto.caosdb.entity.v1.SelectQueryResult.repeatedFields_=[4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.SelectQueryResult.prototype.toObject=function(e){return proto.caosdb.entity.v1.SelectQueryResult.toObject(e,this)},proto.caosdb.entity.v1.SelectQueryResult.toObject=function(e,t){var o,n={header:(o=t.getHeader())&&proto.caosdb.entity.v1.SelectQueryHeader.toObject(e,o),dataRowsList:r.Message.toObjectList(t.getDataRowsList(),proto.caosdb.entity.v1.SelectQueryRow.toObject,e)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.SelectQueryResult.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.SelectQueryResult;return proto.caosdb.entity.v1.SelectQueryResult.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.SelectQueryResult.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 3:var o=new proto.caosdb.entity.v1.SelectQueryHeader;t.readMessage(o,proto.caosdb.entity.v1.SelectQueryHeader.deserializeBinaryFromReader),e.setHeader(o);break;case 4:o=new proto.caosdb.entity.v1.SelectQueryRow,t.readMessage(o,proto.caosdb.entity.v1.SelectQueryRow.deserializeBinaryFromReader),e.addDataRows(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.SelectQueryResult.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.SelectQueryResult.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.SelectQueryResult.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getHeader())&&t.writeMessage(3,o,proto.caosdb.entity.v1.SelectQueryHeader.serializeBinaryToWriter),(o=e.getDataRowsList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.SelectQueryRow.serializeBinaryToWriter)},proto.caosdb.entity.v1.SelectQueryResult.prototype.getHeader=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.SelectQueryHeader,3)},proto.caosdb.entity.v1.SelectQueryResult.prototype.setHeader=function(e){return r.Message.setWrapperField(this,3,e)},proto.caosdb.entity.v1.SelectQueryResult.prototype.clearHeader=function(){return this.setHeader(void 0)},proto.caosdb.entity.v1.SelectQueryResult.prototype.hasHeader=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.SelectQueryResult.prototype.getDataRowsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.SelectQueryRow,4)},proto.caosdb.entity.v1.SelectQueryResult.prototype.setDataRowsList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.SelectQueryResult.prototype.addDataRows=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.SelectQueryRow,t)},proto.caosdb.entity.v1.SelectQueryResult.prototype.clearDataRowsList=function(){return this.setDataRowsList([])},proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_=[[1,2]],proto.caosdb.entity.v1.RetrieveRequest.WrappedRequestCase={WRAPPED_REQUEST_NOT_SET:0,ID:1,QUERY:2},proto.caosdb.entity.v1.RetrieveRequest.prototype.getWrappedRequestCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RetrieveRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.RetrieveRequest.toObject(e,this)},proto.caosdb.entity.v1.RetrieveRequest.toObject=function(e,t){var o,n={id:r.Message.getFieldWithDefault(t,1,""),query:(o=t.getQuery())&&proto.caosdb.entity.v1.Query.toObject(e,o),registerFileDownload:r.Message.getBooleanFieldWithDefault(t,3,!1)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.RetrieveRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RetrieveRequest;return proto.caosdb.entity.v1.RetrieveRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RetrieveRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=new proto.caosdb.entity.v1.Query,t.readMessage(o,proto.caosdb.entity.v1.Query.deserializeBinaryFromReader),e.setQuery(o);break;case 3:o=t.readBool(),e.setRegisterFileDownload(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.RetrieveRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RetrieveRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RetrieveRequest.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=r.Message.getField(e,1))&&t.writeString(1,o),null!=(o=e.getQuery())&&t.writeMessage(2,o,proto.caosdb.entity.v1.Query.serializeBinaryToWriter),(o=e.getRegisterFileDownload())&&t.writeBool(3,o)},proto.caosdb.entity.v1.RetrieveRequest.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.RetrieveRequest.prototype.setId=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveRequest.prototype.clearId=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.RetrieveRequest.prototype.hasId=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.RetrieveRequest.prototype.getQuery=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.Query,2)},proto.caosdb.entity.v1.RetrieveRequest.prototype.setQuery=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.RetrieveRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveRequest.prototype.clearQuery=function(){return this.setQuery(void 0)},proto.caosdb.entity.v1.RetrieveRequest.prototype.hasQuery=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.RetrieveRequest.prototype.getRegisterFileDownload=function(){return r.Message.getBooleanFieldWithDefault(this,3,!1)},proto.caosdb.entity.v1.RetrieveRequest.prototype.setRegisterFileDownload=function(e){return r.Message.setProto3BooleanField(this,3,e)},proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_=[[1,2,3,4]],proto.caosdb.entity.v1.RetrieveResponse.RetrieveResponseCase={RETRIEVE_RESPONSE_NOT_SET:0,ENTITY_RESPONSE:1,FIND_RESULT:2,SELECT_RESULT:3,COUNT_RESULT:4},proto.caosdb.entity.v1.RetrieveResponse.prototype.getRetrieveResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RetrieveResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.RetrieveResponse.toObject(e,this)},proto.caosdb.entity.v1.RetrieveResponse.toObject=function(e,t){var o,n={entityResponse:(o=t.getEntityResponse())&&proto.caosdb.entity.v1.EntityResponse.toObject(e,o),findResult:(o=t.getFindResult())&&proto.caosdb.entity.v1.FindQueryResult.toObject(e,o),selectResult:(o=t.getSelectResult())&&proto.caosdb.entity.v1.SelectQueryResult.toObject(e,o),countResult:r.Message.getFieldWithDefault(t,4,0)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.RetrieveResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RetrieveResponse;return proto.caosdb.entity.v1.RetrieveResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RetrieveResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.EntityResponse;t.readMessage(o,proto.caosdb.entity.v1.EntityResponse.deserializeBinaryFromReader),e.setEntityResponse(o);break;case 2:o=new proto.caosdb.entity.v1.FindQueryResult,t.readMessage(o,proto.caosdb.entity.v1.FindQueryResult.deserializeBinaryFromReader),e.setFindResult(o);break;case 3:o=new proto.caosdb.entity.v1.SelectQueryResult,t.readMessage(o,proto.caosdb.entity.v1.SelectQueryResult.deserializeBinaryFromReader),e.setSelectResult(o);break;case 4:o=t.readInt64(),e.setCountResult(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.RetrieveResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RetrieveResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RetrieveResponse.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getEntityResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.EntityResponse.serializeBinaryToWriter),null!=(o=e.getFindResult())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FindQueryResult.serializeBinaryToWriter),null!=(o=e.getSelectResult())&&t.writeMessage(3,o,proto.caosdb.entity.v1.SelectQueryResult.serializeBinaryToWriter),null!=(o=r.Message.getField(e,4))&&t.writeInt64(4,o)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getEntityResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.EntityResponse,1)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setEntityResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearEntityResponse=function(){return this.setEntityResponse(void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasEntityResponse=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getFindResult=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FindQueryResult,2)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setFindResult=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearFindResult=function(){return this.setFindResult(void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasFindResult=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getSelectResult=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.SelectQueryResult,3)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setSelectResult=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearSelectResult=function(){return this.setSelectResult(void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasSelectResult=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.RetrieveResponse.prototype.getCountResult=function(){return r.Message.getFieldWithDefault(this,4,0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.setCountResult=function(e){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.RetrieveResponse.prototype.clearCountResult=function(){return r.Message.setOneofField(this,4,proto.caosdb.entity.v1.RetrieveResponse.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.RetrieveResponse.prototype.hasCountResult=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.DeleteRequest.oneofGroups_=[[1]],proto.caosdb.entity.v1.DeleteRequest.WrappedRequestCase={WRAPPED_REQUEST_NOT_SET:0,ID:1},proto.caosdb.entity.v1.DeleteRequest.prototype.getWrappedRequestCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.DeleteRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.DeleteRequest.toObject(e,this)},proto.caosdb.entity.v1.DeleteRequest.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.DeleteRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.DeleteRequest;return proto.caosdb.entity.v1.DeleteRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.DeleteRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.setId(o)}else t.skipField();return e},proto.caosdb.entity.v1.DeleteRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.DeleteRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.DeleteRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=r.Message.getField(e,1))&&t.writeString(1,o)},proto.caosdb.entity.v1.DeleteRequest.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.DeleteRequest.prototype.setId=function(e){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.DeleteRequest.prototype.clearId=function(){return r.Message.setOneofField(this,1,proto.caosdb.entity.v1.DeleteRequest.oneofGroups_[0],void 0)},proto.caosdb.entity.v1.DeleteRequest.prototype.hasId=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.DeleteResponse.oneofGroups_=[[1]],proto.caosdb.entity.v1.DeleteResponse.WrappedResponseCase={WRAPPED_RESPONSE_NOT_SET:0,ID_RESPONSE:1},proto.caosdb.entity.v1.DeleteResponse.prototype.getWrappedResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.DeleteResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.DeleteResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.DeleteResponse.toObject(e,this)},proto.caosdb.entity.v1.DeleteResponse.toObject=function(e,t){var o,r={idResponse:(o=t.getIdResponse())&&proto.caosdb.entity.v1.IdResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.DeleteResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.DeleteResponse;return proto.caosdb.entity.v1.DeleteResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.DeleteResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.IdResponse;t.readMessage(o,proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader),e.setIdResponse(o)}else t.skipField();return e},proto.caosdb.entity.v1.DeleteResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.DeleteResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.DeleteResponse.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getIdResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.DeleteResponse.prototype.getIdResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.IdResponse,1)},proto.caosdb.entity.v1.DeleteResponse.prototype.setIdResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.DeleteResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.DeleteResponse.prototype.clearIdResponse=function(){return this.setIdResponse(void 0)},proto.caosdb.entity.v1.DeleteResponse.prototype.hasIdResponse=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.UpdateRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.UpdateRequest.toObject(e,this)},proto.caosdb.entity.v1.UpdateRequest.toObject=function(e,t){var o,r={entityRequest:(o=t.getEntityRequest())&&proto.caosdb.entity.v1.EntityRequest.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.UpdateRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.UpdateRequest;return proto.caosdb.entity.v1.UpdateRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.UpdateRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityRequest;t.readMessage(o,proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader),e.setEntityRequest(o)}else t.skipField();return e},proto.caosdb.entity.v1.UpdateRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.UpdateRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.UpdateRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getEntityRequest())&&t.writeMessage(1,o,proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.UpdateRequest.prototype.getEntityRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.EntityRequest,1)},proto.caosdb.entity.v1.UpdateRequest.prototype.setEntityRequest=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.UpdateRequest.prototype.clearEntityRequest=function(){return this.setEntityRequest(void 0)},proto.caosdb.entity.v1.UpdateRequest.prototype.hasEntityRequest=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.UpdateResponse.oneofGroups_=[[1]],proto.caosdb.entity.v1.UpdateResponse.WrappedResponseCase={WRAPPED_RESPONSE_NOT_SET:0,ID_RESPONSE:1},proto.caosdb.entity.v1.UpdateResponse.prototype.getWrappedResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.UpdateResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.UpdateResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.UpdateResponse.toObject(e,this)},proto.caosdb.entity.v1.UpdateResponse.toObject=function(e,t){var o,r={idResponse:(o=t.getIdResponse())&&proto.caosdb.entity.v1.IdResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.UpdateResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.UpdateResponse;return proto.caosdb.entity.v1.UpdateResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.UpdateResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.IdResponse;t.readMessage(o,proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader),e.setIdResponse(o)}else t.skipField();return e},proto.caosdb.entity.v1.UpdateResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.UpdateResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.UpdateResponse.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getIdResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.UpdateResponse.prototype.getIdResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.IdResponse,1)},proto.caosdb.entity.v1.UpdateResponse.prototype.setIdResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.UpdateResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.UpdateResponse.prototype.clearIdResponse=function(){return this.setIdResponse(void 0)},proto.caosdb.entity.v1.UpdateResponse.prototype.hasIdResponse=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.InsertRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.InsertRequest.toObject(e,this)},proto.caosdb.entity.v1.InsertRequest.toObject=function(e,t){var o,r={entityRequest:(o=t.getEntityRequest())&&proto.caosdb.entity.v1.EntityRequest.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.InsertRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.InsertRequest;return proto.caosdb.entity.v1.InsertRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.InsertRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityRequest;t.readMessage(o,proto.caosdb.entity.v1.EntityRequest.deserializeBinaryFromReader),e.setEntityRequest(o)}else t.skipField();return e},proto.caosdb.entity.v1.InsertRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.InsertRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.InsertRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getEntityRequest())&&t.writeMessage(1,o,proto.caosdb.entity.v1.EntityRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.InsertRequest.prototype.getEntityRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.EntityRequest,1)},proto.caosdb.entity.v1.InsertRequest.prototype.setEntityRequest=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.InsertRequest.prototype.clearEntityRequest=function(){return this.setEntityRequest(void 0)},proto.caosdb.entity.v1.InsertRequest.prototype.hasEntityRequest=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.InsertResponse.oneofGroups_=[[1]],proto.caosdb.entity.v1.InsertResponse.WrappedResponseCase={WRAPPED_RESPONSE_NOT_SET:0,ID_RESPONSE:1},proto.caosdb.entity.v1.InsertResponse.prototype.getWrappedResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.InsertResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.InsertResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.InsertResponse.toObject(e,this)},proto.caosdb.entity.v1.InsertResponse.toObject=function(e,t){var o,r={idResponse:(o=t.getIdResponse())&&proto.caosdb.entity.v1.IdResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.InsertResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.InsertResponse;return proto.caosdb.entity.v1.InsertResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.InsertResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.IdResponse;t.readMessage(o,proto.caosdb.entity.v1.IdResponse.deserializeBinaryFromReader),e.setIdResponse(o)}else t.skipField();return e},proto.caosdb.entity.v1.InsertResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.InsertResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.InsertResponse.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getIdResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.IdResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.InsertResponse.prototype.getIdResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.IdResponse,1)},proto.caosdb.entity.v1.InsertResponse.prototype.setIdResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.InsertResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.InsertResponse.prototype.clearIdResponse=function(){return this.setIdResponse(void 0)},proto.caosdb.entity.v1.InsertResponse.prototype.hasIdResponse=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.TransactionRequest.oneofGroups_=[[1,2,3,4]],proto.caosdb.entity.v1.TransactionRequest.WrappedRequestsCase={WRAPPED_REQUESTS_NOT_SET:0,RETRIEVE_REQUEST:1,UPDATE_REQUEST:2,INSERT_REQUEST:3,DELETE_REQUEST:4},proto.caosdb.entity.v1.TransactionRequest.prototype.getWrappedRequestsCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.TransactionRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.TransactionRequest.toObject(e,this)},proto.caosdb.entity.v1.TransactionRequest.toObject=function(e,t){var o,r={retrieveRequest:(o=t.getRetrieveRequest())&&proto.caosdb.entity.v1.RetrieveRequest.toObject(e,o),updateRequest:(o=t.getUpdateRequest())&&proto.caosdb.entity.v1.UpdateRequest.toObject(e,o),insertRequest:(o=t.getInsertRequest())&&proto.caosdb.entity.v1.InsertRequest.toObject(e,o),deleteRequest:(o=t.getDeleteRequest())&&proto.caosdb.entity.v1.DeleteRequest.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.TransactionRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.TransactionRequest;return proto.caosdb.entity.v1.TransactionRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.TransactionRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.RetrieveRequest;t.readMessage(o,proto.caosdb.entity.v1.RetrieveRequest.deserializeBinaryFromReader),e.setRetrieveRequest(o);break;case 2:o=new proto.caosdb.entity.v1.UpdateRequest,t.readMessage(o,proto.caosdb.entity.v1.UpdateRequest.deserializeBinaryFromReader),e.setUpdateRequest(o);break;case 3:o=new proto.caosdb.entity.v1.InsertRequest,t.readMessage(o,proto.caosdb.entity.v1.InsertRequest.deserializeBinaryFromReader),e.setInsertRequest(o);break;case 4:o=new proto.caosdb.entity.v1.DeleteRequest,t.readMessage(o,proto.caosdb.entity.v1.DeleteRequest.deserializeBinaryFromReader),e.setDeleteRequest(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.TransactionRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.TransactionRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.TransactionRequest.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getRetrieveRequest())&&t.writeMessage(1,o,proto.caosdb.entity.v1.RetrieveRequest.serializeBinaryToWriter),null!=(o=e.getUpdateRequest())&&t.writeMessage(2,o,proto.caosdb.entity.v1.UpdateRequest.serializeBinaryToWriter),null!=(o=e.getInsertRequest())&&t.writeMessage(3,o,proto.caosdb.entity.v1.InsertRequest.serializeBinaryToWriter),null!=(o=e.getDeleteRequest())&&t.writeMessage(4,o,proto.caosdb.entity.v1.DeleteRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.TransactionRequest.prototype.getRetrieveRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.RetrieveRequest,1)},proto.caosdb.entity.v1.TransactionRequest.prototype.setRetrieveRequest=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearRetrieveRequest=function(){return this.setRetrieveRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasRetrieveRequest=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.TransactionRequest.prototype.getUpdateRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.UpdateRequest,2)},proto.caosdb.entity.v1.TransactionRequest.prototype.setUpdateRequest=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearUpdateRequest=function(){return this.setUpdateRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasUpdateRequest=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.TransactionRequest.prototype.getInsertRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.InsertRequest,3)},proto.caosdb.entity.v1.TransactionRequest.prototype.setInsertRequest=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearInsertRequest=function(){return this.setInsertRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasInsertRequest=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.TransactionRequest.prototype.getDeleteRequest=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DeleteRequest,4)},proto.caosdb.entity.v1.TransactionRequest.prototype.setDeleteRequest=function(e){return r.Message.setOneofWrapperField(this,4,proto.caosdb.entity.v1.TransactionRequest.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionRequest.prototype.clearDeleteRequest=function(){return this.setDeleteRequest(void 0)},proto.caosdb.entity.v1.TransactionRequest.prototype.hasDeleteRequest=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.TransactionResponse.oneofGroups_=[[1,2,3,4]],proto.caosdb.entity.v1.TransactionResponse.TransactionResponseCase={TRANSACTION_RESPONSE_NOT_SET:0,DELETE_RESPONSE:1,UPDATE_RESPONSE:2,RETRIEVE_RESPONSE:3,INSERT_RESPONSE:4},proto.caosdb.entity.v1.TransactionResponse.prototype.getTransactionResponseCase=function(){return r.Message.computeOneofCase(this,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.TransactionResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.TransactionResponse.toObject(e,this)},proto.caosdb.entity.v1.TransactionResponse.toObject=function(e,t){var o,r={deleteResponse:(o=t.getDeleteResponse())&&proto.caosdb.entity.v1.DeleteResponse.toObject(e,o),updateResponse:(o=t.getUpdateResponse())&&proto.caosdb.entity.v1.UpdateResponse.toObject(e,o),retrieveResponse:(o=t.getRetrieveResponse())&&proto.caosdb.entity.v1.RetrieveResponse.toObject(e,o),insertResponse:(o=t.getInsertResponse())&&proto.caosdb.entity.v1.InsertResponse.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.TransactionResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.TransactionResponse;return proto.caosdb.entity.v1.TransactionResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.TransactionResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.DeleteResponse;t.readMessage(o,proto.caosdb.entity.v1.DeleteResponse.deserializeBinaryFromReader),e.setDeleteResponse(o);break;case 2:o=new proto.caosdb.entity.v1.UpdateResponse,t.readMessage(o,proto.caosdb.entity.v1.UpdateResponse.deserializeBinaryFromReader),e.setUpdateResponse(o);break;case 3:o=new proto.caosdb.entity.v1.RetrieveResponse,t.readMessage(o,proto.caosdb.entity.v1.RetrieveResponse.deserializeBinaryFromReader),e.setRetrieveResponse(o);break;case 4:o=new proto.caosdb.entity.v1.InsertResponse,t.readMessage(o,proto.caosdb.entity.v1.InsertResponse.deserializeBinaryFromReader),e.setInsertResponse(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.TransactionResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.TransactionResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.TransactionResponse.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getDeleteResponse())&&t.writeMessage(1,o,proto.caosdb.entity.v1.DeleteResponse.serializeBinaryToWriter),null!=(o=e.getUpdateResponse())&&t.writeMessage(2,o,proto.caosdb.entity.v1.UpdateResponse.serializeBinaryToWriter),null!=(o=e.getRetrieveResponse())&&t.writeMessage(3,o,proto.caosdb.entity.v1.RetrieveResponse.serializeBinaryToWriter),null!=(o=e.getInsertResponse())&&t.writeMessage(4,o,proto.caosdb.entity.v1.InsertResponse.serializeBinaryToWriter)},proto.caosdb.entity.v1.TransactionResponse.prototype.getDeleteResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.DeleteResponse,1)},proto.caosdb.entity.v1.TransactionResponse.prototype.setDeleteResponse=function(e){return r.Message.setOneofWrapperField(this,1,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearDeleteResponse=function(){return this.setDeleteResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasDeleteResponse=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.TransactionResponse.prototype.getUpdateResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.UpdateResponse,2)},proto.caosdb.entity.v1.TransactionResponse.prototype.setUpdateResponse=function(e){return r.Message.setOneofWrapperField(this,2,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearUpdateResponse=function(){return this.setUpdateResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasUpdateResponse=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.TransactionResponse.prototype.getRetrieveResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.RetrieveResponse,3)},proto.caosdb.entity.v1.TransactionResponse.prototype.setRetrieveResponse=function(e){return r.Message.setOneofWrapperField(this,3,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearRetrieveResponse=function(){return this.setRetrieveResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasRetrieveResponse=function(){return null!=r.Message.getField(this,3)},proto.caosdb.entity.v1.TransactionResponse.prototype.getInsertResponse=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.InsertResponse,4)},proto.caosdb.entity.v1.TransactionResponse.prototype.setInsertResponse=function(e){return r.Message.setOneofWrapperField(this,4,proto.caosdb.entity.v1.TransactionResponse.oneofGroups_[0],e)},proto.caosdb.entity.v1.TransactionResponse.prototype.clearInsertResponse=function(){return this.setInsertResponse(void 0)},proto.caosdb.entity.v1.TransactionResponse.prototype.hasInsertResponse=function(){return null!=r.Message.getField(this,4)},proto.caosdb.entity.v1.MultiTransactionRequest.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiTransactionRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiTransactionRequest.toObject(e,this)},proto.caosdb.entity.v1.MultiTransactionRequest.toObject=function(e,t){var o={requestsList:r.Message.toObjectList(t.getRequestsList(),proto.caosdb.entity.v1.TransactionRequest.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiTransactionRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiTransactionRequest;return proto.caosdb.entity.v1.MultiTransactionRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiTransactionRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.TransactionRequest;t.readMessage(o,proto.caosdb.entity.v1.TransactionRequest.deserializeBinaryFromReader),e.addRequests(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiTransactionRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiTransactionRequest.serializeBinaryToWriter=function(e,t){var o;(o=e.getRequestsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.TransactionRequest.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.getRequestsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.TransactionRequest,1)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.setRequestsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.addRequests=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.TransactionRequest,t)},proto.caosdb.entity.v1.MultiTransactionRequest.prototype.clearRequestsList=function(){return this.setRequestsList([])},proto.caosdb.entity.v1.MultiTransactionResponse.repeatedFields_=[1,2,3,4],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiTransactionResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiTransactionResponse.toObject(e,this)},proto.caosdb.entity.v1.MultiTransactionResponse.toObject=function(e,t){var o={responsesList:r.Message.toObjectList(t.getResponsesList(),proto.caosdb.entity.v1.TransactionResponse.toObject,e),transactionErrorsList:r.Message.toObjectList(t.getTransactionErrorsList(),proto.caosdb.entity.v1.Message.toObject,e),transactionWarningsList:r.Message.toObjectList(t.getTransactionWarningsList(),proto.caosdb.entity.v1.Message.toObject,e),transactionInfosList:r.Message.toObjectList(t.getTransactionInfosList(),proto.caosdb.entity.v1.Message.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiTransactionResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiTransactionResponse;return proto.caosdb.entity.v1.MultiTransactionResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiTransactionResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.TransactionResponse;t.readMessage(o,proto.caosdb.entity.v1.TransactionResponse.deserializeBinaryFromReader),e.addResponses(o);break;case 2:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addTransactionErrors(o);break;case 3:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addTransactionWarnings(o);break;case 4:o=new proto.caosdb.entity.v1.Message,t.readMessage(o,proto.caosdb.entity.v1.Message.deserializeBinaryFromReader),e.addTransactionInfos(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiTransactionResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiTransactionResponse.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getResponsesList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.TransactionResponse.serializeBinaryToWriter),(o=e.getTransactionErrorsList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getTransactionWarningsList()).length>0&&t.writeRepeatedMessage(3,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter),(o=e.getTransactionInfosList()).length>0&&t.writeRepeatedMessage(4,o,proto.caosdb.entity.v1.Message.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getResponsesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.TransactionResponse,1)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setResponsesList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addResponses=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.TransactionResponse,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearResponsesList=function(){return this.setResponsesList([])},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getTransactionErrorsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,2)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setTransactionErrorsList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addTransactionErrors=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearTransactionErrorsList=function(){return this.setTransactionErrorsList([])},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getTransactionWarningsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,3)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setTransactionWarningsList=function(e){return r.Message.setRepeatedWrapperField(this,3,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addTransactionWarnings=function(e,t){return r.Message.addToRepeatedWrapperField(this,3,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearTransactionWarningsList=function(){return this.setTransactionWarningsList([])},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.getTransactionInfosList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.Message,4)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.setTransactionInfosList=function(e){return r.Message.setRepeatedWrapperField(this,4,e)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.addTransactionInfos=function(e,t){return r.Message.addToRepeatedWrapperField(this,4,e,proto.caosdb.entity.v1.Message,t)},proto.caosdb.entity.v1.MultiTransactionResponse.prototype.clearTransactionInfosList=function(){return this.setTransactionInfosList([])},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.toObject(e,this)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.toObject=function(e,t){var o,n={idList:null==(o=r.Message.getRepeatedField(t,1))?void 0:o};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest;return proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readString();e.addId(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.serializeBinaryToWriter=function(e,t){var o;(o=e.getIdList()).length>0&&t.writeRepeatedString(1,o)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.getIdList=function(){return r.Message.getRepeatedField(this,1)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.setIdList=function(e){return r.Message.setField(this,1,e||[])},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.addId=function(e,t){return r.Message.addToRepeatedField(this,1,e,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLRequest.prototype.clearIdList=function(){return this.setIdList([])},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.toObject(e,this)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.toObject=function(e,t){var o={aclsList:r.Message.toObjectList(t.getAclsList(),proto.caosdb.entity.v1.EntityACL.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse;return proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityACL;t.readMessage(o,proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader),e.addAcls(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.serializeBinaryToWriter=function(e,t){var o;(o=e.getAclsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.getAclsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityACL,1)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.setAclsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.addAcls=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.EntityACL,t)},proto.caosdb.entity.v1.MultiRetrieveEntityACLResponse.prototype.clearAclsList=function(){return this.setAclsList([])},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.repeatedFields_=[1],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.toObject(e,this)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.toObject=function(e,t){var o={aclsList:r.Message.toObjectList(t.getAclsList(),proto.caosdb.entity.v1.EntityACL.toObject,e)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiUpdateEntityACLRequest;return proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.EntityACL;t.readMessage(o,proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader),e.addAcls(o)}else t.skipField();return e},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.serializeBinaryToWriter=function(e,t){var o;(o=e.getAclsList()).length>0&&t.writeRepeatedMessage(1,o,proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.getAclsList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityACL,1)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.setAclsList=function(e){return r.Message.setRepeatedWrapperField(this,1,e)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.addAcls=function(e,t){return r.Message.addToRepeatedWrapperField(this,1,e,proto.caosdb.entity.v1.EntityACL,t)},proto.caosdb.entity.v1.MultiUpdateEntityACLRequest.prototype.clearAclsList=function(){return this.setAclsList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.toObject(e,this)},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.toObject=function(e,t){var o={};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.MultiUpdateEntityACLResponse;return proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)t.getFieldNumber(),t.skipField();return e},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.MultiUpdateEntityACLResponse.serializeBinaryToWriter=function(e,t){};proto.caosdb.entity.v1.EntityACL.repeatedFields_=[2],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityACL.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityACL.toObject(e,this)},proto.caosdb.entity.v1.EntityACL.toObject=function(e,t){var o={id:r.Message.getFieldWithDefault(t,1,""),rulesList:r.Message.toObjectList(t.getRulesList(),proto.caosdb.entity.v1.EntityPermissionRule.toObject,e),permission:r.Message.getFieldWithDefault(t,3,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.EntityACL.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityACL;return proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityACL.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setId(o);break;case 2:o=new proto.caosdb.entity.v1.EntityPermissionRule,t.readMessage(o,proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinaryFromReader),e.addRules(o);break;case 3:o=t.readEnum(),e.setPermission(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityACL.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityACL.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getId()).length>0&&t.writeString(1,o),(o=e.getRulesList()).length>0&&t.writeRepeatedMessage(2,o,proto.caosdb.entity.v1.EntityPermissionRule.serializeBinaryToWriter),0!==(o=e.getPermission())&&t.writeEnum(3,o)},proto.caosdb.entity.v1.EntityACL.prototype.getId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.EntityACL.prototype.setId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.EntityACL.prototype.getRulesList=function(){return r.Message.getRepeatedWrapperField(this,proto.caosdb.entity.v1.EntityPermissionRule,2)},proto.caosdb.entity.v1.EntityACL.prototype.setRulesList=function(e){return r.Message.setRepeatedWrapperField(this,2,e)},proto.caosdb.entity.v1.EntityACL.prototype.addRules=function(e,t){return r.Message.addToRepeatedWrapperField(this,2,e,proto.caosdb.entity.v1.EntityPermissionRule,t)},proto.caosdb.entity.v1.EntityACL.prototype.clearRulesList=function(){return this.setRulesList([])},proto.caosdb.entity.v1.EntityACL.prototype.getPermission=function(){return r.Message.getFieldWithDefault(this,3,0)},proto.caosdb.entity.v1.EntityACL.prototype.setPermission=function(e){return r.Message.setProto3EnumField(this,3,e)},proto.caosdb.entity.v1.EntityPermissionRule.repeatedFields_=[4,5],r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.EntityPermissionRule.prototype.toObject=function(e){return proto.caosdb.entity.v1.EntityPermissionRule.toObject(e,this)},proto.caosdb.entity.v1.EntityPermissionRule.toObject=function(e,t){var o,n={role:r.Message.getFieldWithDefault(t,1,""),priority:r.Message.getBooleanFieldWithDefault(t,2,!1),grant:r.Message.getBooleanFieldWithDefault(t,3,!1),permissionsList:null==(o=r.Message.getRepeatedField(t,4))?void 0:o,capabilitiesList:null==(o=r.Message.getRepeatedField(t,5))?void 0:o};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.EntityPermissionRule;return proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.EntityPermissionRule.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setRole(o);break;case 2:o=t.readBool(),e.setPriority(o);break;case 3:o=t.readBool(),e.setGrant(o);break;case 4:for(var r=t.isDelimited()?t.readPackedEnum():[t.readEnum()],n=0;n<r.length;n++)e.addPermissions(r[n]);break;case 5:for(r=t.isDelimited()?t.readPackedEnum():[t.readEnum()],n=0;n<r.length;n++)e.addCapabilities(r[n]);break;default:t.skipField()}return e},proto.caosdb.entity.v1.EntityPermissionRule.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.EntityPermissionRule.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.EntityPermissionRule.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getRole()).length>0&&t.writeString(1,o),(o=e.getPriority())&&t.writeBool(2,o),(o=e.getGrant())&&t.writeBool(3,o),(o=e.getPermissionsList()).length>0&&t.writePackedEnum(4,o),(o=e.getCapabilitiesList()).length>0&&t.writePackedEnum(5,o)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getRole=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setRole=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getPriority=function(){return r.Message.getBooleanFieldWithDefault(this,2,!1)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setPriority=function(e){return r.Message.setProto3BooleanField(this,2,e)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getGrant=function(){return r.Message.getBooleanFieldWithDefault(this,3,!1)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setGrant=function(e){return r.Message.setProto3BooleanField(this,3,e)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getPermissionsList=function(){return r.Message.getRepeatedField(this,4)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setPermissionsList=function(e){return r.Message.setField(this,4,e||[])},proto.caosdb.entity.v1.EntityPermissionRule.prototype.addPermissions=function(e,t){return r.Message.addToRepeatedField(this,4,e,t)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.clearPermissionsList=function(){return this.setPermissionsList([])},proto.caosdb.entity.v1.EntityPermissionRule.prototype.getCapabilitiesList=function(){return r.Message.getRepeatedField(this,5)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.setCapabilitiesList=function(e){return r.Message.setField(this,5,e||[])},proto.caosdb.entity.v1.EntityPermissionRule.prototype.addCapabilities=function(e,t){return r.Message.addToRepeatedField(this,5,e,t)},proto.caosdb.entity.v1.EntityPermissionRule.prototype.clearCapabilitiesList=function(){return this.setCapabilitiesList([])},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileChunk.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileChunk.toObject(e,this)},proto.caosdb.entity.v1.FileChunk.toObject=function(e,t){var o,r={fileTransmissionId:(o=t.getFileTransmissionId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o),data:t.getData_asB64()};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.FileChunk.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileChunk;return proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=new proto.caosdb.entity.v1.FileTransmissionId;t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setFileTransmissionId(o);break;case 2:o=t.readBytes(),e.setData(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileChunk.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter=function(e,t){var o=void 0;null!=(o=e.getFileTransmissionId())&&t.writeMessage(1,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter),(o=e.getData_asU8()).length>0&&t.writeBytes(2,o)},proto.caosdb.entity.v1.FileChunk.prototype.getFileTransmissionId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,1)},proto.caosdb.entity.v1.FileChunk.prototype.setFileTransmissionId=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.FileChunk.prototype.clearFileTransmissionId=function(){return this.setFileTransmissionId(void 0)},proto.caosdb.entity.v1.FileChunk.prototype.hasFileTransmissionId=function(){return null!=r.Message.getField(this,1)},proto.caosdb.entity.v1.FileChunk.prototype.getData=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.FileChunk.prototype.getData_asB64=function(){return r.Message.bytesAsB64(this.getData())},proto.caosdb.entity.v1.FileChunk.prototype.getData_asU8=function(){return r.Message.bytesAsU8(this.getData())},proto.caosdb.entity.v1.FileChunk.prototype.setData=function(e){return r.Message.setProto3BytesField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileTransmissionId.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileTransmissionId.toObject(e,this)},proto.caosdb.entity.v1.FileTransmissionId.toObject=function(e,t){var o={registrationId:r.Message.getFieldWithDefault(t,1,""),fileId:r.Message.getFieldWithDefault(t,2,"")};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileTransmissionId.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileTransmissionId;return proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readString();e.setRegistrationId(o);break;case 2:o=t.readString(),e.setFileId(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileTransmissionId.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter=function(e,t){var o=void 0;(o=e.getRegistrationId()).length>0&&t.writeString(1,o),(o=e.getFileId()).length>0&&t.writeString(2,o)},proto.caosdb.entity.v1.FileTransmissionId.prototype.getRegistrationId=function(){return r.Message.getFieldWithDefault(this,1,"")},proto.caosdb.entity.v1.FileTransmissionId.prototype.setRegistrationId=function(e){return r.Message.setProto3StringField(this,1,e)},proto.caosdb.entity.v1.FileTransmissionId.prototype.getFileId=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.FileTransmissionId.prototype.setFileId=function(e){return r.Message.setProto3StringField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileTransmissionSettings.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileTransmissionSettings.toObject(e,this)},proto.caosdb.entity.v1.FileTransmissionSettings.toObject=function(e,t){var o={maxChunkSize:r.Message.getFieldWithDefault(t,1,0),maxFileSize:r.Message.getFieldWithDefault(t,2,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileTransmissionSettings;return proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readInt64();e.setMaxChunkSize(o);break;case 2:o=t.readInt64(),e.setMaxFileSize(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileTransmissionSettings.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileTransmissionSettings.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getMaxChunkSize())&&t.writeInt64(1,o),0!==(o=e.getMaxFileSize())&&t.writeInt64(2,o)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.getMaxChunkSize=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.setMaxChunkSize=function(e){return r.Message.setProto3IntField(this,1,e)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.getMaxFileSize=function(){return r.Message.getFieldWithDefault(this,2,0)},proto.caosdb.entity.v1.FileTransmissionSettings.prototype.setMaxFileSize=function(e){return r.Message.setProto3IntField(this,2,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RegisterFileUploadRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.RegisterFileUploadRequest.toObject(e,this)},proto.caosdb.entity.v1.RegisterFileUploadRequest.toObject=function(e,t){var o={};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.RegisterFileUploadRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RegisterFileUploadRequest;return proto.caosdb.entity.v1.RegisterFileUploadRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RegisterFileUploadRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)t.getFieldNumber(),t.skipField();return e},proto.caosdb.entity.v1.RegisterFileUploadRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RegisterFileUploadRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RegisterFileUploadRequest.serializeBinaryToWriter=function(e,t){},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.RegisterFileUploadResponse.toObject(e,this)},proto.caosdb.entity.v1.RegisterFileUploadResponse.toObject=function(e,t){var o,n={status:r.Message.getFieldWithDefault(t,1,0),registrationId:r.Message.getFieldWithDefault(t,2,""),uploadSettings:(o=t.getUploadSettings())&&proto.caosdb.entity.v1.FileTransmissionSettings.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.RegisterFileUploadResponse;return proto.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.RegisterFileUploadResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setStatus(o);break;case 2:o=t.readString(),e.setRegistrationId(o);break;case 4:o=new proto.caosdb.entity.v1.FileTransmissionSettings,t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionSettings.deserializeBinaryFromReader),e.setUploadSettings(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.RegisterFileUploadResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.RegisterFileUploadResponse.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getStatus())&&t.writeEnum(1,o),(o=e.getRegistrationId()).length>0&&t.writeString(2,o),null!=(o=e.getUploadSettings())&&t.writeMessage(4,o,proto.caosdb.entity.v1.FileTransmissionSettings.serializeBinaryToWriter)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.getStatus=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.setStatus=function(e){return r.Message.setProto3EnumField(this,1,e)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.getRegistrationId=function(){return r.Message.getFieldWithDefault(this,2,"")},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.setRegistrationId=function(e){return r.Message.setProto3StringField(this,2,e)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.getUploadSettings=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionSettings,4)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.setUploadSettings=function(e){return r.Message.setWrapperField(this,4,e)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.clearUploadSettings=function(){return this.setUploadSettings(void 0)},proto.caosdb.entity.v1.RegisterFileUploadResponse.prototype.hasUploadSettings=function(){return null!=r.Message.getField(this,4)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileUploadRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileUploadRequest.toObject(e,this)},proto.caosdb.entity.v1.FileUploadRequest.toObject=function(e,t){var o,r={chunk:(o=t.getChunk())&&proto.caosdb.entity.v1.FileChunk.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.FileUploadRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileUploadRequest;return proto.caosdb.entity.v1.FileUploadRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileUploadRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.FileChunk;t.readMessage(o,proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader),e.setChunk(o)}else t.skipField();return e},proto.caosdb.entity.v1.FileUploadRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileUploadRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileUploadRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getChunk())&&t.writeMessage(1,o,proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileUploadRequest.prototype.getChunk=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileChunk,1)},proto.caosdb.entity.v1.FileUploadRequest.prototype.setChunk=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.FileUploadRequest.prototype.clearChunk=function(){return this.setChunk(void 0)},proto.caosdb.entity.v1.FileUploadRequest.prototype.hasChunk=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileUploadResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileUploadResponse.toObject(e,this)},proto.caosdb.entity.v1.FileUploadResponse.toObject=function(e,t){var o={status:r.Message.getFieldWithDefault(t,1,0)};return e&&(o.$jspbMessageInstance=t),o}),proto.caosdb.entity.v1.FileUploadResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileUploadResponse;return proto.caosdb.entity.v1.FileUploadResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileUploadResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=t.readEnum();e.setStatus(o)}else t.skipField();return e},proto.caosdb.entity.v1.FileUploadResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileUploadResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileUploadResponse.serializeBinaryToWriter=function(e,t){var o;0!==(o=e.getStatus())&&t.writeEnum(1,o)},proto.caosdb.entity.v1.FileUploadResponse.prototype.getStatus=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.FileUploadResponse.prototype.setStatus=function(e){return r.Message.setProto3EnumField(this,1,e)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileDownloadRequest.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileDownloadRequest.toObject(e,this)},proto.caosdb.entity.v1.FileDownloadRequest.toObject=function(e,t){var o,r={fileTransmissionId:(o=t.getFileTransmissionId())&&proto.caosdb.entity.v1.FileTransmissionId.toObject(e,o)};return e&&(r.$jspbMessageInstance=t),r}),proto.caosdb.entity.v1.FileDownloadRequest.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileDownloadRequest;return proto.caosdb.entity.v1.FileDownloadRequest.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileDownloadRequest.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)if(1===t.getFieldNumber()){var o=new proto.caosdb.entity.v1.FileTransmissionId;t.readMessage(o,proto.caosdb.entity.v1.FileTransmissionId.deserializeBinaryFromReader),e.setFileTransmissionId(o)}else t.skipField();return e},proto.caosdb.entity.v1.FileDownloadRequest.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileDownloadRequest.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileDownloadRequest.serializeBinaryToWriter=function(e,t){var o;null!=(o=e.getFileTransmissionId())&&t.writeMessage(1,o,proto.caosdb.entity.v1.FileTransmissionId.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.getFileTransmissionId=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileTransmissionId,1)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.setFileTransmissionId=function(e){return r.Message.setWrapperField(this,1,e)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.clearFileTransmissionId=function(){return this.setFileTransmissionId(void 0)},proto.caosdb.entity.v1.FileDownloadRequest.prototype.hasFileTransmissionId=function(){return null!=r.Message.getField(this,1)},r.Message.GENERATE_TO_OBJECT&&(proto.caosdb.entity.v1.FileDownloadResponse.prototype.toObject=function(e){return proto.caosdb.entity.v1.FileDownloadResponse.toObject(e,this)},proto.caosdb.entity.v1.FileDownloadResponse.toObject=function(e,t){var o,n={status:r.Message.getFieldWithDefault(t,1,0),chunk:(o=t.getChunk())&&proto.caosdb.entity.v1.FileChunk.toObject(e,o)};return e&&(n.$jspbMessageInstance=t),n}),proto.caosdb.entity.v1.FileDownloadResponse.deserializeBinary=function(e){var t=new r.BinaryReader(e),o=new proto.caosdb.entity.v1.FileDownloadResponse;return proto.caosdb.entity.v1.FileDownloadResponse.deserializeBinaryFromReader(o,t)},proto.caosdb.entity.v1.FileDownloadResponse.deserializeBinaryFromReader=function(e,t){for(;t.nextField()&&!t.isEndGroup();)switch(t.getFieldNumber()){case 1:var o=t.readEnum();e.setStatus(o);break;case 2:o=new proto.caosdb.entity.v1.FileChunk,t.readMessage(o,proto.caosdb.entity.v1.FileChunk.deserializeBinaryFromReader),e.setChunk(o);break;default:t.skipField()}return e},proto.caosdb.entity.v1.FileDownloadResponse.prototype.serializeBinary=function(){var e=new r.BinaryWriter;return proto.caosdb.entity.v1.FileDownloadResponse.serializeBinaryToWriter(this,e),e.getResultBuffer()},proto.caosdb.entity.v1.FileDownloadResponse.serializeBinaryToWriter=function(e,t){var o=void 0;0!==(o=e.getStatus())&&t.writeEnum(1,o),null!=(o=e.getChunk())&&t.writeMessage(2,o,proto.caosdb.entity.v1.FileChunk.serializeBinaryToWriter)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.getStatus=function(){return r.Message.getFieldWithDefault(this,1,0)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.setStatus=function(e){return r.Message.setProto3EnumField(this,1,e)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.getChunk=function(){return r.Message.getWrapperField(this,proto.caosdb.entity.v1.FileChunk,2)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.setChunk=function(e){return r.Message.setWrapperField(this,2,e)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.clearChunk=function(){return this.setChunk(void 0)},proto.caosdb.entity.v1.FileDownloadResponse.prototype.hasChunk=function(){return null!=r.Message.getField(this,2)},proto.caosdb.entity.v1.AtomicDataType={ATOMIC_DATA_TYPE_UNSPECIFIED:0,ATOMIC_DATA_TYPE_TEXT:1,ATOMIC_DATA_TYPE_DOUBLE:2,ATOMIC_DATA_TYPE_DATETIME:3,ATOMIC_DATA_TYPE_INTEGER:4,ATOMIC_DATA_TYPE_BOOLEAN:5},proto.caosdb.entity.v1.SpecialValue={SPECIAL_VALUE_UNSPECIFIED:0,SPECIAL_VALUE_EMPTY_STRING:1},proto.caosdb.entity.v1.EntityRole={ENTITY_ROLE_UNSPECIFIED:0,ENTITY_ROLE_RECORD_TYPE:1,ENTITY_ROLE_RECORD:2,ENTITY_ROLE_PROPERTY:3,ENTITY_ROLE_FILE:4},proto.caosdb.entity.v1.MessageCode={MESSAGE_CODE_UNSPECIFIED:0,MESSAGE_CODE_UNKNOWN:1,MESSAGE_CODE_ENTITY_DOES_NOT_EXIST:2,MESSAGE_CODE_ENTITY_HAS_NO_PROPERTIES:3,MESSAGE_CODE_ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY:4,MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PROPERTIES:5,MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PARENTS:6,MESSAGE_CODE_ENTITY_HAS_NO_ID:7,MESSAGE_CODE_REQUIRED_BY_PERSISTENT_ENTITY:8,MESSAGE_CODE_PROPERTY_HAS_NO_DATA_TYPE:9,MESSAGE_CODE_ENTITY_HAS_NO_DESCRIPTION:10,MESSAGE_CODE_ENTITY_HAS_NO_NAME:11,MESSAGE_CODE_OBLIGATORY_PROPERTY_MISSING:12,MESSAGE_CODE_ENTITY_HAS_NO_PARENTS:13,MESSAGE_CODE_FILE_HAS_NO_TARGET_PATH:14,MESSAGE_CODE_TARGET_PATH_NOT_ALLOWED:15,MESSAGE_CODE_TARGET_PATH_EXISTS:16,MESSAGE_CODE_PROPERTY_HAS_NO_UNIT:17,MESSAGE_CODE_CANNOT_PARSE_VALUE:18,MESSAGE_CODE_CHECKSUM_TEST_FAILED:19,MESSAGE_CODE_SIZE_TEST_FAILED:20,MESSAGE_CODE_CANNOT_CREATE_PARENT_FOLDER:21,MESSAGE_CODE_FILE_HAS_NOT_BEEN_UPLOAED:22,MESSAGE_CODE_CANNOT_MOVE_FILE_TO_TARGET_PATH:23,MESSAGE_CODE_CANNOT_PARSE_DATETIME_VALUE:24,MESSAGE_CODE_CANNOT_PARSE_DOUBLE_VALUE:25,MESSAGE_CODE_CANNOT_PARSE_INT_VALUE:26,MESSAGE_CODE_CANNOT_PARSE_BOOL_VALUE:27,MESSAGE_CODE_FILE_NOT_FOUND:28,MESSAGE_CODE_WARNING_OCCURED:29,MESSAGE_CODE_ENTITY_NAME_IS_NOT_UNIQUE:30,MESSAGE_CODE_QUERY_EXCEPTION:31,MESSAGE_CODE_TRANSACTION_ROLL_BACK:32,MESSAGE_CODE_UNKNOWN_UNIT:34,MESSAGE_CODE_AUTHORIZATION_ERROR:35,MESSAGE_CODE_REFERENCE_IS_NOT_ALLOWED_BY_DATA_TYPE:36,MESSAGE_CODE_ENTITY_NAME_DUPLICATES:37,MESSAGE_CODE_DATA_TYPE_NAME_DUPLICATES:38,MESSAGE_CODE_ENTITY_HAS_NO_NAME_OR_ID:39,MESSAGE_CODE_AFFILIATION_ERROR:40,MESSAGE_CODE_QUERY_PARSING_ERROR:41,MESSAGE_CODE_NAME_PROPERTIES_MUST_BE_TEXT:42,MESSAGE_CODE_PARENT_DUPLICATES_WARNING:43,MESSAGE_CODE_PARENT_DUPLICATES_ERROR:44,MESSAGE_CODE_ATOMICITY_ERROR:45,MESSAGE_CODE_NO_SUCH_ENTITY_ROLE:46,MESSAGE_CODE_REQUIRED_BY_UNQUALIFIED:47,MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_REFERENCE:48,MESSAGE_CODE_REFERENCED_ENTITY_DOES_NOT_EXIST:49,MESSAGE_CODE_REFERENCE_NAME_DUPLICATES:50,MESSAGE_CODE_DATA_TYPE_INHERITANCE_AMBIGUOUS:51,MESSAGE_CODE_DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES:52,MESSAGE_CODE_CANNOT_PARSE_UNIT:53,MESSAGE_CODE_ADDITIONAL_PROPERTY:54,MESSAGE_CODE_PROPERTY_WITH_DATA_TYPE_OVERRIDE:55,MESSAGE_CODE_PROPERTY_WITH_DESCRIPTION_OVERRIDE:56,MESSAGE_CODE_PROPERTY_WITH_NAME_OVERRIDE:57,MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE:58,MESSAGE_CODE_INTEGRITY_VIOLATION:59},proto.caosdb.entity.v1.Importance={IMPORTANCE_UNSPECIFIED:0,IMPORTANCE_OBLIGATORY:1,IMPORTANCE_RECOMMENDED:2,IMPORTANCE_SUGGESTED:3,IMPORTANCE_FIX:4},proto.caosdb.entity.v1.EntityAclPermission={ENTITY_ACL_PERMISSION_UNSPECIFIED:0,ENTITY_ACL_PERMISSION_EDIT_ACL:1,ENTITY_ACL_PERMISSION_EDIT_PRIORITY_ACL:2},proto.caosdb.entity.v1.EntityPermissionRuleCapability={ENTITY_PERMISSION_RULE_CAPABILITY_UNSPECIFIED:0,ENTITY_PERMISSION_RULE_CAPABILITY_DELETE:1},proto.caosdb.entity.v1.EntityPermission={ENTITY_PERMISSION_UNSPECIFIED:0,ENTITY_PERMISSION_RETRIEVE_ENTITY:1,ENTITY_PERMISSION_RETRIEVE_ACL:2,ENTITY_PERMISSION_RETRIEVE_HISTORY:3,ENTITY_PERMISSION_RETRIEVE_OWNER:4,ENTITY_PERMISSION_RETRIEVE_FILE:5,ENTITY_PERMISSION_DELETE:6,ENTITY_PERMISSION_EDIT_ACL:7,ENTITY_PERMISSION_UPDATE_DESCRIPTION:8,ENTITY_PERMISSION_UPDATE_VALUE:9,ENTITY_PERMISSION_UPDATE_ROLE:10,ENTITY_PERMISSION_UPDATE_REMOVE_PARENT:11,ENTITY_PERMISSION_UPDATE_ADD_PARENT:12,ENTITY_PERMISSION_UPDATE_REMOVE_PROPERTY:13,ENTITY_PERMISSION_UPDATE_ADD_PROPERTY:14,ENTITY_PERMISSION_UPDATE_NAME:15,ENTITY_PERMISSION_UPDATE_DATA_TYPE:16,ENTITY_PERMISSION_UPDATE_REMOVE_FILE:17,ENTITY_PERMISSION_UPDATE_ADD_FILE:18,ENTITY_PERMISSION_UPDATE_MOVE_FILE:19,ENTITY_PERMISSION_USE_AS_REFERENCE:20,ENTITY_PERMISSION_USE_AS_PROPERTY:21,ENTITY_PERMISSION_USE_AS_PARENT:22,ENTITY_PERMISSION_USE_AS_DATA_TYPE:23,ENTITY_PERMISSION_UPDATE_QUERY_TEMPLATE_DEFINITION:24},proto.caosdb.entity.v1.RegistrationStatus={REGISTRATION_STATUS_UNSPECIFIED:0,REGISTRATION_STATUS_ACCEPTED:1,REGISTRATION_STATUS_REJECTED:2},proto.caosdb.entity.v1.TransmissionStatus={TRANSMISSION_STATUS_UNSPECIFIED:0,TRANSMISSION_STATUS_SUCCESS:1,TRANSMISSION_STATUS_ERROR:2,TRANSMISSION_STATUS_GO_ON:3},n.object.extend(t,proto.caosdb.entity.v1)},19:function(__unused_webpack_module,exports,__nested_webpack_require_166766__){var $jscomp=$jscomp||{};$jscomp.scope={},$jscomp.findInternal=function(e,t,o){e instanceof String&&(e=String(e));for(var r=e.length,n=0;n<r;n++){var s=e[n];if(t.call(o,s,n,e))return{i:n,v:s}}return{i:-1,v:void 0}},$jscomp.ASSUME_ES5=!1,$jscomp.ASSUME_NO_NATIVE_MAP=!1,$jscomp.ASSUME_NO_NATIVE_SET=!1,$jscomp.SIMPLE_FROUND_POLYFILL=!1,$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(e,t,o){e!=Array.prototype&&e!=Object.prototype&&(e[t]=o.value)},$jscomp.getGlobal=function(e){return"undefined"!=typeof window&&window===e?e:void 0!==__nested_webpack_require_166766__.g&&null!=__nested_webpack_require_166766__.g?__nested_webpack_require_166766__.g:e},$jscomp.global=$jscomp.getGlobal(this),$jscomp.polyfill=function(e,t,o,r){if(t){for(o=$jscomp.global,e=e.split("."),r=0;r<e.length-1;r++){var n=e[r];n in o||(o[n]={}),o=o[n]}(t=t(r=o[e=e[e.length-1]]))!=r&&null!=t&&$jscomp.defineProperty(o,e,{configurable:!0,writable:!0,value:t})}},$jscomp.polyfill("Array.prototype.findIndex",(function(e){return e||function(e,t){return $jscomp.findInternal(this,e,t).i}}),"es6","es3"),$jscomp.checkStringArgs=function(e,t,o){if(null==e)throw new TypeError("The \'this\' value for String.prototype."+o+" must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype."+o+" must not be a regular expression");return e+""},$jscomp.polyfill("String.prototype.endsWith",(function(e){return e||function(e,t){var o=$jscomp.checkStringArgs(this,e,"endsWith");e+="",void 0===t&&(t=o.length),t=Math.max(0,Math.min(0|t,o.length));for(var r=e.length;0<r&&0<t;)if(o[--t]!=e[--r])return!1;return 0>=r}}),"es6","es3"),$jscomp.polyfill("Array.prototype.find",(function(e){return e||function(e,t){return $jscomp.findInternal(this,e,t).v}}),"es6","es3"),$jscomp.polyfill("String.prototype.startsWith",(function(e){return e||function(e,t){var o=$jscomp.checkStringArgs(this,e,"startsWith");e+="";var r=o.length,n=e.length;t=Math.max(0,Math.min(0|t,o.length));for(var s=0;s<n&&t<r;)if(o[t++]!=e[s++])return!1;return s>=n}}),"es6","es3"),$jscomp.polyfill("String.prototype.repeat",(function(e){return e||function(e){var t=$jscomp.checkStringArgs(this,null,"repeat");if(0>e||1342177279<e)throw new RangeError("Invalid count value");e|=0;for(var o="";e;)1&e&&(o+=t),(e>>>=1)&&(t+=t);return o}}),"es6","es3");var COMPILED=!0,goog=goog||{};goog.global=this||self,goog.isDef=function(e){return void 0!==e},goog.isString=function(e){return"string"==typeof e},goog.isBoolean=function(e){return"boolean"==typeof e},goog.isNumber=function(e){return"number"==typeof e},goog.exportPath_=function(e,t,o){e=e.split("."),o=o||goog.global,e[0]in o||void 0===o.execScript||o.execScript("var "+e[0]);for(var r;e.length&&(r=e.shift());)!e.length&&goog.isDef(t)?o[r]=t:o=o[r]&&o[r]!==Object.prototype[r]?o[r]:o[r]={}},goog.define=function(e,t){if(!COMPILED){var o=goog.global.CLOSURE_UNCOMPILED_DEFINES,r=goog.global.CLOSURE_DEFINES;o&&void 0===o.nodeType&&Object.prototype.hasOwnProperty.call(o,e)?t=o[e]:r&&void 0===r.nodeType&&Object.prototype.hasOwnProperty.call(r,e)&&(t=r[e])}return t},goog.FEATURESET_YEAR=2012,goog.DEBUG=!0,goog.LOCALE="en",goog.TRUSTED_SITE=!0,goog.STRICT_MODE_COMPATIBLE=!1,goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG,goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1,goog.provide=function(e){if(goog.isInModuleLoader_())throw Error("goog.provide cannot be used within a module.");if(!COMPILED&&goog.isProvided_(e))throw Error(\'Namespace "\'+e+\'" already declared.\');goog.constructNamespace_(e)},goog.constructNamespace_=function(e,t){if(!COMPILED){delete goog.implicitNamespaces_[e];for(var o=e;(o=o.substring(0,o.lastIndexOf(".")))&&!goog.getObjectByName(o);)goog.implicitNamespaces_[o]=!0}goog.exportPath_(e,t)},goog.getScriptNonce=function(e){return e&&e!=goog.global?goog.getScriptNonce_(e.document):(null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document)),goog.cspNonce_)},goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/,goog.cspNonce_=null,goog.getScriptNonce_=function(e){return(e=e.querySelector&&e.querySelector("script[nonce]"))&&(e=e.nonce||e.getAttribute("nonce"))&&goog.NONCE_PATTERN_.test(e)?e:""},goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/,goog.module=function(e){if(!goog.isString(e)||!e||-1==e.search(goog.VALID_MODULE_RE_))throw Error("Invalid module identifier");if(!goog.isInGoogModuleLoader_())throw Error("Module "+e+" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You\'re likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");if(goog.moduleLoaderState_.moduleName)throw Error("goog.module may only be called once per module.");if(goog.moduleLoaderState_.moduleName=e,!COMPILED){if(goog.isProvided_(e))throw Error(\'Namespace "\'+e+\'" already declared.\');delete goog.implicitNamespaces_[e]}},goog.module.get=function(e){return goog.module.getInternal_(e)},goog.module.getInternal_=function(e){if(!COMPILED){if(e in goog.loadedModules_)return goog.loadedModules_[e].exports;if(!goog.implicitNamespaces_[e])return null!=(e=goog.getObjectByName(e))?e:null}return null},goog.ModuleType={ES6:"es6",GOOG:"goog"},goog.moduleLoaderState_=null,goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()},goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG},goog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var e=goog.global.$jscomp;return!!e&&"function"==typeof e.getCurrentModulePath&&!!e.getCurrentModulePath()},goog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");goog.moduleLoaderState_.declareLegacyNamespace=!0},goog.declareModuleId=function(e){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error("goog.declareModuleId may only be called from within an ES6 module");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error("goog.declareModuleId may only be called once per module.");if(e in goog.loadedModules_)throw Error(\'Module with namespace "\'+e+\'" already exists.\')}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=e;else{var t=goog.global.$jscomp;if(!t||"function"!=typeof t.getCurrentModulePath)throw Error(\'Module with namespace "\'+e+\'" has been loaded incorrectly.\');t=t.require(t.getCurrentModulePath()),goog.loadedModules_[e]={exports:t,type:goog.ModuleType.ES6,moduleId:e}}},goog.setTestOnly=function(e){if(goog.DISALLOW_TEST_ONLY_CODE)throw e=e||"",Error("Importing test-only code into non-debug environment"+(e?": "+e:"."))},goog.forwardDeclare=function(e){},COMPILED||(goog.isProvided_=function(e){return e in goog.loadedModules_||!goog.implicitNamespaces_[e]&&goog.isDefAndNotNull(goog.getObjectByName(e))},goog.implicitNamespaces_={"goog.module":!0}),goog.getObjectByName=function(e,t){e=e.split("."),t=t||goog.global;for(var o=0;o<e.length;o++)if(t=t[e[o]],!goog.isDefAndNotNull(t))return null;return t},goog.globalize=function(e,t){for(var o in t=t||goog.global,e)t[o]=e[o]},goog.addDependency=function(e,t,o,r){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(e,t,o,r)},goog.ENABLE_DEBUG_LOADER=!0,goog.logToConsole_=function(e){goog.global.console&&goog.global.console.error(e)},goog.require=function(e){if(!COMPILED){if(goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(e),goog.isProvided_(e)){if(goog.isInModuleLoader_())return goog.module.getInternal_(e)}else if(goog.ENABLE_DEBUG_LOADER){var t=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(e)}finally{goog.moduleLoaderState_=t}}return null}},goog.requireType=function(e){return{}},goog.basePath="",goog.nullFunction=function(){},goog.abstractMethod=function(){throw Error("unimplemented abstract method")},goog.addSingletonGetter=function(e){e.instance_=void 0,e.getInstance=function(){return e.instance_?e.instance_:(goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=e),e.instance_=new e)}},goog.instantiatedSingletons_=[],goog.LOAD_MODULE_USING_EVAL=!0,goog.SEAL_MODULE_EXPORTS=goog.DEBUG,goog.loadedModules_={},goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER,goog.TRANSPILE="detect",goog.ASSUME_ES_MODULES_TRANSPILED=!1,goog.TRANSPILE_TO_LANGUAGE="",goog.TRANSPILER="transpile.js",goog.hasBadLetScoping=null,goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval(\'"use strict";let x = 1; function f() { return typeof x; };f() == "number";\')}catch(e){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping},goog.workaroundSafari10EvalBug=function(e){return"(function(){"+e+"\\n;})();\\n"},goog.loadModule=function(e){var t=goog.moduleLoaderState_;try{if(goog.moduleLoaderState_={moduleName:"",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG},goog.isFunction(e))var o=e.call(void 0,{});else{if(!goog.isString(e))throw Error("Invalid module definition");goog.useSafari10Workaround()&&(e=goog.workaroundSafari10EvalBug(e)),o=goog.loadModuleFromSource_.call(void 0,e)}var r=goog.moduleLoaderState_.moduleName;if(!goog.isString(r)||!r)throw Error(\'Invalid module name "\'+r+\'"\');goog.moduleLoaderState_.declareLegacyNamespace?goog.constructNamespace_(r,o):goog.SEAL_MODULE_EXPORTS&&Object.seal&&"object"==typeof o&&null!=o&&Object.seal(o),goog.loadedModules_[r]={exports:o,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName}}finally{goog.moduleLoaderState_=t}},goog.loadModuleFromSource_=function(a){return eval(a),{}},goog.normalizePath_=function(e){e=e.split("/");for(var t=0;t<e.length;)"."==e[t]?e.splice(t,1):t&&".."==e[t]&&e[t-1]&&".."!=e[t-1]?e.splice(--t,2):t++;return e.join("/")},goog.loadFileSync_=function(e){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(e);try{var t=new goog.global.XMLHttpRequest;return t.open("get",e,!1),t.send(),0==t.status||200==t.status?t.responseText:null}catch(e){return null}},goog.transpile_=function(e,t,o){var r=goog.global.$jscomp;r||(goog.global.$jscomp=r={});var n=r.transpile;if(!n){var s=goog.basePath+goog.TRANSPILER,i=goog.loadFileSync_(s);if(i){if(function(){(0,eval)(i+"\\n//# sourceURL="+s)}.call(goog.global),goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error(\'The transpiler did not properly export the "transpile" method. $gwtExport: \'+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=goog.global.$gwtExport.$jscomp.transpile,n=(r=goog.global.$jscomp).transpile}}return n||(n=r.transpile=function(e,t){return goog.logToConsole_(t+" requires transpilation but no transpiler was found."),e}),n(e,t,o)},goog.typeOf=function(e){var t=typeof e;if("object"==t){if(!e)return"null";if(e instanceof Array)return"array";if(e instanceof Object)return t;var o=Object.prototype.toString.call(e);if("[object Window]"==o)return"object";if("[object Array]"==o||"number"==typeof e.length&&void 0!==e.splice&&void 0!==e.propertyIsEnumerable&&!e.propertyIsEnumerable("splice"))return"array";if("[object Function]"==o||void 0!==e.call&&void 0!==e.propertyIsEnumerable&&!e.propertyIsEnumerable("call"))return"function"}else if("function"==t&&void 0===e.call)return"object";return t},goog.isNull=function(e){return null===e},goog.isDefAndNotNull=function(e){return null!=e},goog.isArray=function(e){return"array"==goog.typeOf(e)},goog.isArrayLike=function(e){var t=goog.typeOf(e);return"array"==t||"object"==t&&"number"==typeof e.length},goog.isDateLike=function(e){return goog.isObject(e)&&"function"==typeof e.getFullYear},goog.isFunction=function(e){return"function"==goog.typeOf(e)},goog.isObject=function(e){var t=typeof e;return"object"==t&&null!=e||"function"==t},goog.getUid=function(e){return e[goog.UID_PROPERTY_]||(e[goog.UID_PROPERTY_]=++goog.uidCounter_)},goog.hasUid=function(e){return!!e[goog.UID_PROPERTY_]},goog.removeUid=function(e){null!==e&&"removeAttribute"in e&&e.removeAttribute(goog.UID_PROPERTY_);try{delete e[goog.UID_PROPERTY_]}catch(e){}},goog.UID_PROPERTY_="closure_uid_"+(1e9*Math.random()>>>0),goog.uidCounter_=0,goog.getHashCode=goog.getUid,goog.removeHashCode=goog.removeUid,goog.cloneObject=function(e){var t=goog.typeOf(e);if("object"==t||"array"==t){if("function"==typeof e.clone)return e.clone();for(var o in t="array"==t?[]:{},e)t[o]=goog.cloneObject(e[o]);return t}return e},goog.bindNative_=function(e,t,o){return e.call.apply(e.bind,arguments)},goog.bindJs_=function(e,t,o){if(!e)throw Error();if(2<arguments.length){var r=Array.prototype.slice.call(arguments,2);return function(){var o=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(o,r),e.apply(t,o)}}return function(){return e.apply(t,arguments)}},goog.bind=function(e,t,o){return Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_,goog.bind.apply(null,arguments)},goog.partial=function(e,t){var o=Array.prototype.slice.call(arguments,1);return function(){var t=o.slice();return t.push.apply(t,arguments),e.apply(this,t)}},goog.mixin=function(e,t){for(var o in t)e[o]=t[o]},goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date},goog.globalEval=function(e){if(goog.global.execScript)goog.global.execScript(e,"JavaScript");else{if(!goog.global.eval)throw Error("goog.globalEval not available");if(null==goog.evalWorksForGlobals_){try{goog.global.eval("var _evalTest_ = 1;")}catch(e){}if(void 0!==goog.global._evalTest_){try{delete goog.global._evalTest_}catch(e){}goog.evalWorksForGlobals_=!0}else goog.evalWorksForGlobals_=!1}if(goog.evalWorksForGlobals_)goog.global.eval(e);else{var t=goog.global.document,o=t.createElement("SCRIPT");o.type="text/javascript",o.defer=!1,o.appendChild(t.createTextNode(e)),t.head.appendChild(o),t.head.removeChild(o)}}},goog.evalWorksForGlobals_=null,goog.getCssName=function(e,t){if("."==String(e).charAt(0))throw Error(\'className passed in goog.getCssName must not start with ".". You passed: \'+e);var o=function(e){return goog.cssNameMapping_[e]||e},r=function(e){e=e.split("-");for(var t=[],r=0;r<e.length;r++)t.push(o(e[r]));return t.join("-")};return r=goog.cssNameMapping_?"BY_WHOLE"==goog.cssNameMappingStyle_?o:r:function(e){return e},e=t?e+"-"+r(t):r(e),goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(e):e},goog.setCssNameMapping=function(e,t){goog.cssNameMapping_=e,goog.cssNameMappingStyle_=t},!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING),goog.getMsg=function(e,t,o){return o&&o.html&&(e=e.replace(/</g,"&lt;")),t&&(e=e.replace(/\\{\\$([^}]+)}/g,(function(e,o){return null!=t&&o in t?t[o]:e}))),e},goog.getMsgWithFallback=function(e,t){return e},goog.exportSymbol=function(e,t,o){goog.exportPath_(e,t,o)},goog.exportProperty=function(e,t,o){e[t]=o},goog.inherits=function(e,t){function o(){}o.prototype=t.prototype,e.superClass_=t.prototype,e.prototype=new o,e.prototype.constructor=e,e.base=function(e,o,r){for(var n=Array(arguments.length-2),s=2;s<arguments.length;s++)n[s-2]=arguments[s];return t.prototype[o].apply(e,n)}},goog.base=function(e,t,o){var r=arguments.callee.caller;if(goog.STRICT_MODE_COMPATIBLE||goog.DEBUG&&!r)throw Error("arguments.caller not defined.  goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");if(void 0!==r.superClass_){for(var n=Array(arguments.length-1),s=1;s<arguments.length;s++)n[s-1]=arguments[s];return r.superClass_.constructor.apply(e,n)}if("string"!=typeof t&&"symbol"!=typeof t)throw Error("method names provided to goog.base must be a string or a symbol");for(n=Array(arguments.length-2),s=2;s<arguments.length;s++)n[s-2]=arguments[s];s=!1;for(var i=e.constructor.prototype;i;i=Object.getPrototypeOf(i))if(i[t]===r)s=!0;else if(s)return i[t].apply(e,n);if(e[t]===r)return e.constructor.prototype[t].apply(e,n);throw Error("goog.base called from a method of one name to a method of a different name")},goog.scope=function(e){if(goog.isInModuleLoader_())throw Error("goog.scope is not supported within a module.");e.call(goog.global)},COMPILED||(goog.global.COMPILED=COMPILED),goog.defineClass=function(e,t){var o=t.constructor,r=t.statics;return o&&o!=Object.prototype.constructor||(o=function(){throw Error("cannot instantiate an interface (no constructor defined).")}),o=goog.defineClass.createSealingConstructor_(o,e),e&&goog.inherits(o,e),delete t.constructor,delete t.statics,goog.defineClass.applyProperties_(o.prototype,t),null!=r&&(r instanceof Function?r(o):goog.defineClass.applyProperties_(o,r)),o},goog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG,goog.defineClass.createSealingConstructor_=function(e,t){if(!goog.defineClass.SEAL_CLASS_INSTANCES)return e;var o=!goog.defineClass.isUnsealable_(t),r=function(){var t=e.apply(this,arguments)||this;return t[goog.UID_PROPERTY_]=t[goog.UID_PROPERTY_],this.constructor===r&&o&&Object.seal instanceof Function&&Object.seal(t),t};return r},goog.defineClass.isUnsealable_=function(e){return e&&e.prototype&&e.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]},goog.defineClass.OBJECT_PROTOTYPE_FIELDS_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),goog.defineClass.applyProperties_=function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);for(var r=0;r<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;r++)o=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[r],Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},goog.tagUnsealableClass=function(e){!COMPILED&&goog.defineClass.SEAL_CLASS_INSTANCES&&(e.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]=!0)},goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_="goog_defineClass_legacy_unsealable",!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var e=goog.global.document;return null!=e&&"write"in e},goog.isDocumentLoading_=function(){var e=goog.global.document;return e.attachEvent?"complete"!=e.readyState:"loading"==e.readyState},goog.findBasePath_=function(){if(goog.isDef(goog.global.CLOSURE_BASE_PATH)&&goog.isString(goog.global.CLOSURE_BASE_PATH))goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var e=goog.global.document,t=e.currentScript;for(t=(e=t?[t]:e.getElementsByTagName("SCRIPT")).length-1;0<=t;--t){var o=e[t].src,r=o.lastIndexOf("?");if(r=-1==r?o.length:r,"base.js"==o.substr(r-7,7)){goog.basePath=o.substr(0,r-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null,this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(t,o){e?d[t]=!0:o()?(c=t,d[t]=!1):e=d[t]=!0}function b(a){try{return!!eval(a)}catch(e){return!1}}var c="es3",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:"";return a("es5",(function(){return b("[1,].length==1")})),a("es6",(function(){return!f.match(/Edge\\/(\\d+)(\\.\\d)*/i)&&b(\'(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()\')})),a("es7",(function(){return b("2 ** 2 == 4")})),a("es8",(function(){return b("async () => 1, true")})),a("es9",(function(){return b("({...rest} = {}), true")})),a("es_next",(function(){return!1})),{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(e,t){if("always"==goog.TRANSPILE)return!0;if("never"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var o=this.createRequiresTranspilation_();this.requiresTranspilation_=o.map,this.transpilationTarget_=this.transpilationTarget_||o.target}if(e in this.requiresTranspilation_)return!!this.requiresTranspilation_[e]||!(!goog.inHtmlDocument_()||"es6"!=t||"noModule"in goog.global.document.createElement("script"));throw Error("Unknown language mode: "+e)},goog.Transpiler.prototype.transpile=function(e,t){return goog.transpile_(e,t,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(e){return e.replace(/<\\/(SCRIPT)/gi,"\\\\x3c/$1")},goog.DebugLoader_=function(){this.dependencies_={},this.idToPath_={},this.written_={},this.loadingDeps_=[],this.depsToLoad_=[],this.paused_=!1,this.factory_=new goog.DependencyFactory(goog.transpiler_),this.deferredCallbacks_={},this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(e,t){function o(){r&&(goog.global.setTimeout(r,0),r=null)}var r=t;if(e.length){t=[];for(var n=0;n<e.length;n++){var s=this.getPathFromDeps_(e[n]);if(!s)throw Error("Unregonized namespace: "+e[n]);t.push(this.dependencies_[s])}s=goog.require;var i=0;for(n=0;n<e.length;n++)s(e[n]),t[n].onLoad((function(){++i==e.length&&o()}))}else o()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+"deps.js"),"deps.js",[],[],{},!1)),this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(e,t){(e=this.getPathFromDeps_(e))&&(t||this.areDepsLoaded_(this.dependencies_[e].requires))&&(t=this.deferredCallbacks_[e])&&(delete this.deferredCallbacks_[e],t())},goog.DebugLoader_.prototype.setDependencyFactory=function(e){this.factory_=e},goog.DebugLoader_.prototype.load_=function(e){if(!this.getPathFromDeps_(e))throw e="goog.require could not find: "+e,goog.logToConsole_(e),Error(e);var t=this,o=[],r=function(e){var n=t.getPathFromDeps_(e);if(!n)throw Error("Bad dependency path or symbol: "+e);if(!t.written_[n]){for(t.written_[n]=!0,e=t.dependencies_[n],n=0;n<e.requires.length;n++)goog.isProvided_(e.requires[n])||r(e.requires[n]);o.push(e)}};r(e),e=!!this.depsToLoad_.length,this.depsToLoad_=this.depsToLoad_.concat(o),this.paused_||e||this.loadDeps_()},goog.DebugLoader_.prototype.loadDeps_=function(){for(var e=this,t=this.paused_;this.depsToLoad_.length&&!t;)!function(){var o=!1,r=e.depsToLoad_.shift(),n=!1;e.loading_(r);var s={pause:function(){if(o)throw Error("Cannot call pause after the call to load.");t=!0},resume:function(){o?e.resume_():t=!1},loaded:function(){if(n)throw Error("Double call to loaded.");n=!0,e.loaded_(r)},pending:function(){for(var t=[],o=0;o<e.loadingDeps_.length;o++)t.push(e.loadingDeps_[o]);return t},setModuleState:function(e){goog.moduleLoaderState_={type:e,moduleName:"",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(e,t,o){o&&(goog.loadedModules_[o]={exports:t,type:goog.ModuleType.ES6,moduleId:o||""})},registerGoogModuleExports:function(e,t){goog.loadedModules_[e]={exports:t,type:goog.ModuleType.GOOG,moduleId:e}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(t){if(o)throw Error("Cannot register with defer after the call to load.");e.defer_(r,t)},areDepsLoaded:function(){return e.areDepsLoaded_(r.requires)}};try{r.load(s)}finally{o=!0}}();t&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(e){this.loadingDeps_.push(e)},goog.DebugLoader_.prototype.loaded_=function(e){for(var t=0;t<this.loadingDeps_.length;t++)if(this.loadingDeps_[t]==e){this.loadingDeps_.splice(t,1);break}for(t=0;t<this.deferredQueue_.length;t++)if(this.deferredQueue_[t]==e.path){this.deferredQueue_.splice(t,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);e.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(e){for(var t=0;t<e.length;t++){var o=this.getPathFromDeps_(e[t]);if(!o||!(o in this.deferredCallbacks_)&&!goog.isProvided_(e[t]))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=function(e){return e in this.idToPath_?this.idToPath_[e]:e in this.dependencies_?e:null},goog.DebugLoader_.prototype.defer_=function(e,t){this.deferredCallbacks_[e.path]=t,this.deferredQueue_.push(e.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(e,t,o){},goog.LoadController.prototype.setModuleState=function(e){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(e){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(e,t,o,r,n){this.path=e,this.relativePath=t,this.provides=o,this.requires=r,this.loadFlags=n,this.loaded_=!1,this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var e=this.path,t=e.indexOf("://");return 0<=t&&0<=(t=(e=e.substring(t+3)).indexOf("/"))&&(e=e.substring(t+1)),e},goog.Dependency.prototype.onLoad=function(e){this.loaded_?e():this.loadCallbacks_.push(e)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var e=this.loadCallbacks_;this.loadCallbacks_=[];for(var t=0;t<e.length;t++)e[t]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(e){var t=Math.random().toString(32);return goog.Dependency.callbackMap_[t]=e,t},goog.Dependency.unregisterCallback_=function(e){delete goog.Dependency.callbackMap_[e]},goog.Dependency.callback_=function(e,t){if(!(e in goog.Dependency.callbackMap_))throw Error("Callback key "+e+" does not exist (was base.js loaded more than once?).");for(var o=goog.Dependency.callbackMap_[e],r=[],n=1;n<arguments.length;n++)r.push(arguments[n]);o.apply(void 0,r)},goog.Dependency.prototype.load=function(e){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?e.loaded():e.pause();else if(goog.inHtmlDocument_()){var t=goog.global.document;if("complete"==t.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path))return void e.loaded();throw Error(\'Cannot write "\'+this.path+\'" after document load\')}if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var o=goog.Dependency.registerCallback_((function(t){goog.DebugLoader_.IS_OLD_IE_&&"complete"!=t.readyState||(goog.Dependency.unregisterCallback_(o),e.loaded())})),r=!goog.DebugLoader_.IS_OLD_IE_&&goog.getScriptNonce()?\' nonce="\'+goog.getScriptNonce()+\'"\':"";r=\'<script src="\'+this.path+\'" \'+(goog.DebugLoader_.IS_OLD_IE_?"onreadystatechange":"onload")+"=\\"goog.Dependency.callback_(\'"+o+\'\\\', this)" type="text/javascript" \'+(goog.Dependency.defer_?"defer":"")+r+"><\\/script>",t.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(r):r)}else{var n=t.createElement("script");n.defer=goog.Dependency.defer_,n.async=!1,n.type="text/javascript",(r=goog.getScriptNonce())&&n.setAttribute("nonce",r),goog.DebugLoader_.IS_OLD_IE_?(e.pause(),n.onreadystatechange=function(){"loaded"!=n.readyState&&"complete"!=n.readyState||(e.loaded(),e.resume())}):n.onload=function(){n.onload=null,e.loaded()},n.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path,t.head.appendChild(n)}}else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."),"deps.js"==this.relativePath?(goog.logToConsole_("Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true."),e.loaded()):e.pause()},goog.Es6ModuleDependency=function(e,t,o,r,n){goog.Dependency.call(this,e,t,o,r,n)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(e){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?e.loaded():e.pause();else if(goog.inHtmlDocument_()){var t=goog.global.document,o=this;if(goog.isDocumentLoading_()){var r=function(e,o){e=o?\'<script type="module" crossorigin>\'+o+"<\\/script>":\'<script type="module" crossorigin src="\'+e+\'"><\\/script>\',t.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(e):e)};goog.Dependency.defer_=!0}else r=function(e,o){var r=t.createElement("script");r.defer=!0,r.async=!1,r.type="module",r.setAttribute("crossorigin",!0);var n=goog.getScriptNonce();n&&r.setAttribute("nonce",n),o?r.textContent=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(o):o:r.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(e):e,t.head.appendChild(r)};var n=goog.Dependency.registerCallback_((function(){goog.Dependency.unregisterCallback_(n),e.setModuleState(goog.ModuleType.ES6)}));r(void 0,\'goog.Dependency.callback_("\'+n+\'")\'),r(this.path,void 0);var s=goog.Dependency.registerCallback_((function(t){goog.Dependency.unregisterCallback_(s),e.registerEs6ModuleExports(o.path,t,goog.moduleLoaderState_.moduleName)}));r(void 0,\'import * as m from "\'+this.path+\'"; goog.Dependency.callback_("\'+s+\'", m)\');var i=goog.Dependency.registerCallback_((function(){goog.Dependency.unregisterCallback_(i),e.clearModuleState(),e.loaded()}));r(void 0,\'goog.Dependency.callback_("\'+i+\'")\')}else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."),e.pause()},goog.TransformedDependency=function(e,t,o,r,n){goog.Dependency.call(this,e,t,o,r,n),this.contents_=null,this.lazyFetch_=!goog.inHtmlDocument_()||!("noModule"in goog.global.document.createElement("script"))},goog.inherits(goog.TransformedDependency,goog.Dependency),goog.TransformedDependency.prototype.load=function(e){function t(){r.contents_=goog.loadFileSync_(r.path),r.contents_&&(r.contents_=r.transform(r.contents_),r.contents_&&(r.contents_+="\\n//# sourceURL="+r.path))}function o(){if(r.lazyFetch_&&t(),r.contents_){n&&e.setModuleState(goog.ModuleType.ES6);try{var o=r.contents_;if(r.contents_=null,goog.globalEval(o),n)var s=goog.moduleLoaderState_.moduleName}finally{n&&e.clearModuleState()}n&&goog.global.$jscomp.require.ensure([r.getPathName()],(function(){e.registerEs6ModuleExports(r.path,goog.global.$jscomp.require(r.getPathName()),s)})),e.loaded()}}var r=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)t(),this.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT("",this.contents_)?(this.contents_=null,e.loaded()):e.pause();else{var n=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||t();var s=1<e.pending().length,i=s&&goog.DebugLoader_.IS_OLD_IE_;if(s=goog.Dependency.defer_&&(s||goog.isDocumentLoading_()),i||s)e.defer((function(){o()}));else{var a=goog.global.document;if(i=goog.inHtmlDocument_()&&"ActiveXObject"in goog.global,n&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!i){goog.Dependency.defer_=!0,e.pause();var g=a.onreadystatechange;a.onreadystatechange=function(){"interactive"==a.readyState&&(a.onreadystatechange=g,o(),e.resume()),goog.isFunction(g)&&g.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?function(){var e=goog.global.document,t=goog.Dependency.registerCallback_((function(){goog.Dependency.unregisterCallback_(t),o()})),r=\'<script type="text/javascript">\'+goog.protectScriptTag_(\'goog.Dependency.callback_("\'+t+\'");\')+"<\\/script>";e.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(r):r)}():o()}}},goog.TransformedDependency.prototype.transform=function(e){},goog.TranspiledDependency=function(e,t,o,r,n,s){goog.TransformedDependency.call(this,e,t,o,r,n),this.transpiler=s},goog.inherits(goog.TranspiledDependency,goog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(e){return this.transpiler.transpile(e,this.getPathName())},goog.PreTranspiledEs6ModuleDependency=function(e,t,o,r,n){goog.TransformedDependency.call(this,e,t,o,r,n)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(e){return e},goog.GoogModuleDependency=function(e,t,o,r,n,s,i){goog.TransformedDependency.call(this,e,t,o,r,n),this.needsTranspile_=s,this.transpiler_=i},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=function(e){return this.needsTranspile_&&(e=this.transpiler_.transpile(e,this.getPathName())),goog.LOAD_MODULE_USING_EVAL&&goog.isDef(goog.global.JSON)?"goog.loadModule("+goog.global.JSON.stringify(e+"\\n//# sourceURL="+this.path+"\\n")+");":\'goog.loadModule(function(exports) {"use strict";\'+e+"\\n;return exports});\\n//# sourceURL="+this.path+"\\n"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(e,t,o,r){t=t||[],e=e.replace(/\\\\/g,"/");var n=goog.normalizePath_(goog.basePath+e);for(r&&"boolean"!=typeof r||(r=r?{module:goog.ModuleType.GOOG}:{}),o=this.factory_.createDependency(n,e,t,o,r,goog.transpiler_.needsTranspile(r.lang||"es3",r.module)),this.dependencies_[n]=o,o=0;o<t.length;o++)this.idToPath_[t[o]]=n;this.idToPath_[e]=n},goog.DependencyFactory=function(e){this.transpiler=e},goog.DependencyFactory.prototype.createDependency=function(e,t,o,r,n,s){return n.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(e,t,o,r,n,s,this.transpiler):s?new goog.TranspiledDependency(e,t,o,r,n,this.transpiler):n.module==goog.ModuleType.ES6?"never"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(e,t,o,r,n):new goog.Es6ModuleDependency(e,t,o,r,n):new goog.Dependency(e,t,o,r,n)},goog.debugLoader_=new goog.DebugLoader_,goog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(e){goog.debugLoader_.setDependencyFactory(e)},goog.global.CLOSURE_NO_DEPS||goog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(e,t){goog.debugLoader_.bootstrap(e,t)}),goog.TRUSTED_TYPES_POLICY_NAME="",goog.identity_=function(e){return e},goog.createTrustedTypesPolicy=function(e){var t=null;if("undefined"==typeof TrustedTypes||!TrustedTypes.createPolicy)return t;try{t=TrustedTypes.createPolicy(e,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_,createURL:goog.identity_})}catch(e){goog.logToConsole_(e.message)}return t},goog.TRUSTED_TYPES_POLICY_=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+"#base"):null,goog.object={},goog.object.is=function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},goog.object.forEach=function(e,t,o){for(var r in e)t.call(o,e[r],r,e)},goog.object.filter=function(e,t,o){var r,n={};for(r in e)t.call(o,e[r],r,e)&&(n[r]=e[r]);return n},goog.object.map=function(e,t,o){var r,n={};for(r in e)n[r]=t.call(o,e[r],r,e);return n},goog.object.some=function(e,t,o){for(var r in e)if(t.call(o,e[r],r,e))return!0;return!1},goog.object.every=function(e,t,o){for(var r in e)if(!t.call(o,e[r],r,e))return!1;return!0},goog.object.getCount=function(e){var t,o=0;for(t in e)o++;return o},goog.object.getAnyKey=function(e){for(var t in e)return t},goog.object.getAnyValue=function(e){for(var t in e)return e[t]},goog.object.contains=function(e,t){return goog.object.containsValue(e,t)},goog.object.getValues=function(e){var t,o=[],r=0;for(t in e)o[r++]=e[t];return o},goog.object.getKeys=function(e){var t,o=[],r=0;for(t in e)o[r++]=t;return o},goog.object.getValueByKeys=function(e,t){var o=goog.isArrayLike(t),r=o?t:arguments;for(o=o?0:1;o<r.length;o++){if(null==e)return;e=e[r[o]]}return e},goog.object.containsKey=function(e,t){return null!==e&&t in e},goog.object.containsValue=function(e,t){for(var o in e)if(e[o]==t)return!0;return!1},goog.object.findKey=function(e,t,o){for(var r in e)if(t.call(o,e[r],r,e))return r},goog.object.findValue=function(e,t,o){return(t=goog.object.findKey(e,t,o))&&e[t]},goog.object.isEmpty=function(e){for(var t in e)return!1;return!0},goog.object.clear=function(e){for(var t in e)delete e[t]},goog.object.remove=function(e,t){var o;return(o=t in e)&&delete e[t],o},goog.object.add=function(e,t,o){if(null!==e&&t in e)throw Error(\'The object already contains the key "\'+t+\'"\');goog.object.set(e,t,o)},goog.object.get=function(e,t,o){return null!==e&&t in e?e[t]:o},goog.object.set=function(e,t,o){e[t]=o},goog.object.setIfUndefined=function(e,t,o){return t in e?e[t]:e[t]=o},goog.object.setWithReturnValueIfNotSet=function(e,t,o){return t in e?e[t]:(o=o(),e[t]=o)},goog.object.equals=function(e,t){for(var o in e)if(!(o in t)||e[o]!==t[o])return!1;for(var r in t)if(!(r in e))return!1;return!0},goog.object.clone=function(e){var t,o={};for(t in e)o[t]=e[t];return o},goog.object.unsafeClone=function(e){var t=goog.typeOf(e);if("object"==t||"array"==t){if(goog.isFunction(e.clone))return e.clone();for(var o in t="array"==t?[]:{},e)t[o]=goog.object.unsafeClone(e[o]);return t}return e},goog.object.transpose=function(e){var t,o={};for(t in e)o[e[t]]=t;return o},goog.object.PROTOTYPE_FIELDS_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),goog.object.extend=function(e,t){for(var o,r,n=1;n<arguments.length;n++){for(o in r=arguments[n])e[o]=r[o];for(var s=0;s<goog.object.PROTOTYPE_FIELDS_.length;s++)o=goog.object.PROTOTYPE_FIELDS_[s],Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}},goog.object.create=function(e){var t=arguments.length;if(1==t&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(t%2)throw Error("Uneven number of arguments");for(var o={},r=0;r<t;r+=2)o[arguments[r]]=arguments[r+1];return o},goog.object.createSet=function(e){var t=arguments.length;if(1==t&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var o={},r=0;r<t;r++)o[arguments[r]]=!0;return o},goog.object.createImmutableView=function(e){var t=e;return Object.isFrozen&&!Object.isFrozen(e)&&(t=Object.create(e),Object.freeze(t)),t},goog.object.isImmutableView=function(e){return!!Object.isFrozen&&Object.isFrozen(e)},goog.object.getAllPropertyNames=function(e,t,o){if(!e)return[];if(!Object.getOwnPropertyNames||!Object.getPrototypeOf)return goog.object.getKeys(e);for(var r={};e&&(e!==Object.prototype||t)&&(e!==Function.prototype||o);){for(var n=Object.getOwnPropertyNames(e),s=0;s<n.length;s++)r[n[s]]=!0;e=Object.getPrototypeOf(e)}return goog.object.getKeys(r)},goog.object.getSuperClass=function(e){return(e=Object.getPrototypeOf(e.prototype))&&e.constructor},goog.debug={},goog.debug.Error=function(e){if(Error.captureStackTrace)Error.captureStackTrace(this,goog.debug.Error);else{var t=Error().stack;t&&(this.stack=t)}e&&(this.message=String(e)),this.reportErrorToServer=!0},goog.inherits(goog.debug.Error,Error),goog.debug.Error.prototype.name="CustomError",goog.dom={},goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12},goog.asserts={},goog.asserts.ENABLE_ASSERTS=goog.DEBUG,goog.asserts.AssertionError=function(e,t){goog.debug.Error.call(this,goog.asserts.subs_(e,t)),this.messagePattern=e},goog.inherits(goog.asserts.AssertionError,goog.debug.Error),goog.asserts.AssertionError.prototype.name="AssertionError",goog.asserts.DEFAULT_ERROR_HANDLER=function(e){throw e},goog.asserts.errorHandler_=goog.asserts.DEFAULT_ERROR_HANDLER,goog.asserts.subs_=function(e,t){for(var o="",r=(e=e.split("%s")).length-1,n=0;n<r;n++)o+=e[n]+(n<t.length?t[n]:"%s");return o+e[r]},goog.asserts.doAssertFailure_=function(e,t,o,r){var n="Assertion failed";if(o){n+=": "+o;var s=r}else e&&(n+=": "+e,s=t);e=new goog.asserts.AssertionError(""+n,s||[]),goog.asserts.errorHandler_(e)},goog.asserts.setErrorHandler=function(e){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.errorHandler_=e)},goog.asserts.assert=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!e&&goog.asserts.doAssertFailure_("",null,t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertExists=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&null==e&&goog.asserts.doAssertFailure_("Expected to exist: %s.",[e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.fail=function(e,t){goog.asserts.ENABLE_ASSERTS&&goog.asserts.errorHandler_(new goog.asserts.AssertionError("Failure"+(e?": "+e:""),Array.prototype.slice.call(arguments,1)))},goog.asserts.assertNumber=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(e)&&goog.asserts.doAssertFailure_("Expected number but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertString=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isString(e)&&goog.asserts.doAssertFailure_("Expected string but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertFunction=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(e)&&goog.asserts.doAssertFailure_("Expected function but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertObject=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isObject(e)&&goog.asserts.doAssertFailure_("Expected object but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertArray=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isArray(e)&&goog.asserts.doAssertFailure_("Expected array but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertBoolean=function(e,t,o){return goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(e)&&goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertElement=function(e,t,o){return!goog.asserts.ENABLE_ASSERTS||goog.isObject(e)&&e.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_("Expected Element but got %s: %s.",[goog.typeOf(e),e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertInstanceof=function(e,t,o,r){return!goog.asserts.ENABLE_ASSERTS||e instanceof t||goog.asserts.doAssertFailure_("Expected instanceof %s but got %s.",[goog.asserts.getType_(t),goog.asserts.getType_(e)],o,Array.prototype.slice.call(arguments,3)),e},goog.asserts.assertFinite=function(e,t,o){return!goog.asserts.ENABLE_ASSERTS||"number"==typeof e&&isFinite(e)||goog.asserts.doAssertFailure_("Expected %s to be a finite number but it is not.",[e],t,Array.prototype.slice.call(arguments,2)),e},goog.asserts.assertObjectPrototypeIsIntact=function(){for(var e in Object.prototype)goog.asserts.fail(e+" should not be enumerable in Object.prototype.")},goog.asserts.getType_=function(e){return e instanceof Function?e.displayName||e.name||"unknown type name":e instanceof Object?e.constructor.displayName||e.constructor.name||Object.prototype.toString.call(e):null===e?"null":typeof e};var jspb={BinaryConstants:{},ConstBinaryMessage:function(){},BinaryMessage:function(){}};jspb.BinaryConstants.FieldType={INVALID:-1,DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18,FHASH64:30,VHASH64:31},jspb.BinaryConstants.WireType={INVALID:-1,VARINT:0,FIXED64:1,DELIMITED:2,START_GROUP:3,END_GROUP:4,FIXED32:5},jspb.BinaryConstants.FieldTypeToWireType=function(e){var t=jspb.BinaryConstants.FieldType,o=jspb.BinaryConstants.WireType;switch(e){case t.INT32:case t.INT64:case t.UINT32:case t.UINT64:case t.SINT32:case t.SINT64:case t.BOOL:case t.ENUM:case t.VHASH64:return o.VARINT;case t.DOUBLE:case t.FIXED64:case t.SFIXED64:case t.FHASH64:return o.FIXED64;case t.STRING:case t.MESSAGE:case t.BYTES:return o.DELIMITED;case t.FLOAT:case t.FIXED32:case t.SFIXED32:return o.FIXED32;default:return o.INVALID}},jspb.BinaryConstants.INVALID_FIELD_NUMBER=-1,jspb.BinaryConstants.FLOAT32_EPS=1401298464324817e-60,jspb.BinaryConstants.FLOAT32_MIN=11754943508222875e-54,jspb.BinaryConstants.FLOAT32_MAX=34028234663852886e22,jspb.BinaryConstants.FLOAT64_EPS=5e-324,jspb.BinaryConstants.FLOAT64_MIN=22250738585072014e-324,jspb.BinaryConstants.FLOAT64_MAX=17976931348623157e292,jspb.BinaryConstants.TWO_TO_20=1048576,jspb.BinaryConstants.TWO_TO_23=8388608,jspb.BinaryConstants.TWO_TO_31=2147483648,jspb.BinaryConstants.TWO_TO_32=4294967296,jspb.BinaryConstants.TWO_TO_52=4503599627370496,jspb.BinaryConstants.TWO_TO_63=0x8000000000000000,jspb.BinaryConstants.TWO_TO_64=0x10000000000000000,jspb.BinaryConstants.ZERO_HASH="\\0\\0\\0\\0\\0\\0\\0\\0",goog.array={},goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE,goog.array.ASSUME_NATIVE_FUNCTIONS=2012<goog.FEATURESET_YEAR,goog.array.peek=function(e){return e[e.length-1]},goog.array.last=goog.array.peek,goog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.indexOf)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.indexOf.call(e,t,o)}:function(e,t,o){if(o=null==o?0:0>o?Math.max(0,e.length+o):o,goog.isString(e))return goog.isString(t)&&1==t.length?e.indexOf(t,o):-1;for(;o<e.length;o++)if(o in e&&e[o]===t)return o;return-1},goog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.lastIndexOf)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.lastIndexOf.call(e,t,null==o?e.length-1:o)}:function(e,t,o){if(0>(o=null==o?e.length-1:o)&&(o=Math.max(0,e.length+o)),goog.isString(e))return goog.isString(t)&&1==t.length?e.lastIndexOf(t,o):-1;for(;0<=o;o--)if(o in e&&e[o]===t)return o;return-1},goog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.forEach)?function(e,t,o){goog.asserts.assert(null!=e.length),Array.prototype.forEach.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)s in n&&t.call(o,n[s],s,e)},goog.array.forEachRight=function(e,t,o){var r=e.length,n=goog.isString(e)?e.split(""):e;for(--r;0<=r;--r)r in n&&t.call(o,n[r],r,e)},goog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.filter)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.filter.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=[],s=0,i=goog.isString(e)?e.split(""):e,a=0;a<r;a++)if(a in i){var g=i[a];t.call(o,g,a,e)&&(n[s++]=g)}return n},goog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.map)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.map.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=Array(r),s=goog.isString(e)?e.split(""):e,i=0;i<r;i++)i in s&&(n[i]=t.call(o,s[i],i,e));return n},goog.array.reduce=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduce)?function(e,t,o,r){return goog.asserts.assert(null!=e.length),r&&(t=goog.bind(t,r)),Array.prototype.reduce.call(e,t,o)}:function(e,t,o,r){var n=o;return goog.array.forEach(e,(function(o,s){n=t.call(r,n,o,s,e)})),n},goog.array.reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduceRight)?function(e,t,o,r){return goog.asserts.assert(null!=e.length),goog.asserts.assert(null!=t),r&&(t=goog.bind(t,r)),Array.prototype.reduceRight.call(e,t,o)}:function(e,t,o,r){var n=o;return goog.array.forEachRight(e,(function(o,s){n=t.call(r,n,o,s,e)})),n},goog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.some)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.some.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)if(s in n&&t.call(o,n[s],s,e))return!0;return!1},goog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.every)?function(e,t,o){return goog.asserts.assert(null!=e.length),Array.prototype.every.call(e,t,o)}:function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)if(s in n&&!t.call(o,n[s],s,e))return!1;return!0},goog.array.count=function(e,t,o){var r=0;return goog.array.forEach(e,(function(e,n,s){t.call(o,e,n,s)&&++r}),o),r},goog.array.find=function(e,t,o){return 0>(t=goog.array.findIndex(e,t,o))?null:goog.isString(e)?e.charAt(t):e[t]},goog.array.findIndex=function(e,t,o){for(var r=e.length,n=goog.isString(e)?e.split(""):e,s=0;s<r;s++)if(s in n&&t.call(o,n[s],s,e))return s;return-1},goog.array.findRight=function(e,t,o){return 0>(t=goog.array.findIndexRight(e,t,o))?null:goog.isString(e)?e.charAt(t):e[t]},goog.array.findIndexRight=function(e,t,o){var r=e.length,n=goog.isString(e)?e.split(""):e;for(--r;0<=r;r--)if(r in n&&t.call(o,n[r],r,e))return r;return-1},goog.array.contains=function(e,t){return 0<=goog.array.indexOf(e,t)},goog.array.isEmpty=function(e){return 0==e.length},goog.array.clear=function(e){if(!goog.isArray(e))for(var t=e.length-1;0<=t;t--)delete e[t];e.length=0},goog.array.insert=function(e,t){goog.array.contains(e,t)||e.push(t)},goog.array.insertAt=function(e,t,o){goog.array.splice(e,o,0,t)},goog.array.insertArrayAt=function(e,t,o){goog.partial(goog.array.splice,e,o,0).apply(null,t)},goog.array.insertBefore=function(e,t,o){var r;2==arguments.length||0>(r=goog.array.indexOf(e,o))?e.push(t):goog.array.insertAt(e,t,r)},goog.array.remove=function(e,t){var o;return(o=0<=(t=goog.array.indexOf(e,t)))&&goog.array.removeAt(e,t),o},goog.array.removeLast=function(e,t){return 0<=(t=goog.array.lastIndexOf(e,t))&&(goog.array.removeAt(e,t),!0)},goog.array.removeAt=function(e,t){return goog.asserts.assert(null!=e.length),1==Array.prototype.splice.call(e,t,1).length},goog.array.removeIf=function(e,t,o){return 0<=(t=goog.array.findIndex(e,t,o))&&(goog.array.removeAt(e,t),!0)},goog.array.removeAllIf=function(e,t,o){var r=0;return goog.array.forEachRight(e,(function(n,s){t.call(o,n,s,e)&&goog.array.removeAt(e,s)&&r++})),r},goog.array.concat=function(e){return Array.prototype.concat.apply([],arguments)},goog.array.join=function(e){return Array.prototype.concat.apply([],arguments)},goog.array.toArray=function(e){var t=e.length;if(0<t){for(var o=Array(t),r=0;r<t;r++)o[r]=e[r];return o}return[]},goog.array.clone=goog.array.toArray,goog.array.extend=function(e,t){for(var o=1;o<arguments.length;o++){var r=arguments[o];if(goog.isArrayLike(r)){var n=e.length||0,s=r.length||0;e.length=n+s;for(var i=0;i<s;i++)e[n+i]=r[i]}else e.push(r)}},goog.array.splice=function(e,t,o,r){return goog.asserts.assert(null!=e.length),Array.prototype.splice.apply(e,goog.array.slice(arguments,1))},goog.array.slice=function(e,t,o){return goog.asserts.assert(null!=e.length),2>=arguments.length?Array.prototype.slice.call(e,t):Array.prototype.slice.call(e,t,o)},goog.array.removeDuplicates=function(e,t,o){t=t||e;var r=function(e){return goog.isObject(e)?"o"+goog.getUid(e):(typeof e).charAt(0)+e};o=o||r,r={};for(var n=0,s=0;s<e.length;){var i=e[s++],a=o(i);Object.prototype.hasOwnProperty.call(r,a)||(r[a]=!0,t[n++]=i)}t.length=n},goog.array.binarySearch=function(e,t,o){return goog.array.binarySearch_(e,o||goog.array.defaultCompare,!1,t)},goog.array.binarySelect=function(e,t,o){return goog.array.binarySearch_(e,t,!0,void 0,o)},goog.array.binarySearch_=function(e,t,o,r,n){for(var s,i=0,a=e.length;i<a;){var g=i+a>>1,p=o?t.call(n,e[g],g,e):t(r,e[g]);0<p?i=g+1:(a=g,s=!p)}return s?i:~i},goog.array.sort=function(e,t){e.sort(t||goog.array.defaultCompare)},goog.array.stableSort=function(e,t){for(var o=Array(e.length),r=0;r<e.length;r++)o[r]={index:r,value:e[r]};var n=t||goog.array.defaultCompare;for(goog.array.sort(o,(function(e,t){return n(e.value,t.value)||e.index-t.index})),r=0;r<e.length;r++)e[r]=o[r].value},goog.array.sortByKey=function(e,t,o){var r=o||goog.array.defaultCompare;goog.array.sort(e,(function(e,o){return r(t(e),t(o))}))},goog.array.sortObjectsByKey=function(e,t,o){goog.array.sortByKey(e,(function(e){return e[t]}),o)},goog.array.isSorted=function(e,t,o){t=t||goog.array.defaultCompare;for(var r=1;r<e.length;r++){var n=t(e[r-1],e[r]);if(0<n||0==n&&o)return!1}return!0},goog.array.equals=function(e,t,o){if(!goog.isArrayLike(e)||!goog.isArrayLike(t)||e.length!=t.length)return!1;var r=e.length;o=o||goog.array.defaultCompareEquality;for(var n=0;n<r;n++)if(!o(e[n],t[n]))return!1;return!0},goog.array.compare3=function(e,t,o){o=o||goog.array.defaultCompare;for(var r=Math.min(e.length,t.length),n=0;n<r;n++){var s=o(e[n],t[n]);if(0!=s)return s}return goog.array.defaultCompare(e.length,t.length)},goog.array.defaultCompare=function(e,t){return e>t?1:e<t?-1:0},goog.array.inverseDefaultCompare=function(e,t){return-goog.array.defaultCompare(e,t)},goog.array.defaultCompareEquality=function(e,t){return e===t},goog.array.binaryInsert=function(e,t,o){return 0>(o=goog.array.binarySearch(e,t,o))&&(goog.array.insertAt(e,t,-(o+1)),!0)},goog.array.binaryRemove=function(e,t,o){return 0<=(t=goog.array.binarySearch(e,t,o))&&goog.array.removeAt(e,t)},goog.array.bucket=function(e,t,o){for(var r={},n=0;n<e.length;n++){var s=e[n],i=t.call(o,s,n,e);goog.isDef(i)&&(r[i]||(r[i]=[])).push(s)}return r},goog.array.toObject=function(e,t,o){var r={};return goog.array.forEach(e,(function(n,s){r[t.call(o,n,s,e)]=n})),r},goog.array.range=function(e,t,o){var r=[],n=0,s=e;if(void 0!==t&&(n=e,s=t),0>(o=o||1)*(s-n))return[];if(0<o)for(e=n;e<s;e+=o)r.push(e);else for(e=n;e>s;e+=o)r.push(e);return r},goog.array.repeat=function(e,t){for(var o=[],r=0;r<t;r++)o[r]=e;return o},goog.array.flatten=function(e){for(var t=[],o=0;o<arguments.length;o++){var r=arguments[o];if(goog.isArray(r))for(var n=0;n<r.length;n+=8192){var s=goog.array.slice(r,n,n+8192);s=goog.array.flatten.apply(null,s);for(var i=0;i<s.length;i++)t.push(s[i])}else t.push(r)}return t},goog.array.rotate=function(e,t){return goog.asserts.assert(null!=e.length),e.length&&(0<(t%=e.length)?Array.prototype.unshift.apply(e,e.splice(-t,t)):0>t&&Array.prototype.push.apply(e,e.splice(0,-t))),e},goog.array.moveItem=function(e,t,o){goog.asserts.assert(0<=t&&t<e.length),goog.asserts.assert(0<=o&&o<e.length),t=Array.prototype.splice.call(e,t,1),Array.prototype.splice.call(e,o,0,t[0])},goog.array.zip=function(e){if(!arguments.length)return[];for(var t=[],o=arguments[0].length,r=1;r<arguments.length;r++)arguments[r].length<o&&(o=arguments[r].length);for(r=0;r<o;r++){for(var n=[],s=0;s<arguments.length;s++)n.push(arguments[s][r]);t.push(n)}return t},goog.array.shuffle=function(e,t){t=t||Math.random;for(var o=e.length-1;0<o;o--){var r=Math.floor(t()*(o+1)),n=e[o];e[o]=e[r],e[r]=n}},goog.array.copyByIndex=function(e,t){var o=[];return goog.array.forEach(t,(function(t){o.push(e[t])})),o},goog.array.concatMap=function(e,t,o){return goog.array.concat.apply([],goog.array.map(e,t,o))},goog.crypt={},goog.crypt.stringToByteArray=function(e){for(var t=[],o=0,r=0;r<e.length;r++){var n=e.charCodeAt(r);255<n&&(t[o++]=255&n,n>>=8),t[o++]=n}return t},goog.crypt.byteArrayToString=function(e){if(8192>=e.length)return String.fromCharCode.apply(null,e);for(var t="",o=0;o<e.length;o+=8192){var r=goog.array.slice(e,o,o+8192);t+=String.fromCharCode.apply(null,r)}return t},goog.crypt.byteArrayToHex=function(e,t){return goog.array.map(e,(function(e){return 1<(e=e.toString(16)).length?e:"0"+e})).join(t||"")},goog.crypt.hexToByteArray=function(e){goog.asserts.assert(0==e.length%2,"Key string length must be multiple of 2");for(var t=[],o=0;o<e.length;o+=2)t.push(parseInt(e.substring(o,o+2),16));return t},goog.crypt.stringToUtf8ByteArray=function(e){for(var t=[],o=0,r=0;r<e.length;r++){var n=e.charCodeAt(r);128>n?t[o++]=n:(2048>n?t[o++]=n>>6|192:(55296==(64512&n)&&r+1<e.length&&56320==(64512&e.charCodeAt(r+1))?(n=65536+((1023&n)<<10)+(1023&e.charCodeAt(++r)),t[o++]=n>>18|240,t[o++]=n>>12&63|128):t[o++]=n>>12|224,t[o++]=n>>6&63|128),t[o++]=63&n|128)}return t},goog.crypt.utf8ByteArrayToString=function(e){for(var t=[],o=0,r=0;o<e.length;){var n=e[o++];if(128>n)t[r++]=String.fromCharCode(n);else if(191<n&&224>n){var s=e[o++];t[r++]=String.fromCharCode((31&n)<<6|63&s)}else if(239<n&&365>n){s=e[o++];var i=e[o++];n=((7&n)<<18|(63&s)<<12|(63&i)<<6|63&e[o++])-65536,t[r++]=String.fromCharCode(55296+(n>>10)),t[r++]=String.fromCharCode(56320+(1023&n))}else s=e[o++],i=e[o++],t[r++]=String.fromCharCode((15&n)<<12|(63&s)<<6|63&i)}return t.join("")},goog.crypt.xorByteArray=function(e,t){goog.asserts.assert(e.length==t.length,"XOR array lengths must match");for(var o=[],r=0;r<e.length;r++)o.push(e[r]^t[r]);return o},goog.dom.asserts={},goog.dom.asserts.assertIsLocation=function(e){if(goog.asserts.ENABLE_ASSERTS){var t=goog.dom.asserts.getWindow_(e);t&&(!e||!(e instanceof t.Location)&&e instanceof t.Element)&&goog.asserts.fail("Argument is not a Location (or a non-Element mock); got: %s",goog.dom.asserts.debugStringForType_(e))}return e},goog.dom.asserts.assertIsElementType_=function(e,t){if(goog.asserts.ENABLE_ASSERTS){var o=goog.dom.asserts.getWindow_(e);o&&void 0!==o[t]&&(e&&(e instanceof o[t]||!(e instanceof o.Location||e instanceof o.Element))||goog.asserts.fail("Argument is not a %s (or a non-Element, non-Location mock); got: %s",t,goog.dom.asserts.debugStringForType_(e)))}return e},goog.dom.asserts.assertIsHTMLAnchorElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLAnchorElement")},goog.dom.asserts.assertIsHTMLButtonElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLButtonElement")},goog.dom.asserts.assertIsHTMLLinkElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLLinkElement")},goog.dom.asserts.assertIsHTMLImageElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLImageElement")},goog.dom.asserts.assertIsHTMLAudioElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLAudioElement")},goog.dom.asserts.assertIsHTMLVideoElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLVideoElement")},goog.dom.asserts.assertIsHTMLInputElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLInputElement")},goog.dom.asserts.assertIsHTMLTextAreaElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLTextAreaElement")},goog.dom.asserts.assertIsHTMLCanvasElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLCanvasElement")},goog.dom.asserts.assertIsHTMLEmbedElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLEmbedElement")},goog.dom.asserts.assertIsHTMLFormElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLFormElement")},goog.dom.asserts.assertIsHTMLFrameElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLFrameElement")},goog.dom.asserts.assertIsHTMLIFrameElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLIFrameElement")},goog.dom.asserts.assertIsHTMLObjectElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLObjectElement")},goog.dom.asserts.assertIsHTMLScriptElement=function(e){return goog.dom.asserts.assertIsElementType_(e,"HTMLScriptElement")},goog.dom.asserts.debugStringForType_=function(e){if(!goog.isObject(e))return void 0===e?"undefined":null===e?"null":typeof e;try{return e.constructor.displayName||e.constructor.name||Object.prototype.toString.call(e)}catch(e){return"<object could not be stringified>"}},goog.dom.asserts.getWindow_=function(e){try{var t=e&&e.ownerDocument,o=t&&(t.defaultView||t.parentWindow);if((o=o||goog.global).Element&&o.Location)return o}catch(e){}return null},goog.functions={},goog.functions.constant=function(e){return function(){return e}},goog.functions.FALSE=function(){return!1},goog.functions.TRUE=function(){return!0},goog.functions.NULL=function(){return null},goog.functions.identity=function(e,t){return e},goog.functions.error=function(e){return function(){throw Error(e)}},goog.functions.fail=function(e){return function(){throw e}},goog.functions.lock=function(e,t){return t=t||0,function(){return e.apply(this,Array.prototype.slice.call(arguments,0,t))}},goog.functions.nth=function(e){return function(){return arguments[e]}},goog.functions.partialRight=function(e,t){var o=Array.prototype.slice.call(arguments,1);return function(){var t=Array.prototype.slice.call(arguments);return t.push.apply(t,o),e.apply(this,t)}},goog.functions.withReturnValue=function(e,t){return goog.functions.sequence(e,goog.functions.constant(t))},goog.functions.equalTo=function(e,t){return function(o){return t?e==o:e===o}},goog.functions.compose=function(e,t){var o=arguments,r=o.length;return function(){var e;r&&(e=o[r-1].apply(this,arguments));for(var t=r-2;0<=t;t--)e=o[t].call(this,e);return e}},goog.functions.sequence=function(e){var t=arguments,o=t.length;return function(){for(var e,r=0;r<o;r++)e=t[r].apply(this,arguments);return e}},goog.functions.and=function(e){var t=arguments,o=t.length;return function(){for(var e=0;e<o;e++)if(!t[e].apply(this,arguments))return!1;return!0}},goog.functions.or=function(e){var t=arguments,o=t.length;return function(){for(var e=0;e<o;e++)if(t[e].apply(this,arguments))return!0;return!1}},goog.functions.not=function(e){return function(){return!e.apply(this,arguments)}},goog.functions.create=function(e,t){var o=function(){};return o.prototype=e.prototype,o=new o,e.apply(o,Array.prototype.slice.call(arguments,1)),o},goog.functions.CACHE_RETURN_VALUE=!0,goog.functions.cacheReturnValue=function(e){var t,o=!1;return function(){return goog.functions.CACHE_RETURN_VALUE?(o||(t=e(),o=!0),t):e()}},goog.functions.once=function(e){var t=e;return function(){if(t){var e=t;t=null,e()}}},goog.functions.debounce=function(e,t,o){var r=0;return function(n){goog.global.clearTimeout(r);var s=arguments;r=goog.global.setTimeout((function(){e.apply(o,s)}),t)}},goog.functions.throttle=function(e,t,o){var r=0,n=!1,s=[],i=function(){r=0,n&&(n=!1,a())},a=function(){r=goog.global.setTimeout(i,t),e.apply(o,s)};return function(e){s=arguments,r?n=!0:a()}},goog.functions.rateLimit=function(e,t,o){var r=0,n=function(){r=0};return function(s){r||(r=goog.global.setTimeout(n,t),e.apply(o,arguments))}},goog.dom.HtmlElement=function(){},goog.dom.TagName=function(e){this.tagName_=e},goog.dom.TagName.prototype.toString=function(){return this.tagName_},goog.dom.TagName.A=new goog.dom.TagName("A"),goog.dom.TagName.ABBR=new goog.dom.TagName("ABBR"),goog.dom.TagName.ACRONYM=new goog.dom.TagName("ACRONYM"),goog.dom.TagName.ADDRESS=new goog.dom.TagName("ADDRESS"),goog.dom.TagName.APPLET=new goog.dom.TagName("APPLET"),goog.dom.TagName.AREA=new goog.dom.TagName("AREA"),goog.dom.TagName.ARTICLE=new goog.dom.TagName("ARTICLE"),goog.dom.TagName.ASIDE=new goog.dom.TagName("ASIDE"),goog.dom.TagName.AUDIO=new goog.dom.TagName("AUDIO"),goog.dom.TagName.B=new goog.dom.TagName("B"),goog.dom.TagName.BASE=new goog.dom.TagName("BASE"),goog.dom.TagName.BASEFONT=new goog.dom.TagName("BASEFONT"),goog.dom.TagName.BDI=new goog.dom.TagName("BDI"),goog.dom.TagName.BDO=new goog.dom.TagName("BDO"),goog.dom.TagName.BIG=new goog.dom.TagName("BIG"),goog.dom.TagName.BLOCKQUOTE=new goog.dom.TagName("BLOCKQUOTE"),goog.dom.TagName.BODY=new goog.dom.TagName("BODY"),goog.dom.TagName.BR=new goog.dom.TagName("BR"),goog.dom.TagName.BUTTON=new goog.dom.TagName("BUTTON"),goog.dom.TagName.CANVAS=new goog.dom.TagName("CANVAS"),goog.dom.TagName.CAPTION=new goog.dom.TagName("CAPTION"),goog.dom.TagName.CENTER=new goog.dom.TagName("CENTER"),goog.dom.TagName.CITE=new goog.dom.TagName("CITE"),goog.dom.TagName.CODE=new goog.dom.TagName("CODE"),goog.dom.TagName.COL=new goog.dom.TagName("COL"),goog.dom.TagName.COLGROUP=new goog.dom.TagName("COLGROUP"),goog.dom.TagName.COMMAND=new goog.dom.TagName("COMMAND"),goog.dom.TagName.DATA=new goog.dom.TagName("DATA"),goog.dom.TagName.DATALIST=new goog.dom.TagName("DATALIST"),goog.dom.TagName.DD=new goog.dom.TagName("DD"),goog.dom.TagName.DEL=new goog.dom.TagName("DEL"),goog.dom.TagName.DETAILS=new goog.dom.TagName("DETAILS"),goog.dom.TagName.DFN=new goog.dom.TagName("DFN"),goog.dom.TagName.DIALOG=new goog.dom.TagName("DIALOG"),goog.dom.TagName.DIR=new goog.dom.TagName("DIR"),goog.dom.TagName.DIV=new goog.dom.TagName("DIV"),goog.dom.TagName.DL=new goog.dom.TagName("DL"),goog.dom.TagName.DT=new goog.dom.TagName("DT"),goog.dom.TagName.EM=new goog.dom.TagName("EM"),goog.dom.TagName.EMBED=new goog.dom.TagName("EMBED"),goog.dom.TagName.FIELDSET=new goog.dom.TagName("FIELDSET"),goog.dom.TagName.FIGCAPTION=new goog.dom.TagName("FIGCAPTION"),goog.dom.TagName.FIGURE=new goog.dom.TagName("FIGURE"),goog.dom.TagName.FONT=new goog.dom.TagName("FONT"),goog.dom.TagName.FOOTER=new goog.dom.TagName("FOOTER"),goog.dom.TagName.FORM=new goog.dom.TagName("FORM"),goog.dom.TagName.FRAME=new goog.dom.TagName("FRAME"),goog.dom.TagName.FRAMESET=new goog.dom.TagName("FRAMESET"),goog.dom.TagName.H1=new goog.dom.TagName("H1"),goog.dom.TagName.H2=new goog.dom.TagName("H2"),goog.dom.TagName.H3=new goog.dom.TagName("H3"),goog.dom.TagName.H4=new goog.dom.TagName("H4"),goog.dom.TagName.H5=new goog.dom.TagName("H5"),goog.dom.TagName.H6=new goog.dom.TagName("H6"),goog.dom.TagName.HEAD=new goog.dom.TagName("HEAD"),goog.dom.TagName.HEADER=new goog.dom.TagName("HEADER"),goog.dom.TagName.HGROUP=new goog.dom.TagName("HGROUP"),goog.dom.TagName.HR=new goog.dom.TagName("HR"),goog.dom.TagName.HTML=new goog.dom.TagName("HTML"),goog.dom.TagName.I=new goog.dom.TagName("I"),goog.dom.TagName.IFRAME=new goog.dom.TagName("IFRAME"),goog.dom.TagName.IMG=new goog.dom.TagName("IMG"),goog.dom.TagName.INPUT=new goog.dom.TagName("INPUT"),goog.dom.TagName.INS=new goog.dom.TagName("INS"),goog.dom.TagName.ISINDEX=new goog.dom.TagName("ISINDEX"),goog.dom.TagName.KBD=new goog.dom.TagName("KBD"),goog.dom.TagName.KEYGEN=new goog.dom.TagName("KEYGEN"),goog.dom.TagName.LABEL=new goog.dom.TagName("LABEL"),goog.dom.TagName.LEGEND=new goog.dom.TagName("LEGEND"),goog.dom.TagName.LI=new goog.dom.TagName("LI"),goog.dom.TagName.LINK=new goog.dom.TagName("LINK"),goog.dom.TagName.MAIN=new goog.dom.TagName("MAIN"),goog.dom.TagName.MAP=new goog.dom.TagName("MAP"),goog.dom.TagName.MARK=new goog.dom.TagName("MARK"),goog.dom.TagName.MATH=new goog.dom.TagName("MATH"),goog.dom.TagName.MENU=new goog.dom.TagName("MENU"),goog.dom.TagName.MENUITEM=new goog.dom.TagName("MENUITEM"),goog.dom.TagName.META=new goog.dom.TagName("META"),goog.dom.TagName.METER=new goog.dom.TagName("METER"),goog.dom.TagName.NAV=new goog.dom.TagName("NAV"),goog.dom.TagName.NOFRAMES=new goog.dom.TagName("NOFRAMES"),goog.dom.TagName.NOSCRIPT=new goog.dom.TagName("NOSCRIPT"),goog.dom.TagName.OBJECT=new goog.dom.TagName("OBJECT"),goog.dom.TagName.OL=new goog.dom.TagName("OL"),goog.dom.TagName.OPTGROUP=new goog.dom.TagName("OPTGROUP"),goog.dom.TagName.OPTION=new goog.dom.TagName("OPTION"),goog.dom.TagName.OUTPUT=new goog.dom.TagName("OUTPUT"),goog.dom.TagName.P=new goog.dom.TagName("P"),goog.dom.TagName.PARAM=new goog.dom.TagName("PARAM"),goog.dom.TagName.PICTURE=new goog.dom.TagName("PICTURE"),goog.dom.TagName.PRE=new goog.dom.TagName("PRE"),goog.dom.TagName.PROGRESS=new goog.dom.TagName("PROGRESS"),goog.dom.TagName.Q=new goog.dom.TagName("Q"),goog.dom.TagName.RP=new goog.dom.TagName("RP"),goog.dom.TagName.RT=new goog.dom.TagName("RT"),goog.dom.TagName.RTC=new goog.dom.TagName("RTC"),goog.dom.TagName.RUBY=new goog.dom.TagName("RUBY"),goog.dom.TagName.S=new goog.dom.TagName("S"),goog.dom.TagName.SAMP=new goog.dom.TagName("SAMP"),goog.dom.TagName.SCRIPT=new goog.dom.TagName("SCRIPT"),goog.dom.TagName.SECTION=new goog.dom.TagName("SECTION"),goog.dom.TagName.SELECT=new goog.dom.TagName("SELECT"),goog.dom.TagName.SMALL=new goog.dom.TagName("SMALL"),goog.dom.TagName.SOURCE=new goog.dom.TagName("SOURCE"),goog.dom.TagName.SPAN=new goog.dom.TagName("SPAN"),goog.dom.TagName.STRIKE=new goog.dom.TagName("STRIKE"),goog.dom.TagName.STRONG=new goog.dom.TagName("STRONG"),goog.dom.TagName.STYLE=new goog.dom.TagName("STYLE"),goog.dom.TagName.SUB=new goog.dom.TagName("SUB"),goog.dom.TagName.SUMMARY=new goog.dom.TagName("SUMMARY"),goog.dom.TagName.SUP=new goog.dom.TagName("SUP"),goog.dom.TagName.SVG=new goog.dom.TagName("SVG"),goog.dom.TagName.TABLE=new goog.dom.TagName("TABLE"),goog.dom.TagName.TBODY=new goog.dom.TagName("TBODY"),goog.dom.TagName.TD=new goog.dom.TagName("TD"),goog.dom.TagName.TEMPLATE=new goog.dom.TagName("TEMPLATE"),goog.dom.TagName.TEXTAREA=new goog.dom.TagName("TEXTAREA"),goog.dom.TagName.TFOOT=new goog.dom.TagName("TFOOT"),goog.dom.TagName.TH=new goog.dom.TagName("TH"),goog.dom.TagName.THEAD=new goog.dom.TagName("THEAD"),goog.dom.TagName.TIME=new goog.dom.TagName("TIME"),goog.dom.TagName.TITLE=new goog.dom.TagName("TITLE"),goog.dom.TagName.TR=new goog.dom.TagName("TR"),goog.dom.TagName.TRACK=new goog.dom.TagName("TRACK"),goog.dom.TagName.TT=new goog.dom.TagName("TT"),goog.dom.TagName.U=new goog.dom.TagName("U"),goog.dom.TagName.UL=new goog.dom.TagName("UL"),goog.dom.TagName.VAR=new goog.dom.TagName("VAR"),goog.dom.TagName.VIDEO=new goog.dom.TagName("VIDEO"),goog.dom.TagName.WBR=new goog.dom.TagName("WBR"),goog.dom.tags={},goog.dom.tags.VOID_TAGS_={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},goog.dom.tags.isVoidTag=function(e){return!0===goog.dom.tags.VOID_TAGS_[e]},goog.html={},goog.html.trustedtypes={},goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+"#html"):null,goog.string={},goog.string.TypedString=function(){},goog.string.Const=function(e,t){this.stringConstValueWithSecurityContract__googStringSecurityPrivate_=e===goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_&&t||"",this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_=goog.string.Const.TYPE_MARKER_},goog.string.Const.prototype.implementsGoogStringTypedString=!0,goog.string.Const.prototype.getTypedStringValue=function(){return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_},goog.string.Const.prototype.toString=function(){return"Const{"+this.stringConstValueWithSecurityContract__googStringSecurityPrivate_+"}"},goog.string.Const.unwrap=function(e){return e instanceof goog.string.Const&&e.constructor===goog.string.Const&&e.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_===goog.string.Const.TYPE_MARKER_?e.stringConstValueWithSecurityContract__googStringSecurityPrivate_:(goog.asserts.fail("expected object of type Const, got \'"+e+"\'"),"type_error:Const")},goog.string.Const.from=function(e){return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_,e)},goog.string.Const.TYPE_MARKER_={},goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_={},goog.string.Const.EMPTY=goog.string.Const.from(""),goog.html.SafeScript=function(){this.privateDoNotAccessOrElseSafeScriptWrappedValue_="",this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeScript.prototype.implementsGoogStringTypedString=!0,goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeScript.fromConstant=function(e){return 0===(e=goog.string.Const.unwrap(e)).length?goog.html.SafeScript.EMPTY:goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeScript.fromConstantAndArgs=function(e,t){for(var o=[],r=1;r<arguments.length;r++)o.push(goog.html.SafeScript.stringify_(arguments[r]));return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("("+goog.string.Const.unwrap(e)+")("+o.join(", ")+");")},goog.html.SafeScript.fromJson=function(e){return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(e))},goog.html.SafeScript.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString()},goog.DEBUG&&(goog.html.SafeScript.prototype.toString=function(){return"SafeScript{"+this.privateDoNotAccessOrElseSafeScriptWrappedValue_+"}"}),goog.html.SafeScript.unwrap=function(e){return goog.html.SafeScript.unwrapTrustedScript(e).toString()},goog.html.SafeScript.unwrapTrustedScript=function(e){return e instanceof goog.html.SafeScript&&e.constructor===goog.html.SafeScript&&e.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeScriptWrappedValue_:(goog.asserts.fail("expected object of type SafeScript, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeScript")},goog.html.SafeScript.stringify_=function(e){return JSON.stringify(e).replace(/</g,"\\\\x3c")},goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse=function(e){return(new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(e)},goog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(e):e,this},goog.html.SafeScript.EMPTY=goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(""),goog.fs={},goog.fs.url={},goog.fs.url.createObjectUrl=function(e){return goog.fs.url.getUrlObject_().createObjectURL(e)},goog.fs.url.revokeObjectUrl=function(e){goog.fs.url.getUrlObject_().revokeObjectURL(e)},goog.fs.url.getUrlObject_=function(){var e=goog.fs.url.findUrlObject_();if(null!=e)return e;throw Error("This browser doesn\'t seem to support blob URLs")},goog.fs.url.findUrlObject_=function(){return goog.isDef(goog.global.URL)&&goog.isDef(goog.global.URL.createObjectURL)?goog.global.URL:goog.isDef(goog.global.webkitURL)&&goog.isDef(goog.global.webkitURL.createObjectURL)?goog.global.webkitURL:goog.isDef(goog.global.createObjectURL)?goog.global:null},goog.fs.url.browserSupportsObjectUrls=function(){return null!=goog.fs.url.findUrlObject_()},goog.i18n={},goog.i18n.bidi={},goog.i18n.bidi.FORCE_RTL=!1,goog.i18n.bidi.IS_RTL=goog.i18n.bidi.FORCE_RTL||("ar"==goog.LOCALE.substring(0,2).toLowerCase()||"fa"==goog.LOCALE.substring(0,2).toLowerCase()||"he"==goog.LOCALE.substring(0,2).toLowerCase()||"iw"==goog.LOCALE.substring(0,2).toLowerCase()||"ps"==goog.LOCALE.substring(0,2).toLowerCase()||"sd"==goog.LOCALE.substring(0,2).toLowerCase()||"ug"==goog.LOCALE.substring(0,2).toLowerCase()||"ur"==goog.LOCALE.substring(0,2).toLowerCase()||"yi"==goog.LOCALE.substring(0,2).toLowerCase())&&(2==goog.LOCALE.length||"-"==goog.LOCALE.substring(2,3)||"_"==goog.LOCALE.substring(2,3))||3<=goog.LOCALE.length&&"ckb"==goog.LOCALE.substring(0,3).toLowerCase()&&(3==goog.LOCALE.length||"-"==goog.LOCALE.substring(3,4)||"_"==goog.LOCALE.substring(3,4))||7<=goog.LOCALE.length&&("-"==goog.LOCALE.substring(2,3)||"_"==goog.LOCALE.substring(2,3))&&("adlm"==goog.LOCALE.substring(3,7).toLowerCase()||"arab"==goog.LOCALE.substring(3,7).toLowerCase()||"hebr"==goog.LOCALE.substring(3,7).toLowerCase()||"nkoo"==goog.LOCALE.substring(3,7).toLowerCase()||"rohg"==goog.LOCALE.substring(3,7).toLowerCase()||"thaa"==goog.LOCALE.substring(3,7).toLowerCase())||8<=goog.LOCALE.length&&("-"==goog.LOCALE.substring(3,4)||"_"==goog.LOCALE.substring(3,4))&&("adlm"==goog.LOCALE.substring(4,8).toLowerCase()||"arab"==goog.LOCALE.substring(4,8).toLowerCase()||"hebr"==goog.LOCALE.substring(4,8).toLowerCase()||"nkoo"==goog.LOCALE.substring(4,8).toLowerCase()||"rohg"==goog.LOCALE.substring(4,8).toLowerCase()||"thaa"==goog.LOCALE.substring(4,8).toLowerCase()),goog.i18n.bidi.Format={LRE:"‪",RLE:"‫",PDF:"‬",LRM:"‎",RLM:"‏"},goog.i18n.bidi.Dir={LTR:1,RTL:-1,NEUTRAL:0},goog.i18n.bidi.RIGHT="right",goog.i18n.bidi.LEFT="left",goog.i18n.bidi.I18N_RIGHT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.LEFT:goog.i18n.bidi.RIGHT,goog.i18n.bidi.I18N_LEFT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,goog.i18n.bidi.toDir=function(e,t){return"number"==typeof e?0<e?goog.i18n.bidi.Dir.LTR:0>e?goog.i18n.bidi.Dir.RTL:t?null:goog.i18n.bidi.Dir.NEUTRAL:null==e?null:e?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR},goog.i18n.bidi.ltrChars_="A-Za-zÀ-ÖØ-öø-ʸ̀-֐ऀ-῿‎Ⰰ-\\ud801\\ud804-\\ud839\\ud83c-\\udbff豈-﬜︀-﹯﻽-￿",goog.i18n.bidi.rtlChars_="֑-ۯۺ-ࣿ‏\\ud802-\\ud803\\ud83a-\\ud83bיִ-﷿ﹰ-ﻼ",goog.i18n.bidi.htmlSkipReg_=/<[^>]*>|&[^;]+;/g,goog.i18n.bidi.stripHtmlIfNeeded_=function(e,t){return t?e.replace(goog.i18n.bidi.htmlSkipReg_,""):e},goog.i18n.bidi.rtlCharReg_=new RegExp("["+goog.i18n.bidi.rtlChars_+"]"),goog.i18n.bidi.ltrCharReg_=new RegExp("["+goog.i18n.bidi.ltrChars_+"]"),goog.i18n.bidi.hasAnyRtl=function(e,t){return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.hasRtlChar=goog.i18n.bidi.hasAnyRtl,goog.i18n.bidi.hasAnyLtr=function(e,t){return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.ltrRe_=new RegExp("^["+goog.i18n.bidi.ltrChars_+"]"),goog.i18n.bidi.rtlRe_=new RegExp("^["+goog.i18n.bidi.rtlChars_+"]"),goog.i18n.bidi.isRtlChar=function(e){return goog.i18n.bidi.rtlRe_.test(e)},goog.i18n.bidi.isLtrChar=function(e){return goog.i18n.bidi.ltrRe_.test(e)},goog.i18n.bidi.isNeutralChar=function(e){return!goog.i18n.bidi.isLtrChar(e)&&!goog.i18n.bidi.isRtlChar(e)},goog.i18n.bidi.ltrDirCheckRe_=new RegExp("^[^"+goog.i18n.bidi.rtlChars_+"]*["+goog.i18n.bidi.ltrChars_+"]"),goog.i18n.bidi.rtlDirCheckRe_=new RegExp("^[^"+goog.i18n.bidi.ltrChars_+"]*["+goog.i18n.bidi.rtlChars_+"]"),goog.i18n.bidi.startsWithRtl=function(e,t){return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isRtlText=goog.i18n.bidi.startsWithRtl,goog.i18n.bidi.startsWithLtr=function(e,t){return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isLtrText=goog.i18n.bidi.startsWithLtr,goog.i18n.bidi.isRequiredLtrRe_=/^http:\\/\\/.*/,goog.i18n.bidi.isNeutralText=function(e,t){return e=goog.i18n.bidi.stripHtmlIfNeeded_(e,t),goog.i18n.bidi.isRequiredLtrRe_.test(e)||!goog.i18n.bidi.hasAnyLtr(e)&&!goog.i18n.bidi.hasAnyRtl(e)},goog.i18n.bidi.ltrExitDirCheckRe_=new RegExp("["+goog.i18n.bidi.ltrChars_+"][^"+goog.i18n.bidi.rtlChars_+"]*$"),goog.i18n.bidi.rtlExitDirCheckRe_=new RegExp("["+goog.i18n.bidi.rtlChars_+"][^"+goog.i18n.bidi.ltrChars_+"]*$"),goog.i18n.bidi.endsWithLtr=function(e,t){return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isLtrExitText=goog.i18n.bidi.endsWithLtr,goog.i18n.bidi.endsWithRtl=function(e,t){return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(e,t))},goog.i18n.bidi.isRtlExitText=goog.i18n.bidi.endsWithRtl,goog.i18n.bidi.rtlLocalesRe_=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i,goog.i18n.bidi.isRtlLanguage=function(e){return goog.i18n.bidi.rtlLocalesRe_.test(e)},goog.i18n.bidi.bracketGuardTextRe_=/(\\(.*?\\)+)|(\\[.*?\\]+)|(\\{.*?\\}+)|(<.*?>+)/g,goog.i18n.bidi.guardBracketInText=function(e,t){return t=(void 0===t?goog.i18n.bidi.hasAnyRtl(e):t)?goog.i18n.bidi.Format.RLM:goog.i18n.bidi.Format.LRM,e.replace(goog.i18n.bidi.bracketGuardTextRe_,t+"$&"+t)},goog.i18n.bidi.enforceRtlInHtml=function(e){return"<"==e.charAt(0)?e.replace(/<\\w+/,"$& dir=rtl"):"\\n<span dir=rtl>"+e+"</span>"},goog.i18n.bidi.enforceRtlInText=function(e){return goog.i18n.bidi.Format.RLE+e+goog.i18n.bidi.Format.PDF},goog.i18n.bidi.enforceLtrInHtml=function(e){return"<"==e.charAt(0)?e.replace(/<\\w+/,"$& dir=ltr"):"\\n<span dir=ltr>"+e+"</span>"},goog.i18n.bidi.enforceLtrInText=function(e){return goog.i18n.bidi.Format.LRE+e+goog.i18n.bidi.Format.PDF},goog.i18n.bidi.dimensionsRe_=/:\\s*([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)/g,goog.i18n.bidi.leftRe_=/left/gi,goog.i18n.bidi.rightRe_=/right/gi,goog.i18n.bidi.tempRe_=/%%%%/g,goog.i18n.bidi.mirrorCSS=function(e){return e.replace(goog.i18n.bidi.dimensionsRe_,":$1 $4 $3 $2").replace(goog.i18n.bidi.leftRe_,"%%%%").replace(goog.i18n.bidi.rightRe_,goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_,goog.i18n.bidi.RIGHT)},goog.i18n.bidi.doubleQuoteSubstituteRe_=/([\\u0591-\\u05f2])"/g,goog.i18n.bidi.singleQuoteSubstituteRe_=/([\\u0591-\\u05f2])\'/g,goog.i18n.bidi.normalizeHebrewQuote=function(e){return e.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_,"$1״").replace(goog.i18n.bidi.singleQuoteSubstituteRe_,"$1׳")},goog.i18n.bidi.wordSeparatorRe_=/\\s+/,goog.i18n.bidi.hasNumeralsRe_=/[\\d\\u06f0-\\u06f9]/,goog.i18n.bidi.rtlDetectionThreshold_=.4,goog.i18n.bidi.estimateDirection=function(e,t){var o=0,r=0,n=!1;for(e=goog.i18n.bidi.stripHtmlIfNeeded_(e,t).split(goog.i18n.bidi.wordSeparatorRe_),t=0;t<e.length;t++){var s=e[t];goog.i18n.bidi.startsWithRtl(s)?(o++,r++):goog.i18n.bidi.isRequiredLtrRe_.test(s)?n=!0:goog.i18n.bidi.hasAnyLtr(s)?r++:goog.i18n.bidi.hasNumeralsRe_.test(s)&&(n=!0)}return 0==r?n?goog.i18n.bidi.Dir.LTR:goog.i18n.bidi.Dir.NEUTRAL:o/r>goog.i18n.bidi.rtlDetectionThreshold_?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR},goog.i18n.bidi.detectRtlDirectionality=function(e,t){return goog.i18n.bidi.estimateDirection(e,t)==goog.i18n.bidi.Dir.RTL},goog.i18n.bidi.setElementDirAndAlign=function(e,t){e&&(t=goog.i18n.bidi.toDir(t))&&(e.style.textAlign=t==goog.i18n.bidi.Dir.RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,e.dir=t==goog.i18n.bidi.Dir.RTL?"rtl":"ltr")},goog.i18n.bidi.setElementDirByTextDirectionality=function(e,t){switch(goog.i18n.bidi.estimateDirection(t)){case goog.i18n.bidi.Dir.LTR:e.dir="ltr";break;case goog.i18n.bidi.Dir.RTL:e.dir="rtl";break;default:e.removeAttribute("dir")}},goog.i18n.bidi.DirectionalString=function(){},goog.html.TrustedResourceUrl=function(){this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_="",this.trustedURL_=null,this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString=!0,goog.html.TrustedResourceUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString()},goog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString=!0,goog.html.TrustedResourceUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR},goog.html.TrustedResourceUrl.prototype.cloneWithParams=function(e,t){var o=goog.html.TrustedResourceUrl.unwrap(this),r=(o=goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(o))[3]||"";return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(o[1]+goog.html.TrustedResourceUrl.stringifyParams_("?",o[2]||"",e)+goog.html.TrustedResourceUrl.stringifyParams_("#",r,t))},goog.DEBUG&&(goog.html.TrustedResourceUrl.prototype.toString=function(){return"TrustedResourceUrl{"+this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_+"}"}),goog.html.TrustedResourceUrl.unwrap=function(e){return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(e).toString()},goog.html.TrustedResourceUrl.unwrapTrustedScriptURL=function(e){return e instanceof goog.html.TrustedResourceUrl&&e.constructor===goog.html.TrustedResourceUrl&&e.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_:(goog.asserts.fail("expected object of type TrustedResourceUrl, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:TrustedResourceUrl")},goog.html.TrustedResourceUrl.unwrapTrustedURL=function(e){return e.trustedURL_?e.trustedURL_:goog.html.TrustedResourceUrl.unwrap(e)},goog.html.TrustedResourceUrl.format=function(e,t){var o=goog.string.Const.unwrap(e);if(!goog.html.TrustedResourceUrl.BASE_URL_.test(o))throw Error("Invalid TrustedResourceUrl format: "+o);return e=o.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_,(function(e,r){if(!Object.prototype.hasOwnProperty.call(t,r))throw Error(\'Found marker, "\'+r+\'", in format string, "\'+o+\'", but no valid label mapping found in args: \'+JSON.stringify(t));return(e=t[r])instanceof goog.string.Const?goog.string.Const.unwrap(e):encodeURIComponent(String(e))})),goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.TrustedResourceUrl.FORMAT_MARKER_=/%{(\\w+)}/g,goog.html.TrustedResourceUrl.BASE_URL_=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i,goog.html.TrustedResourceUrl.URL_PARAM_PARSER_=/^([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/,goog.html.TrustedResourceUrl.formatWithParams=function(e,t,o,r){return goog.html.TrustedResourceUrl.format(e,t).cloneWithParams(o,r)},goog.html.TrustedResourceUrl.fromConstant=function(e){return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(e))},goog.html.TrustedResourceUrl.fromConstants=function(e){for(var t="",o=0;o<e.length;o++)t+=goog.string.Const.unwrap(e[o]);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(t)},goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse=function(e){var t=new goog.html.TrustedResourceUrl;return t.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(e):e,goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY&&(t.trustedURL_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(e)),t},goog.html.TrustedResourceUrl.stringifyParams_=function(e,t,o){if(null==o)return t;if(goog.isString(o))return o?e+encodeURIComponent(o):"";for(var r in o){var n=o[r];n=goog.isArray(n)?n:[n];for(var s=0;s<n.length;s++){var i=n[s];null!=i&&(t||(t=e),t+=(t.length>e.length?"&":"")+encodeURIComponent(r)+"="+encodeURIComponent(String(i)))}}return t},goog.string.internal={},goog.string.internal.startsWith=function(e,t){return 0==e.lastIndexOf(t,0)},goog.string.internal.endsWith=function(e,t){var o=e.length-t.length;return 0<=o&&e.indexOf(t,o)==o},goog.string.internal.caseInsensitiveStartsWith=function(e,t){return 0==goog.string.internal.caseInsensitiveCompare(t,e.substr(0,t.length))},goog.string.internal.caseInsensitiveEndsWith=function(e,t){return 0==goog.string.internal.caseInsensitiveCompare(t,e.substr(e.length-t.length,t.length))},goog.string.internal.caseInsensitiveEquals=function(e,t){return e.toLowerCase()==t.toLowerCase()},goog.string.internal.isEmptyOrWhitespace=function(e){return/^[\\s\\xa0]*$/.test(e)},goog.string.internal.trim=goog.TRUSTED_SITE&&String.prototype.trim?function(e){return e.trim()}:function(e){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(e)[1]},goog.string.internal.caseInsensitiveCompare=function(e,t){return(e=String(e).toLowerCase())<(t=String(t).toLowerCase())?-1:e==t?0:1},goog.string.internal.newLineToBr=function(e,t){return e.replace(/(\\r\\n|\\r|\\n)/g,t?"<br />":"<br>")},goog.string.internal.htmlEscape=function(e,t){if(t)e=e.replace(goog.string.internal.AMP_RE_,"&amp;").replace(goog.string.internal.LT_RE_,"&lt;").replace(goog.string.internal.GT_RE_,"&gt;").replace(goog.string.internal.QUOT_RE_,"&quot;").replace(goog.string.internal.SINGLE_QUOTE_RE_,"&#39;").replace(goog.string.internal.NULL_RE_,"&#0;");else{if(!goog.string.internal.ALL_RE_.test(e))return e;-1!=e.indexOf("&")&&(e=e.replace(goog.string.internal.AMP_RE_,"&amp;")),-1!=e.indexOf("<")&&(e=e.replace(goog.string.internal.LT_RE_,"&lt;")),-1!=e.indexOf(">")&&(e=e.replace(goog.string.internal.GT_RE_,"&gt;")),-1!=e.indexOf(\'"\')&&(e=e.replace(goog.string.internal.QUOT_RE_,"&quot;")),-1!=e.indexOf("\'")&&(e=e.replace(goog.string.internal.SINGLE_QUOTE_RE_,"&#39;")),-1!=e.indexOf("\\0")&&(e=e.replace(goog.string.internal.NULL_RE_,"&#0;"))}return e},goog.string.internal.AMP_RE_=/&/g,goog.string.internal.LT_RE_=/</g,goog.string.internal.GT_RE_=/>/g,goog.string.internal.QUOT_RE_=/"/g,goog.string.internal.SINGLE_QUOTE_RE_=/\'/g,goog.string.internal.NULL_RE_=/\\x00/g,goog.string.internal.ALL_RE_=/[\\x00&<>"\']/,goog.string.internal.whitespaceEscape=function(e,t){return goog.string.internal.newLineToBr(e.replace(/  /g," &#160;"),t)},goog.string.internal.contains=function(e,t){return-1!=e.indexOf(t)},goog.string.internal.caseInsensitiveContains=function(e,t){return goog.string.internal.contains(e.toLowerCase(),t.toLowerCase())},goog.string.internal.compareVersions=function(e,t){var o=0;e=goog.string.internal.trim(String(e)).split("."),t=goog.string.internal.trim(String(t)).split(".");for(var r=Math.max(e.length,t.length),n=0;0==o&&n<r;n++){var s=e[n]||"",i=t[n]||"";do{if(s=/(\\d*)(\\D*)(.*)/.exec(s)||["","","",""],i=/(\\d*)(\\D*)(.*)/.exec(i)||["","","",""],0==s[0].length&&0==i[0].length)break;o=0==s[1].length?0:parseInt(s[1],10);var a=0==i[1].length?0:parseInt(i[1],10);o=goog.string.internal.compareElements_(o,a)||goog.string.internal.compareElements_(0==s[2].length,0==i[2].length)||goog.string.internal.compareElements_(s[2],i[2]),s=s[3],i=i[3]}while(0==o)}return o},goog.string.internal.compareElements_=function(e,t){return e<t?-1:e>t?1:0},goog.html.SafeUrl=function(){this.privateDoNotAccessOrElseSafeUrlWrappedValue_="",this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeUrl.INNOCUOUS_STRING="about:invalid#zClosurez",goog.html.SafeUrl.prototype.implementsGoogStringTypedString=!0,goog.html.SafeUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString()},goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString=!0,goog.html.SafeUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR},goog.DEBUG&&(goog.html.SafeUrl.prototype.toString=function(){return"SafeUrl{"+this.privateDoNotAccessOrElseSafeUrlWrappedValue_+"}"}),goog.html.SafeUrl.unwrap=function(e){return goog.html.SafeUrl.unwrapTrustedURL(e).toString()},goog.html.SafeUrl.unwrapTrustedURL=function(e){return e instanceof goog.html.SafeUrl&&e.constructor===goog.html.SafeUrl&&e.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeUrlWrappedValue_:(goog.asserts.fail("expected object of type SafeUrl, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeUrl")},goog.html.SafeUrl.fromConstant=function(e){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(e))},goog.html.SAFE_MIME_TYPE_PATTERN_=/^(?:audio\\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\\/csv|video\\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\\w+=(?:\\w+|"[\\w;=]+"))*$/i,goog.html.SafeUrl.isSafeMimeType=function(e){return goog.html.SAFE_MIME_TYPE_PATTERN_.test(e)},goog.html.SafeUrl.fromBlob=function(e){return e=goog.html.SAFE_MIME_TYPE_PATTERN_.test(e.type)?goog.fs.url.createObjectUrl(e):goog.html.SafeUrl.INNOCUOUS_STRING,goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.DATA_URL_PATTERN_=/^data:([^,]*);base64,[a-z0-9+\\/]+=*$/i,goog.html.SafeUrl.fromDataUrl=function(e){var t=(e=e.replace(/(%0A|%0D)/g,"")).match(goog.html.DATA_URL_PATTERN_);return t=t&&goog.html.SAFE_MIME_TYPE_PATTERN_.test(t[1]),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(t?e:goog.html.SafeUrl.INNOCUOUS_STRING)},goog.html.SafeUrl.fromTelUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"tel:")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SIP_URL_PATTERN_=/^sip[s]?:[+a-z0-9_.!$%&\'*\\/=^`{|}~-]+@([a-z0-9-]+\\.)+[a-z0-9]{2,63}$/i,goog.html.SafeUrl.fromSipUrl=function(e){return goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(e))||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.fromFacebookMessengerUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"fb-messenger://share")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.fromWhatsAppUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"whatsapp://send")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.fromSmsUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"sms:")&&goog.html.SafeUrl.isSmsUrlBodyValid_(e)||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.isSmsUrlBodyValid_=function(e){var t=e.indexOf("#");if(0<t&&(e=e.substring(0,t)),!(t=e.match(/[?&]body=/gi)))return!0;if(1<t.length)return!1;if(!(e=e.match(/[?&]body=([^&]*)/)[1]))return!0;try{decodeURIComponent(e)}catch(e){return!1}return/^(?:[a-z0-9\\-_.~]|%[0-9a-f]{2})+$/i.test(e)},goog.html.SafeUrl.fromSshUrl=function(e){return goog.string.internal.caseInsensitiveStartsWith(e,"ssh://")||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeUrl.sanitizeChromeExtensionUrl=function(e,t){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\\/\\/([^\\/]+)\\//,e,t)},goog.html.SafeUrl.sanitizeFirefoxExtensionUrl=function(e,t){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\\/\\/([^\\/]+)\\//,e,t)},goog.html.SafeUrl.sanitizeEdgeExtensionUrl=function(e,t){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\\/\\/([^\\/]+)\\//,e,t)},goog.html.SafeUrl.sanitizeExtensionUrl_=function(e,t,o){return(e=e.exec(t))?(e=e[1],-1==(o instanceof goog.string.Const?[goog.string.Const.unwrap(o)]:o.map((function(e){return goog.string.Const.unwrap(e)}))).indexOf(e)&&(t=goog.html.SafeUrl.INNOCUOUS_STRING)):t=goog.html.SafeUrl.INNOCUOUS_STRING,goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(t)},goog.html.SafeUrl.fromTrustedResourceUrl=function(e){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(e))},goog.html.SAFE_URL_PATTERN_=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i,goog.html.SafeUrl.SAFE_URL_PATTERN=goog.html.SAFE_URL_PATTERN_,goog.html.SafeUrl.sanitize=function(e){return e instanceof goog.html.SafeUrl?e:(e="object"==typeof e&&e.implementsGoogStringTypedString?e.getTypedStringValue():String(e),goog.html.SAFE_URL_PATTERN_.test(e)||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e))},goog.html.SafeUrl.sanitizeAssertUnchanged=function(e,t){return e instanceof goog.html.SafeUrl?e:(e="object"==typeof e&&e.implementsGoogStringTypedString?e.getTypedStringValue():String(e),t&&/^data:/i.test(e)&&(t=goog.html.SafeUrl.fromDataUrl(e)).getTypedStringValue()==e?t:(goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(e),"%s does not match the safe URL pattern",e)||(e=goog.html.SafeUrl.INNOCUOUS_STRING),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(e)))},goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse=function(e){var t=new goog.html.SafeUrl;return t.privateDoNotAccessOrElseSafeUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(e):e,t},goog.html.SafeUrl.ABOUT_BLANK=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse("about:blank"),goog.html.SafeStyle=function(){this.privateDoNotAccessOrElseSafeStyleWrappedValue_="",this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeStyle.prototype.implementsGoogStringTypedString=!0,goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeStyle.fromConstant=function(e){return 0===(e=goog.string.Const.unwrap(e)).length?goog.html.SafeStyle.EMPTY:(goog.asserts.assert(goog.string.internal.endsWith(e,";"),"Last character of style string is not \';\': "+e),goog.asserts.assert(goog.string.internal.contains(e,":"),"Style string must contain at least one \':\', to specify a \\"name: value\\" pair: "+e),goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(e))},goog.html.SafeStyle.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_},goog.DEBUG&&(goog.html.SafeStyle.prototype.toString=function(){return"SafeStyle{"+this.privateDoNotAccessOrElseSafeStyleWrappedValue_+"}"}),goog.html.SafeStyle.unwrap=function(e){return e instanceof goog.html.SafeStyle&&e.constructor===goog.html.SafeStyle&&e.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeStyleWrappedValue_:(goog.asserts.fail("expected object of type SafeStyle, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeStyle")},goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse=function(e){return(new goog.html.SafeStyle).initSecurityPrivateDoNotAccessOrElse_(e)},goog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_=e,this},goog.html.SafeStyle.EMPTY=goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(""),goog.html.SafeStyle.INNOCUOUS_STRING="zClosurez",goog.html.SafeStyle.create=function(e){var t,o="";for(t in e){if(!/^[-_a-zA-Z0-9]+$/.test(t))throw Error("Name allows only [-_a-zA-Z0-9], got: "+t);var r=e[t];null!=r&&(o+=t+":"+(r=goog.isArray(r)?goog.array.map(r,goog.html.SafeStyle.sanitizePropertyValue_).join(" "):goog.html.SafeStyle.sanitizePropertyValue_(r))+";")}return o?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(o):goog.html.SafeStyle.EMPTY},goog.html.SafeStyle.sanitizePropertyValue_=function(e){if(e instanceof goog.html.SafeUrl)return\'url("\'+goog.html.SafeUrl.unwrap(e).replace(/</g,"%3c").replace(/[\\\\"]/g,"\\\\$&")+\'")\';if(e=e instanceof goog.string.Const?goog.string.Const.unwrap(e):goog.html.SafeStyle.sanitizePropertyValueString_(String(e)),/[{;}]/.test(e))throw new goog.asserts.AssertionError("Value does not allow [{;}], got: %s.",[e]);return e},goog.html.SafeStyle.sanitizePropertyValueString_=function(e){var t=e.replace(goog.html.SafeStyle.FUNCTIONS_RE_,"$1").replace(goog.html.SafeStyle.FUNCTIONS_RE_,"$1").replace(goog.html.SafeStyle.URL_RE_,"url");return goog.html.SafeStyle.VALUE_RE_.test(t)?goog.html.SafeStyle.COMMENT_RE_.test(e)?(goog.asserts.fail("String value disallows comments, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING):goog.html.SafeStyle.hasBalancedQuotes_(e)?goog.html.SafeStyle.hasBalancedSquareBrackets_(e)?goog.html.SafeStyle.sanitizeUrl_(e):(goog.asserts.fail("String value requires balanced square brackets and one identifier per pair of brackets, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING):(goog.asserts.fail("String value requires balanced quotes, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING):(goog.asserts.fail("String value allows only "+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+" and simple functions, got: "+e),goog.html.SafeStyle.INNOCUOUS_STRING)},goog.html.SafeStyle.hasBalancedQuotes_=function(e){for(var t=!0,o=!0,r=0;r<e.length;r++){var n=e.charAt(r);"\'"==n&&o?t=!t:\'"\'==n&&t&&(o=!o)}return t&&o},goog.html.SafeStyle.hasBalancedSquareBrackets_=function(e){for(var t=!0,o=/^[-_a-zA-Z0-9]$/,r=0;r<e.length;r++){var n=e.charAt(r);if("]"==n){if(t)return!1;t=!0}else if("["==n){if(!t)return!1;t=!1}else if(!t&&!o.test(n))return!1}return t},goog.html.SafeStyle.VALUE_ALLOWED_CHARS_="[-,.\\"\'%_!# a-zA-Z0-9\\\\[\\\\]]",goog.html.SafeStyle.VALUE_RE_=new RegExp("^"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+"+$"),goog.html.SafeStyle.URL_RE_=/\\b(url\\([ \\t\\n]*)(\'[ -&(-\\[\\]-~]*\'|"[ !#-\\[\\]-~]*"|[!#-&*-\\[\\]-~]*)([ \\t\\n]*\\))/g,goog.html.SafeStyle.FUNCTIONS_RE_=/\\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\\([-+*/0-9a-z.%\\[\\], ]+\\)/g,goog.html.SafeStyle.COMMENT_RE_=/\\/\\*/,goog.html.SafeStyle.sanitizeUrl_=function(e){return e.replace(goog.html.SafeStyle.URL_RE_,(function(e,t,o,r){var n="";return o=o.replace(/^([\'"])(.*)\\1$/,(function(e,t,o){return n=t,o})),e=goog.html.SafeUrl.sanitize(o).getTypedStringValue(),t+n+e+n+r}))},goog.html.SafeStyle.concat=function(e){var t="",o=function(e){goog.isArray(e)?goog.array.forEach(e,o):t+=goog.html.SafeStyle.unwrap(e)};return goog.array.forEach(arguments,o),t?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(t):goog.html.SafeStyle.EMPTY},goog.html.SafeStyleSheet=function(){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_="",this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_},goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString=!0,goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeStyleSheet.createRule=function(e,t){if(goog.string.internal.contains(e,"<"))throw Error("Selector does not allow \'<\', got: "+e);var o=e.replace(/(\'|")((?!\\1)[^\\r\\n\\f\\\\]|\\\\[\\s\\S])*\\1/g,"");if(!/^[-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|]+$/.test(o))throw Error("Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\\\]()=^$|] and strings, got: "+e);if(!goog.html.SafeStyleSheet.hasBalancedBrackets_(o))throw Error("() and [] in selector must be balanced, got: "+e);return t instanceof goog.html.SafeStyle||(t=goog.html.SafeStyle.create(t)),e=e+"{"+goog.html.SafeStyle.unwrap(t).replace(/</g,"\\\\3C ")+"}",goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(e)},goog.html.SafeStyleSheet.hasBalancedBrackets_=function(e){for(var t={"(":")","[":"]"},o=[],r=0;r<e.length;r++){var n=e[r];if(t[n])o.push(t[n]);else if(goog.object.contains(t,n)&&o.pop()!=n)return!1}return 0==o.length},goog.html.SafeStyleSheet.concat=function(e){var t="",o=function(e){goog.isArray(e)?goog.array.forEach(e,o):t+=goog.html.SafeStyleSheet.unwrap(e)};return goog.array.forEach(arguments,o),goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(t)},goog.html.SafeStyleSheet.fromConstant=function(e){return 0===(e=goog.string.Const.unwrap(e)).length?goog.html.SafeStyleSheet.EMPTY:(goog.asserts.assert(!goog.string.internal.contains(e,"<"),"Forbidden \'<\' character in style sheet string: "+e),goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(e))},goog.html.SafeStyleSheet.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_},goog.DEBUG&&(goog.html.SafeStyleSheet.prototype.toString=function(){return"SafeStyleSheet{"+this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_+"}"}),goog.html.SafeStyleSheet.unwrap=function(e){return e instanceof goog.html.SafeStyleSheet&&e.constructor===goog.html.SafeStyleSheet&&e.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_:(goog.asserts.fail("expected object of type SafeStyleSheet, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeStyleSheet")},goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse=function(e){return(new goog.html.SafeStyleSheet).initSecurityPrivateDoNotAccessOrElse_(e)},goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=e,this},goog.html.SafeStyleSheet.EMPTY=goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(""),goog.labs={},goog.labs.userAgent={},goog.labs.userAgent.util={},goog.labs.userAgent.util.getNativeUserAgentString_=function(){var e=goog.labs.userAgent.util.getNavigator_();return e&&(e=e.userAgent)?e:""},goog.labs.userAgent.util.getNavigator_=function(){return goog.global.navigator},goog.labs.userAgent.util.userAgent_=goog.labs.userAgent.util.getNativeUserAgentString_(),goog.labs.userAgent.util.setUserAgent=function(e){goog.labs.userAgent.util.userAgent_=e||goog.labs.userAgent.util.getNativeUserAgentString_()},goog.labs.userAgent.util.getUserAgent=function(){return goog.labs.userAgent.util.userAgent_},goog.labs.userAgent.util.matchUserAgent=function(e){var t=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.contains(t,e)},goog.labs.userAgent.util.matchUserAgentIgnoreCase=function(e){var t=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.caseInsensitiveContains(t,e)},goog.labs.userAgent.util.extractVersionTuples=function(e){for(var t,o=/(\\w[\\w ]+)\\/([^\\s]+)\\s*(?:\\((.*?)\\))?/g,r=[];t=o.exec(e);)r.push([t[1],t[2],t[3]||void 0]);return r},goog.labs.userAgent.browser={},goog.labs.userAgent.browser.matchOpera_=function(){return goog.labs.userAgent.util.matchUserAgent("Opera")},goog.labs.userAgent.browser.matchIE_=function(){return goog.labs.userAgent.util.matchUserAgent("Trident")||goog.labs.userAgent.util.matchUserAgent("MSIE")},goog.labs.userAgent.browser.matchEdgeHtml_=function(){return goog.labs.userAgent.util.matchUserAgent("Edge")},goog.labs.userAgent.browser.matchEdgeChromium_=function(){return goog.labs.userAgent.util.matchUserAgent("Edg/")},goog.labs.userAgent.browser.matchOperaChromium_=function(){return goog.labs.userAgent.util.matchUserAgent("OPR")},goog.labs.userAgent.browser.matchFirefox_=function(){return goog.labs.userAgent.util.matchUserAgent("Firefox")||goog.labs.userAgent.util.matchUserAgent("FxiOS")},goog.labs.userAgent.browser.matchSafari_=function(){return goog.labs.userAgent.util.matchUserAgent("Safari")&&!(goog.labs.userAgent.browser.matchChrome_()||goog.labs.userAgent.browser.matchCoast_()||goog.labs.userAgent.browser.matchOpera_()||goog.labs.userAgent.browser.matchEdgeHtml_()||goog.labs.userAgent.browser.matchEdgeChromium_()||goog.labs.userAgent.browser.matchOperaChromium_()||goog.labs.userAgent.browser.matchFirefox_()||goog.labs.userAgent.browser.isSilk()||goog.labs.userAgent.util.matchUserAgent("Android"))},goog.labs.userAgent.browser.matchCoast_=function(){return goog.labs.userAgent.util.matchUserAgent("Coast")},goog.labs.userAgent.browser.matchIosWebview_=function(){return(goog.labs.userAgent.util.matchUserAgent("iPad")||goog.labs.userAgent.util.matchUserAgent("iPhone"))&&!goog.labs.userAgent.browser.matchSafari_()&&!goog.labs.userAgent.browser.matchChrome_()&&!goog.labs.userAgent.browser.matchCoast_()&&!goog.labs.userAgent.browser.matchFirefox_()&&goog.labs.userAgent.util.matchUserAgent("AppleWebKit")},goog.labs.userAgent.browser.matchChrome_=function(){return(goog.labs.userAgent.util.matchUserAgent("Chrome")||goog.labs.userAgent.util.matchUserAgent("CriOS"))&&!goog.labs.userAgent.browser.matchEdgeHtml_()},goog.labs.userAgent.browser.matchAndroidBrowser_=function(){return goog.labs.userAgent.util.matchUserAgent("Android")&&!(goog.labs.userAgent.browser.isChrome()||goog.labs.userAgent.browser.isFirefox()||goog.labs.userAgent.browser.isOpera()||goog.labs.userAgent.browser.isSilk())},goog.labs.userAgent.browser.isOpera=goog.labs.userAgent.browser.matchOpera_,goog.labs.userAgent.browser.isIE=goog.labs.userAgent.browser.matchIE_,goog.labs.userAgent.browser.isEdge=goog.labs.userAgent.browser.matchEdgeHtml_,goog.labs.userAgent.browser.isEdgeChromium=goog.labs.userAgent.browser.matchEdgeChromium_,goog.labs.userAgent.browser.isOperaChromium=goog.labs.userAgent.browser.matchOperaChromium_,goog.labs.userAgent.browser.isFirefox=goog.labs.userAgent.browser.matchFirefox_,goog.labs.userAgent.browser.isSafari=goog.labs.userAgent.browser.matchSafari_,goog.labs.userAgent.browser.isCoast=goog.labs.userAgent.browser.matchCoast_,goog.labs.userAgent.browser.isIosWebview=goog.labs.userAgent.browser.matchIosWebview_,goog.labs.userAgent.browser.isChrome=goog.labs.userAgent.browser.matchChrome_,goog.labs.userAgent.browser.isAndroidBrowser=goog.labs.userAgent.browser.matchAndroidBrowser_,goog.labs.userAgent.browser.isSilk=function(){return goog.labs.userAgent.util.matchUserAgent("Silk")},goog.labs.userAgent.browser.getVersion=function(){function e(e){return e=goog.array.find(e,r),o[e]||""}var t=goog.labs.userAgent.util.getUserAgent();if(goog.labs.userAgent.browser.isIE())return goog.labs.userAgent.browser.getIEVersion_(t);t=goog.labs.userAgent.util.extractVersionTuples(t);var o={};goog.array.forEach(t,(function(e){o[e[0]]=e[1]}));var r=goog.partial(goog.object.containsKey,o);return goog.labs.userAgent.browser.isOpera()?e(["Version","Opera"]):goog.labs.userAgent.browser.isEdge()?e(["Edge"]):goog.labs.userAgent.browser.isEdgeChromium()?e(["Edg"]):goog.labs.userAgent.browser.isChrome()?e(["Chrome","CriOS"]):(t=t[2])&&t[1]||""},goog.labs.userAgent.browser.isVersionOrHigher=function(e){return 0<=goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(),e)},goog.labs.userAgent.browser.getIEVersion_=function(e){var t=/rv: *([\\d\\.]*)/.exec(e);if(t&&t[1])return t[1];t="";var o=/MSIE +([\\d\\.]+)/.exec(e);if(o&&o[1])if(e=/Trident\\/(\\d.\\d)/.exec(e),"7.0"==o[1])if(e&&e[1])switch(e[1]){case"4.0":t="8.0";break;case"5.0":t="9.0";break;case"6.0":t="10.0";break;case"7.0":t="11.0"}else t="7.0";else t=o[1];return t},goog.html.SafeHtml=function(){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_="",this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_,this.dir_=null},goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString=!0,goog.html.SafeHtml.prototype.getDirection=function(){return this.dir_},goog.html.SafeHtml.prototype.implementsGoogStringTypedString=!0,goog.html.SafeHtml.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString()},goog.DEBUG&&(goog.html.SafeHtml.prototype.toString=function(){return"SafeHtml{"+this.privateDoNotAccessOrElseSafeHtmlWrappedValue_+"}"}),goog.html.SafeHtml.unwrap=function(e){return goog.html.SafeHtml.unwrapTrustedHTML(e).toString()},goog.html.SafeHtml.unwrapTrustedHTML=function(e){return e instanceof goog.html.SafeHtml&&e.constructor===goog.html.SafeHtml&&e.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_?e.privateDoNotAccessOrElseSafeHtmlWrappedValue_:(goog.asserts.fail("expected object of type SafeHtml, got \'"+e+"\' of type "+goog.typeOf(e)),"type_error:SafeHtml")},goog.html.SafeHtml.htmlEscape=function(e){if(e instanceof goog.html.SafeHtml)return e;var t="object"==typeof e,o=null;return t&&e.implementsGoogI18nBidiDirectionalString&&(o=e.getDirection()),e=t&&e.implementsGoogStringTypedString?e.getTypedStringValue():String(e),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(e),o)},goog.html.SafeHtml.htmlEscapePreservingNewlines=function(e){return e instanceof goog.html.SafeHtml?e:(e=goog.html.SafeHtml.htmlEscape(e),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(e)),e.getDirection()))},goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces=function(e){return e instanceof goog.html.SafeHtml?e:(e=goog.html.SafeHtml.htmlEscape(e),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(e)),e.getDirection()))},goog.html.SafeHtml.from=goog.html.SafeHtml.htmlEscape,goog.html.SafeHtml.VALID_NAMES_IN_TAG_=/^[a-zA-Z0-9-]+$/,goog.html.SafeHtml.URL_ATTRIBUTES_={action:!0,cite:!0,data:!0,formaction:!0,href:!0,manifest:!0,poster:!0,src:!0},goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_={APPLET:!0,BASE:!0,EMBED:!0,IFRAME:!0,LINK:!0,MATH:!0,META:!0,OBJECT:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0},goog.html.SafeHtml.create=function(e,t,o){return goog.html.SafeHtml.verifyTagName(String(e)),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(e),t,o)},goog.html.SafeHtml.verifyTagName=function(e){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(e))throw Error("Invalid tag name <"+e+">.");if(e.toUpperCase()in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_)throw Error("Tag name <"+e+"> is not allowed for SafeHtml.")},goog.html.SafeHtml.createIframe=function(e,t,o,r){e&&goog.html.TrustedResourceUrl.unwrap(e);var n={};return n.src=e||null,n.srcdoc=t&&goog.html.SafeHtml.unwrap(t),e=goog.html.SafeHtml.combineAttributes(n,{sandbox:""},o),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe",e,r)},goog.html.SafeHtml.createSandboxIframe=function(e,t,o,r){if(!goog.html.SafeHtml.canUseSandboxIframe())throw Error("The browser does not support sandboxed iframes.");var n={};return n.src=e?goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(e)):null,n.srcdoc=t||null,n.sandbox="",e=goog.html.SafeHtml.combineAttributes(n,{},o),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe",e,r)},goog.html.SafeHtml.canUseSandboxIframe=function(){return goog.global.HTMLIFrameElement&&"sandbox"in goog.global.HTMLIFrameElement.prototype},goog.html.SafeHtml.createScriptSrc=function(e,t){return goog.html.TrustedResourceUrl.unwrap(e),e=goog.html.SafeHtml.combineAttributes({src:e},{},t),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script",e)},goog.html.SafeHtml.createScript=function(e,t){for(var o in t){var r=o.toLowerCase();if("language"==r||"src"==r||"text"==r||"type"==r)throw Error(\'Cannot set "\'+r+\'" attribute\')}for(o="",e=goog.array.concat(e),r=0;r<e.length;r++)o+=goog.html.SafeScript.unwrap(e[r]);return e=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(o,goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script",t,e)},goog.html.SafeHtml.createStyle=function(e,t){t=goog.html.SafeHtml.combineAttributes({type:"text/css"},{},t);var o="";e=goog.array.concat(e);for(var r=0;r<e.length;r++)o+=goog.html.SafeStyleSheet.unwrap(e[r]);return e=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(o,goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("style",t,e)},goog.html.SafeHtml.createMetaRefresh=function(e,t){return e=goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(e)),(goog.labs.userAgent.browser.isIE()||goog.labs.userAgent.browser.isEdge())&&goog.string.internal.contains(e,";")&&(e="\'"+e.replace(/\'/g,"%27")+"\'"),goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("meta",{"http-equiv":"refresh",content:(t||0)+"; url="+e})},goog.html.SafeHtml.getAttrNameAndValue_=function(e,t,o){if(o instanceof goog.string.Const)o=goog.string.Const.unwrap(o);else if("style"==t.toLowerCase())o=goog.html.SafeHtml.getStyleValue_(o);else{if(/^on/i.test(t))throw Error(\'Attribute "\'+t+\'" requires goog.string.Const value, "\'+o+\'" given.\');if(t.toLowerCase()in goog.html.SafeHtml.URL_ATTRIBUTES_)if(o instanceof goog.html.TrustedResourceUrl)o=goog.html.TrustedResourceUrl.unwrap(o);else if(o instanceof goog.html.SafeUrl)o=goog.html.SafeUrl.unwrap(o);else{if(!goog.isString(o))throw Error(\'Attribute "\'+t+\'" on tag "\'+e+\'" requires goog.html.SafeUrl, goog.string.Const, or string, value "\'+o+\'" given.\');o=goog.html.SafeUrl.sanitize(o).getTypedStringValue()}}return o.implementsGoogStringTypedString&&(o=o.getTypedStringValue()),goog.asserts.assert(goog.isString(o)||goog.isNumber(o),"String or number value expected, got "+typeof o+" with value: "+o),t+\'="\'+goog.string.internal.htmlEscape(String(o))+\'"\'},goog.html.SafeHtml.getStyleValue_=function(e){if(!goog.isObject(e))throw Error(\'The "style" attribute requires goog.html.SafeStyle or map of style properties, \'+typeof e+" given: "+e);return e instanceof goog.html.SafeStyle||(e=goog.html.SafeStyle.create(e)),goog.html.SafeStyle.unwrap(e)},goog.html.SafeHtml.createWithDir=function(e,t,o,r){return(t=goog.html.SafeHtml.create(t,o,r)).dir_=e,t},goog.html.SafeHtml.join=function(e,t){var o=(e=goog.html.SafeHtml.htmlEscape(e)).getDirection(),r=[],n=function(e){goog.isArray(e)?goog.array.forEach(e,n):(e=goog.html.SafeHtml.htmlEscape(e),r.push(goog.html.SafeHtml.unwrap(e)),e=e.getDirection(),o==goog.i18n.bidi.Dir.NEUTRAL?o=e:e!=goog.i18n.bidi.Dir.NEUTRAL&&o!=e&&(o=null))};return goog.array.forEach(t,n),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(r.join(goog.html.SafeHtml.unwrap(e)),o)},goog.html.SafeHtml.concat=function(e){return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY,Array.prototype.slice.call(arguments))},goog.html.SafeHtml.concatWithDir=function(e,t){var o=goog.html.SafeHtml.concat(goog.array.slice(arguments,1));return o.dir_=e,o},goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={},goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse=function(e,t){return(new goog.html.SafeHtml).initSecurityPrivateDoNotAccessOrElse_(e,t)},goog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_=function(e,t){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(e):e,this.dir_=t,this},goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse=function(e,t,o){var r=null,n="<"+e+goog.html.SafeHtml.stringifyAttributes(e,t);return goog.isDefAndNotNull(o)?goog.isArray(o)||(o=[o]):o=[],goog.dom.tags.isVoidTag(e.toLowerCase())?(goog.asserts.assert(!o.length,"Void tag <"+e+"> does not allow content."),n+=">"):(r=goog.html.SafeHtml.concat(o),n+=">"+goog.html.SafeHtml.unwrap(r)+"</"+e+">",r=r.getDirection()),(e=t&&t.dir)&&(r=/^(ltr|rtl|auto)$/i.test(e)?goog.i18n.bidi.Dir.NEUTRAL:null),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(n,r)},goog.html.SafeHtml.stringifyAttributes=function(e,t){var o="";if(t)for(var r in t){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(r))throw Error(\'Invalid attribute name "\'+r+\'".\');var n=t[r];goog.isDefAndNotNull(n)&&(o+=" "+goog.html.SafeHtml.getAttrNameAndValue_(e,r,n))}return o},goog.html.SafeHtml.combineAttributes=function(e,t,o){var r,n={};for(r in e)goog.asserts.assert(r.toLowerCase()==r,"Must be lower case"),n[r]=e[r];for(r in t)goog.asserts.assert(r.toLowerCase()==r,"Must be lower case"),n[r]=t[r];for(r in o){var s=r.toLowerCase();if(s in e)throw Error(\'Cannot override "\'+s+\'" attribute, got "\'+r+\'" with value "\'+o[r]+\'"\');s in t&&delete n[s],n[r]=o[r]}return n},goog.html.SafeHtml.DOCTYPE_HTML=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<!DOCTYPE html>",goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.EMPTY=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("",goog.i18n.bidi.Dir.NEUTRAL),goog.html.SafeHtml.BR=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<br>",goog.i18n.bidi.Dir.NEUTRAL),goog.html.uncheckedconversions={},goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract=function(e,t,o){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(t,o||null)},goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(t)},goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract=function(e,t){return goog.asserts.assertString(goog.string.Const.unwrap(e),"must provide justification"),goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(e)),"must provide non-empty justification"),goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(t)},goog.dom.safe={},goog.dom.safe.InsertAdjacentHtmlPosition={AFTERBEGIN:"afterbegin",AFTEREND:"afterend",BEFOREBEGIN:"beforebegin",BEFOREEND:"beforeend"},goog.dom.safe.insertAdjacentHtml=function(e,t,o){e.insertAdjacentHTML(t,goog.html.SafeHtml.unwrapTrustedHTML(o))},goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_={MATH:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0},goog.dom.safe.isInnerHtmlCleanupRecursive_=goog.functions.cacheReturnValue((function(){if(goog.DEBUG&&"undefined"==typeof document)return!1;var e=document.createElement("div"),t=document.createElement("div");return t.appendChild(document.createElement("div")),e.appendChild(t),!(goog.DEBUG&&!e.firstChild||(t=e.firstChild.firstChild,e.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY),t.parentElement))})),goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse=function(e,t){if(goog.dom.safe.isInnerHtmlCleanupRecursive_())for(;e.lastChild;)e.removeChild(e.lastChild);e.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(t)},goog.dom.safe.setInnerHtml=function(e,t){if(goog.asserts.ENABLE_ASSERTS){var o=e.tagName.toUpperCase();if(goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[o])throw Error("goog.dom.safe.setInnerHtml cannot be used to set content of "+e.tagName+".")}goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(e,t)},goog.dom.safe.setOuterHtml=function(e,t){e.outerHTML=goog.html.SafeHtml.unwrapTrustedHTML(t)},goog.dom.safe.setFormElementAction=function(e,t){t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),goog.dom.asserts.assertIsHTMLFormElement(e).action=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setButtonFormAction=function(e,t){t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),goog.dom.asserts.assertIsHTMLButtonElement(e).formAction=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setInputFormAction=function(e,t){t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),goog.dom.asserts.assertIsHTMLInputElement(e).formAction=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setStyle=function(e,t){e.style.cssText=goog.html.SafeStyle.unwrap(t)},goog.dom.safe.documentWrite=function(e,t){e.write(goog.html.SafeHtml.unwrapTrustedHTML(t))},goog.dom.safe.setAnchorHref=function(e,t){goog.dom.asserts.assertIsHTMLAnchorElement(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.href=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setImageSrc=function(e,t){if(goog.dom.asserts.assertIsHTMLImageElement(e),!(t instanceof goog.html.SafeUrl)){var o=/^data:image\\//i.test(t);t=goog.html.SafeUrl.sanitizeAssertUnchanged(t,o)}e.src=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setAudioSrc=function(e,t){if(goog.dom.asserts.assertIsHTMLAudioElement(e),!(t instanceof goog.html.SafeUrl)){var o=/^data:audio\\//i.test(t);t=goog.html.SafeUrl.sanitizeAssertUnchanged(t,o)}e.src=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setVideoSrc=function(e,t){if(goog.dom.asserts.assertIsHTMLVideoElement(e),!(t instanceof goog.html.SafeUrl)){var o=/^data:video\\//i.test(t);t=goog.html.SafeUrl.sanitizeAssertUnchanged(t,o)}e.src=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.setEmbedSrc=function(e,t){goog.dom.asserts.assertIsHTMLEmbedElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(t)},goog.dom.safe.setFrameSrc=function(e,t){goog.dom.asserts.assertIsHTMLFrameElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(t)},goog.dom.safe.setIframeSrc=function(e,t){goog.dom.asserts.assertIsHTMLIFrameElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(t)},goog.dom.safe.setIframeSrcdoc=function(e,t){goog.dom.asserts.assertIsHTMLIFrameElement(e),e.srcdoc=goog.html.SafeHtml.unwrapTrustedHTML(t)},goog.dom.safe.setLinkHrefAndRel=function(e,t,o){goog.dom.asserts.assertIsHTMLLinkElement(e),e.rel=o,goog.string.internal.caseInsensitiveContains(o,"stylesheet")?(goog.asserts.assert(t instanceof goog.html.TrustedResourceUrl,\'URL must be TrustedResourceUrl because "rel" contains "stylesheet"\'),e.href=goog.html.TrustedResourceUrl.unwrapTrustedURL(t)):e.href=t instanceof goog.html.TrustedResourceUrl?goog.html.TrustedResourceUrl.unwrapTrustedURL(t):t instanceof goog.html.SafeUrl?goog.html.SafeUrl.unwrapTrustedURL(t):goog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(t))},goog.dom.safe.setObjectData=function(e,t){goog.dom.asserts.assertIsHTMLObjectElement(e),e.data=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(t)},goog.dom.safe.setScriptSrc=function(e,t){goog.dom.asserts.assertIsHTMLScriptElement(e),e.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(t),(t=goog.getScriptNonce())&&e.setAttribute("nonce",t)},goog.dom.safe.setScriptContent=function(e,t){goog.dom.asserts.assertIsHTMLScriptElement(e),e.text=goog.html.SafeScript.unwrapTrustedScript(t),(t=goog.getScriptNonce())&&e.setAttribute("nonce",t)},goog.dom.safe.setLocationHref=function(e,t){goog.dom.asserts.assertIsLocation(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.href=goog.html.SafeUrl.unwrapTrustedURL(t)},goog.dom.safe.assignLocation=function(e,t){goog.dom.asserts.assertIsLocation(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.assign(goog.html.SafeUrl.unwrapTrustedURL(t))},goog.dom.safe.replaceLocation=function(e,t){goog.dom.asserts.assertIsLocation(e),t=t instanceof goog.html.SafeUrl?t:goog.html.SafeUrl.sanitizeAssertUnchanged(t),e.replace(goog.html.SafeUrl.unwrapTrustedURL(t))},goog.dom.safe.openInWindow=function(e,t,o,r,n){return e=e instanceof goog.html.SafeUrl?e:goog.html.SafeUrl.sanitizeAssertUnchanged(e),(t||goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(e),o?goog.string.Const.unwrap(o):"",r,n)},goog.dom.safe.parseFromStringHtml=function(e,t){return goog.dom.safe.parseFromString(e,t,"text/html")},goog.dom.safe.parseFromString=function(e,t,o){return e.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(t),o)},goog.dom.safe.createImageFromBlob=function(e){if(!/^image\\/.*/g.test(e.type))throw Error("goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.");var t=goog.global.URL.createObjectURL(e);return(e=new goog.global.Image).onload=function(){goog.global.URL.revokeObjectURL(t)},goog.dom.safe.setImageSrc(e,goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Image blob URL."),t)),e},goog.string.DETECT_DOUBLE_ESCAPING=!1,goog.string.FORCE_NON_DOM_HTML_UNESCAPING=!1,goog.string.Unicode={NBSP:" "},goog.string.startsWith=goog.string.internal.startsWith,goog.string.endsWith=goog.string.internal.endsWith,goog.string.caseInsensitiveStartsWith=goog.string.internal.caseInsensitiveStartsWith,goog.string.caseInsensitiveEndsWith=goog.string.internal.caseInsensitiveEndsWith,goog.string.caseInsensitiveEquals=goog.string.internal.caseInsensitiveEquals,goog.string.subs=function(e,t){for(var o=e.split("%s"),r="",n=Array.prototype.slice.call(arguments,1);n.length&&1<o.length;)r+=o.shift()+n.shift();return r+o.join("%s")},goog.string.collapseWhitespace=function(e){return e.replace(/[\\s\\xa0]+/g," ").replace(/^\\s+|\\s+$/g,"")},goog.string.isEmptyOrWhitespace=goog.string.internal.isEmptyOrWhitespace,goog.string.isEmptyString=function(e){return 0==e.length},goog.string.isEmpty=goog.string.isEmptyOrWhitespace,goog.string.isEmptyOrWhitespaceSafe=function(e){return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(e))},goog.string.isEmptySafe=goog.string.isEmptyOrWhitespaceSafe,goog.string.isBreakingWhitespace=function(e){return!/[^\\t\\n\\r ]/.test(e)},goog.string.isAlpha=function(e){return!/[^a-zA-Z]/.test(e)},goog.string.isNumeric=function(e){return!/[^0-9]/.test(e)},goog.string.isAlphaNumeric=function(e){return!/[^a-zA-Z0-9]/.test(e)},goog.string.isSpace=function(e){return" "==e},goog.string.isUnicodeChar=function(e){return 1==e.length&&" "<=e&&"~">=e||"€"<=e&&"�">=e},goog.string.stripNewlines=function(e){return e.replace(/(\\r\\n|\\r|\\n)+/g," ")},goog.string.canonicalizeNewlines=function(e){return e.replace(/(\\r\\n|\\r|\\n)/g,"\\n")},goog.string.normalizeWhitespace=function(e){return e.replace(/\\xa0|\\s/g," ")},goog.string.normalizeSpaces=function(e){return e.replace(/\\xa0|[ \\t]+/g," ")},goog.string.collapseBreakingSpaces=function(e){return e.replace(/[\\t\\r\\n ]+/g," ").replace(/^[\\t\\r\\n ]+|[\\t\\r\\n ]+$/g,"")},goog.string.trim=goog.string.internal.trim,goog.string.trimLeft=function(e){return e.replace(/^[\\s\\xa0]+/,"")},goog.string.trimRight=function(e){return e.replace(/[\\s\\xa0]+$/,"")},goog.string.caseInsensitiveCompare=goog.string.internal.caseInsensitiveCompare,goog.string.numberAwareCompare_=function(e,t,o){if(e==t)return 0;if(!e)return-1;if(!t)return 1;for(var r=e.toLowerCase().match(o),n=t.toLowerCase().match(o),s=Math.min(r.length,n.length),i=0;i<s;i++){o=r[i];var a=n[i];if(o!=a)return e=parseInt(o,10),!isNaN(e)&&(t=parseInt(a,10),!isNaN(t)&&e-t)?e-t:o<a?-1:1}return r.length!=n.length?r.length-n.length:e<t?-1:1},goog.string.intAwareCompare=function(e,t){return goog.string.numberAwareCompare_(e,t,/\\d+|\\D+/g)},goog.string.floatAwareCompare=function(e,t){return goog.string.numberAwareCompare_(e,t,/\\d+|\\.\\d+|\\D+/g)},goog.string.numerateCompare=goog.string.floatAwareCompare,goog.string.urlEncode=function(e){return encodeURIComponent(String(e))},goog.string.urlDecode=function(e){return decodeURIComponent(e.replace(/\\+/g," "))},goog.string.newLineToBr=goog.string.internal.newLineToBr,goog.string.htmlEscape=function(e,t){return e=goog.string.internal.htmlEscape(e,t),goog.string.DETECT_DOUBLE_ESCAPING&&(e=e.replace(goog.string.E_RE_,"&#101;")),e},goog.string.E_RE_=/e/g,goog.string.unescapeEntities=function(e){return goog.string.contains(e,"&")?!goog.string.FORCE_NON_DOM_HTML_UNESCAPING&&"document"in goog.global?goog.string.unescapeEntitiesUsingDom_(e):goog.string.unescapePureXmlEntities_(e):e},goog.string.unescapeEntitiesWithDocument=function(e,t){return goog.string.contains(e,"&")?goog.string.unescapeEntitiesUsingDom_(e,t):e},goog.string.unescapeEntitiesUsingDom_=function(e,t){var o={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":\'"\'},r=t?t.createElement("div"):goog.global.document.createElement("div");return e.replace(goog.string.HTML_ENTITY_PATTERN_,(function(e,t){var n=o[e];return n||("#"==t.charAt(0)&&(t=Number("0"+t.substr(1)),isNaN(t)||(n=String.fromCharCode(t))),n||(goog.dom.safe.setInnerHtml(r,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Single HTML entity."),e+" ")),n=r.firstChild.nodeValue.slice(0,-1)),o[e]=n)}))},goog.string.unescapePureXmlEntities_=function(e){return e.replace(/&([^;]+);/g,(function(e,t){switch(t){case"amp":return"&";case"lt":return"<";case"gt":return">";case"quot":return\'"\';default:return"#"!=t.charAt(0)||(t=Number("0"+t.substr(1)),isNaN(t))?e:String.fromCharCode(t)}}))},goog.string.HTML_ENTITY_PATTERN_=/&([^;\\s<&]+);?/g,goog.string.whitespaceEscape=function(e,t){return goog.string.newLineToBr(e.replace(/  /g," &#160;"),t)},goog.string.preserveSpaces=function(e){return e.replace(/(^|[\\n ]) /g,"$1"+goog.string.Unicode.NBSP)},goog.string.stripQuotes=function(e,t){for(var o=t.length,r=0;r<o;r++){var n=1==o?t:t.charAt(r);if(e.charAt(0)==n&&e.charAt(e.length-1)==n)return e.substring(1,e.length-1)}return e},goog.string.truncate=function(e,t,o){return o&&(e=goog.string.unescapeEntities(e)),e.length>t&&(e=e.substring(0,t-3)+"..."),o&&(e=goog.string.htmlEscape(e)),e},goog.string.truncateMiddle=function(e,t,o,r){if(o&&(e=goog.string.unescapeEntities(e)),r&&e.length>t){r>t&&(r=t);var n=e.length-r;e=e.substring(0,t-r)+"..."+e.substring(n)}else e.length>t&&(r=Math.floor(t/2),n=e.length-r,e=e.substring(0,r+t%2)+"..."+e.substring(n));return o&&(e=goog.string.htmlEscape(e)),e},goog.string.specialEscapeChars_={"\\0":"\\\\0","\\b":"\\\\b","\\f":"\\\\f","\\n":"\\\\n","\\r":"\\\\r","\\t":"\\\\t","\\v":"\\\\x0B",\'"\':\'\\\\"\',"\\\\":"\\\\\\\\","<":"\\\\u003C"},goog.string.jsEscapeCache_={"\'":"\\\\\'"},goog.string.quote=function(e){e=String(e);for(var t=[\'"\'],o=0;o<e.length;o++){var r=e.charAt(o),n=r.charCodeAt(0);t[o+1]=goog.string.specialEscapeChars_[r]||(31<n&&127>n?r:goog.string.escapeChar(r))}return t.push(\'"\'),t.join("")},goog.string.escapeString=function(e){for(var t=[],o=0;o<e.length;o++)t[o]=goog.string.escapeChar(e.charAt(o));return t.join("")},goog.string.escapeChar=function(e){if(e in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[e];if(e in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[e]=goog.string.specialEscapeChars_[e];var t=e.charCodeAt(0);if(31<t&&127>t)var o=e;else 256>t?(o="\\\\x",(16>t||256<t)&&(o+="0")):(o="\\\\u",4096>t&&(o+="0")),o+=t.toString(16).toUpperCase();return goog.string.jsEscapeCache_[e]=o},goog.string.contains=goog.string.internal.contains,goog.string.caseInsensitiveContains=goog.string.internal.caseInsensitiveContains,goog.string.countOf=function(e,t){return e&&t?e.split(t).length-1:0},goog.string.removeAt=function(e,t,o){var r=e;return 0<=t&&t<e.length&&0<o&&(r=e.substr(0,t)+e.substr(t+o,e.length-t-o)),r},goog.string.remove=function(e,t){return e.replace(t,"")},goog.string.removeAll=function(e,t){return t=new RegExp(goog.string.regExpEscape(t),"g"),e.replace(t,"")},goog.string.replaceAll=function(e,t,o){return t=new RegExp(goog.string.regExpEscape(t),"g"),e.replace(t,o.replace(/\\$/g,"$$$$"))},goog.string.regExpEscape=function(e){return String(e).replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,"\\\\$1").replace(/\\x08/g,"\\\\x08")},goog.string.repeat=String.prototype.repeat?function(e,t){return e.repeat(t)}:function(e,t){return Array(t+1).join(e)},goog.string.padNumber=function(e,t,o){return-1==(o=(e=goog.isDef(o)?e.toFixed(o):String(e)).indexOf("."))&&(o=e.length),goog.string.repeat("0",Math.max(0,t-o))+e},goog.string.makeSafe=function(e){return null==e?"":String(e)},goog.string.buildString=function(e){return Array.prototype.join.call(arguments,"")},goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)},goog.string.compareVersions=goog.string.internal.compareVersions,goog.string.hashCode=function(e){for(var t=0,o=0;o<e.length;++o)t=31*t+e.charCodeAt(o)>>>0;return t},goog.string.uniqueStringCounter_=2147483648*Math.random()|0,goog.string.createUniqueString=function(){return"goog_"+goog.string.uniqueStringCounter_++},goog.string.toNumber=function(e){var t=Number(e);return 0==t&&goog.string.isEmptyOrWhitespace(e)?NaN:t},goog.string.isLowerCamelCase=function(e){return/^[a-z]+([A-Z][a-z]*)*$/.test(e)},goog.string.isUpperCamelCase=function(e){return/^([A-Z][a-z]*)+$/.test(e)},goog.string.toCamelCase=function(e){return String(e).replace(/\\-([a-z])/g,(function(e,t){return t.toUpperCase()}))},goog.string.toSelectorCase=function(e){return String(e).replace(/([A-Z])/g,"-$1").toLowerCase()},goog.string.toTitleCase=function(e,t){return t=goog.isString(t)?goog.string.regExpEscape(t):"\\\\s",e.replace(new RegExp("(^"+(t?"|["+t+"]+":"")+")([a-z])","g"),(function(e,t,o){return t+o.toUpperCase()}))},goog.string.capitalize=function(e){return String(e.charAt(0)).toUpperCase()+String(e.substr(1)).toLowerCase()},goog.string.parseInt=function(e){return isFinite(e)&&(e=String(e)),goog.isString(e)?/^\\s*-?0x/i.test(e)?parseInt(e,16):parseInt(e,10):NaN},goog.string.splitLimit=function(e,t,o){e=e.split(t);for(var r=[];0<o&&e.length;)r.push(e.shift()),o--;return e.length&&r.push(e.join(t)),r},goog.string.lastComponent=function(e,t){if(!t)return e;"string"==typeof t&&(t=[t]);for(var o=-1,r=0;r<t.length;r++)if(""!=t[r]){var n=e.lastIndexOf(t[r]);n>o&&(o=n)}return-1==o?e:e.slice(o+1)},goog.string.editDistance=function(e,t){var o=[],r=[];if(e==t)return 0;if(!e.length||!t.length)return Math.max(e.length,t.length);for(var n=0;n<t.length+1;n++)o[n]=n;for(n=0;n<e.length;n++){r[0]=n+1;for(var s=0;s<t.length;s++)r[s+1]=Math.min(r[s]+1,o[s+1]+1,o[s]+Number(e[n]!=t[s]));for(s=0;s<o.length;s++)o[s]=r[s]}return r[t.length]},goog.labs.userAgent.engine={},goog.labs.userAgent.engine.isPresto=function(){return goog.labs.userAgent.util.matchUserAgent("Presto")},goog.labs.userAgent.engine.isTrident=function(){return goog.labs.userAgent.util.matchUserAgent("Trident")||goog.labs.userAgent.util.matchUserAgent("MSIE")},goog.labs.userAgent.engine.isEdge=function(){return goog.labs.userAgent.util.matchUserAgent("Edge")},goog.labs.userAgent.engine.isWebKit=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit")&&!goog.labs.userAgent.engine.isEdge()},goog.labs.userAgent.engine.isGecko=function(){return goog.labs.userAgent.util.matchUserAgent("Gecko")&&!goog.labs.userAgent.engine.isWebKit()&&!goog.labs.userAgent.engine.isTrident()&&!goog.labs.userAgent.engine.isEdge()},goog.labs.userAgent.engine.getVersion=function(){var e=goog.labs.userAgent.util.getUserAgent();if(e){e=goog.labs.userAgent.util.extractVersionTuples(e);var t,o=goog.labs.userAgent.engine.getEngineTuple_(e);if(o)return"Gecko"==o[0]?goog.labs.userAgent.engine.getVersionForKey_(e,"Firefox"):o[1];if((e=e[0])&&(t=e[2])&&(t=/Trident\\/([^\\s;]+)/.exec(t)))return t[1]}return""},goog.labs.userAgent.engine.getEngineTuple_=function(e){if(!goog.labs.userAgent.engine.isEdge())return e[1];for(var t=0;t<e.length;t++){var o=e[t];if("Edge"==o[0])return o}},goog.labs.userAgent.engine.isVersionOrHigher=function(e){return 0<=goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(),e)},goog.labs.userAgent.engine.getVersionForKey_=function(e,t){return(e=goog.array.find(e,(function(e){return t==e[0]})))&&e[1]||""},goog.labs.userAgent.platform={},goog.labs.userAgent.platform.isAndroid=function(){return goog.labs.userAgent.util.matchUserAgent("Android")},goog.labs.userAgent.platform.isIpod=function(){return goog.labs.userAgent.util.matchUserAgent("iPod")},goog.labs.userAgent.platform.isIphone=function(){return goog.labs.userAgent.util.matchUserAgent("iPhone")&&!goog.labs.userAgent.util.matchUserAgent("iPod")&&!goog.labs.userAgent.util.matchUserAgent("iPad")},goog.labs.userAgent.platform.isIpad=function(){return goog.labs.userAgent.util.matchUserAgent("iPad")},goog.labs.userAgent.platform.isIos=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpad()||goog.labs.userAgent.platform.isIpod()},goog.labs.userAgent.platform.isMacintosh=function(){return goog.labs.userAgent.util.matchUserAgent("Macintosh")},goog.labs.userAgent.platform.isLinux=function(){return goog.labs.userAgent.util.matchUserAgent("Linux")},goog.labs.userAgent.platform.isWindows=function(){return goog.labs.userAgent.util.matchUserAgent("Windows")},goog.labs.userAgent.platform.isChromeOS=function(){return goog.labs.userAgent.util.matchUserAgent("CrOS")},goog.labs.userAgent.platform.isChromecast=function(){return goog.labs.userAgent.util.matchUserAgent("CrKey")},goog.labs.userAgent.platform.isKaiOS=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase("KaiOS")},goog.labs.userAgent.platform.isGo2Phone=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase("GAFP")},goog.labs.userAgent.platform.getVersion=function(){var e=goog.labs.userAgent.util.getUserAgent(),t="";return goog.labs.userAgent.platform.isWindows()?t=(e=(t=/Windows (?:NT|Phone) ([0-9.]+)/).exec(e))?e[1]:"0.0":goog.labs.userAgent.platform.isIos()?t=(e=(t=/(?:iPhone|iPod|iPad|CPU)\\s+OS\\s+(\\S+)/).exec(e))&&e[1].replace(/_/g,"."):goog.labs.userAgent.platform.isMacintosh()?t=(e=(t=/Mac OS X ([0-9_.]+)/).exec(e))?e[1].replace(/_/g,"."):"10":goog.labs.userAgent.platform.isKaiOS()?t=(e=(t=/(?:KaiOS)\\/(\\S+)/i).exec(e))&&e[1]:goog.labs.userAgent.platform.isAndroid()?t=(e=(t=/Android\\s+([^\\);]+)(\\)|;)/).exec(e))&&e[1]:goog.labs.userAgent.platform.isChromeOS()&&(t=(e=(t=/(?:CrOS\\s+(?:i686|x86_64)\\s+([0-9.]+))/).exec(e))&&e[1]),t||""},goog.labs.userAgent.platform.isVersionOrHigher=function(e){return 0<=goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(),e)},goog.reflect={},goog.reflect.object=function(e,t){return t},goog.reflect.objectProperty=function(e,t){return e},goog.reflect.sinkValue=function(e){return goog.reflect.sinkValue[" "](e),e},goog.reflect.sinkValue[" "]=goog.nullFunction,goog.reflect.canAccessProperty=function(e,t){try{return goog.reflect.sinkValue(e[t]),!0}catch(e){}return!1},goog.reflect.cache=function(e,t,o,r){return r=r?r(t):t,Object.prototype.hasOwnProperty.call(e,r)?e[r]:e[r]=o(t)},goog.userAgent={},goog.userAgent.ASSUME_IE=!1,goog.userAgent.ASSUME_EDGE=!1,goog.userAgent.ASSUME_GECKO=!1,goog.userAgent.ASSUME_WEBKIT=!1,goog.userAgent.ASSUME_MOBILE_WEBKIT=!1,goog.userAgent.ASSUME_OPERA=!1,goog.userAgent.ASSUME_ANY_VERSION=!1,goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA,goog.userAgent.getUserAgentString=function(){return goog.labs.userAgent.util.getUserAgent()},goog.userAgent.getNavigatorTyped=function(){return goog.global.navigator||null},goog.userAgent.getNavigator=function(){return goog.userAgent.getNavigatorTyped()},goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.labs.userAgent.browser.isOpera(),goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.labs.userAgent.browser.isIE(),goog.userAgent.EDGE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_EDGE:goog.labs.userAgent.engine.isEdge(),goog.userAgent.EDGE_OR_IE=goog.userAgent.EDGE||goog.userAgent.IE,goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.labs.userAgent.engine.isGecko(),goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.labs.userAgent.engine.isWebKit(),goog.userAgent.isMobile_=function(){return goog.userAgent.WEBKIT&&goog.labs.userAgent.util.matchUserAgent("Mobile")},goog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.isMobile_(),goog.userAgent.SAFARI=goog.userAgent.WEBKIT,goog.userAgent.determinePlatform_=function(){var e=goog.userAgent.getNavigatorTyped();return e&&e.platform||""},goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_(),goog.userAgent.ASSUME_MAC=!1,goog.userAgent.ASSUME_WINDOWS=!1,goog.userAgent.ASSUME_LINUX=!1,goog.userAgent.ASSUME_X11=!1,goog.userAgent.ASSUME_ANDROID=!1,goog.userAgent.ASSUME_IPHONE=!1,goog.userAgent.ASSUME_IPAD=!1,goog.userAgent.ASSUME_IPOD=!1,goog.userAgent.ASSUME_KAIOS=!1,goog.userAgent.ASSUME_GO2PHONE=!1,goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11||goog.userAgent.ASSUME_ANDROID||goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD,goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.labs.userAgent.platform.isMacintosh(),goog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.labs.userAgent.platform.isWindows(),goog.userAgent.isLegacyLinux_=function(){return goog.labs.userAgent.platform.isLinux()||goog.labs.userAgent.platform.isChromeOS()},goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.isLegacyLinux_(),goog.userAgent.isX11_=function(){var e=goog.userAgent.getNavigatorTyped();return!!e&&goog.string.contains(e.appVersion||"","X11")},goog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.isX11_(),goog.userAgent.ANDROID=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_ANDROID:goog.labs.userAgent.platform.isAndroid(),goog.userAgent.IPHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE:goog.labs.userAgent.platform.isIphone(),goog.userAgent.IPAD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad(),goog.userAgent.IPOD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIpod(),goog.userAgent.IOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIos(),goog.userAgent.KAIOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_KAIOS:goog.labs.userAgent.platform.isKaiOS(),goog.userAgent.GO2PHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_GO2PHONE:goog.labs.userAgent.platform.isGo2Phone(),goog.userAgent.determineVersion_=function(){var e="",t=goog.userAgent.getVersionRegexResult_();return t&&(e=t?t[1]:""),goog.userAgent.IE&&null!=(t=goog.userAgent.getDocumentMode_())&&t>parseFloat(e)?String(t):e},goog.userAgent.getVersionRegexResult_=function(){var e=goog.userAgent.getUserAgentString();return goog.userAgent.GECKO?/rv:([^\\);]+)(\\)|;)/.exec(e):goog.userAgent.EDGE?/Edge\\/([\\d\\.]+)/.exec(e):goog.userAgent.IE?/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(e):goog.userAgent.WEBKIT?/WebKit\\/(\\S+)/.exec(e):goog.userAgent.OPERA?/(?:Version)[ \\/]?(\\S+)/.exec(e):void 0},goog.userAgent.getDocumentMode_=function(){var e=goog.global.document;return e?e.documentMode:void 0},goog.userAgent.VERSION=goog.userAgent.determineVersion_(),goog.userAgent.compare=function(e,t){return goog.string.compareVersions(e,t)},goog.userAgent.isVersionOrHigherCache_={},goog.userAgent.isVersionOrHigher=function(e){return goog.userAgent.ASSUME_ANY_VERSION||goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_,e,(function(){return 0<=goog.string.compareVersions(goog.userAgent.VERSION,e)}))},goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher,goog.userAgent.isDocumentModeOrHigher=function(e){return Number(goog.userAgent.DOCUMENT_MODE)>=e},goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher,goog.userAgent.DOCUMENT_MODE=function(){if(goog.global.document&&goog.userAgent.IE)return goog.userAgent.getDocumentMode_()}(),goog.userAgent.product={},goog.userAgent.product.ASSUME_FIREFOX=!1,goog.userAgent.product.ASSUME_IPHONE=!1,goog.userAgent.product.ASSUME_IPAD=!1,goog.userAgent.product.ASSUME_ANDROID=!1,goog.userAgent.product.ASSUME_CHROME=!1,goog.userAgent.product.ASSUME_SAFARI=!1,goog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI,goog.userAgent.product.OPERA=goog.userAgent.OPERA,goog.userAgent.product.IE=goog.userAgent.IE,goog.userAgent.product.EDGE=goog.userAgent.EDGE,goog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.labs.userAgent.browser.isFirefox(),goog.userAgent.product.isIphoneOrIpod_=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpod()},goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.isIphoneOrIpod_(),goog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad(),goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.labs.userAgent.browser.isAndroidBrowser(),goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.labs.userAgent.browser.isChrome(),goog.userAgent.product.isSafariDesktop_=function(){return goog.labs.userAgent.browser.isSafari()&&!goog.labs.userAgent.platform.isIos()},goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.isSafariDesktop_(),goog.crypt.base64={},goog.crypt.base64.DEFAULT_ALPHABET_COMMON_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",goog.crypt.base64.ENCODED_VALS=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+"+/=",goog.crypt.base64.ENCODED_VALS_WEBSAFE=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+"-_.",goog.crypt.base64.Alphabet={DEFAULT:0,NO_PADDING:1,WEBSAFE:2,WEBSAFE_DOT_PADDING:3,WEBSAFE_NO_PADDING:4},goog.crypt.base64.paddingChars_="=.",goog.crypt.base64.isPadding_=function(e){return goog.string.contains(goog.crypt.base64.paddingChars_,e)},goog.crypt.base64.byteToCharMaps_={};goog.crypt.base64.charToByteMap_=null,goog.crypt.base64.ASSUME_NATIVE_SUPPORT_=goog.userAgent.GECKO||goog.userAgent.WEBKIT&&!goog.userAgent.product.SAFARI||goog.userAgent.OPERA,goog.crypt.base64.HAS_NATIVE_ENCODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||"function"==typeof goog.global.btoa,goog.crypt.base64.HAS_NATIVE_DECODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||!goog.userAgent.product.SAFARI&&!goog.userAgent.IE&&"function"==typeof goog.global.atob,goog.crypt.base64.encodeByteArray=function(e,t){goog.asserts.assert(goog.isArrayLike(e),"encodeByteArray takes an array as a parameter"),void 0===t&&(t=goog.crypt.base64.Alphabet.DEFAULT),goog.crypt.base64.init_(),t=goog.crypt.base64.byteToCharMaps_[t];for(var o=[],r=0;r<e.length;r+=3){var n=e[r],s=r+1<e.length,i=s?e[r+1]:0,a=r+2<e.length,g=a?e[r+2]:0,p=n>>2;n=(3&n)<<4|i>>4,i=(15&i)<<2|g>>6,g&=63,a||(g=64,s||(i=64)),o.push(t[p],t[n],t[i]||"",t[g]||"")}return o.join("")},goog.crypt.base64.encodeString=function(e,t){return goog.crypt.base64.HAS_NATIVE_ENCODE_&&!t?goog.global.btoa(e):goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(e),t)},goog.crypt.base64.decodeString=function(e,t){if(goog.crypt.base64.HAS_NATIVE_DECODE_&&!t)return goog.global.atob(e);var o="";return goog.crypt.base64.decodeStringInternal_(e,(function(e){o+=String.fromCharCode(e)})),o},goog.crypt.base64.decodeStringToByteArray=function(e,t){var o=[];return goog.crypt.base64.decodeStringInternal_(e,(function(e){o.push(e)})),o},goog.crypt.base64.decodeStringToUint8Array=function(e){goog.asserts.assert(!goog.userAgent.IE||goog.userAgent.isVersionOrHigher("10"),"Browser does not support typed arrays");var t=e.length,o=3*t/4;o%3?o=Math.floor(o):goog.crypt.base64.isPadding_(e[t-1])&&(o=goog.crypt.base64.isPadding_(e[t-2])?o-2:o-1);var r=new Uint8Array(o),n=0;return goog.crypt.base64.decodeStringInternal_(e,(function(e){r[n++]=e})),r.subarray(0,n)},goog.crypt.base64.decodeStringInternal_=function(e,t){function o(t){for(;r<e.length;){var o=e.charAt(r++),n=goog.crypt.base64.charToByteMap_[o];if(null!=n)return n;if(!goog.string.isEmptyOrWhitespace(o))throw Error("Unknown base64 encoding at char: "+o)}return t}goog.crypt.base64.init_();for(var r=0;;){var n=o(-1),s=o(0),i=o(64),a=o(64);if(64===a&&-1===n)break;t(n<<2|s>>4),64!=i&&(t(s<<4&240|i>>2),64!=a&&t(i<<6&192|a))}},goog.crypt.base64.init_=function(){if(!goog.crypt.base64.charToByteMap_){goog.crypt.base64.charToByteMap_={};for(var e=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(""),t=["+/=","+/","-_=","-_.","-_"],o=0;5>o;o++){var r=e.concat(t[o].split(""));goog.crypt.base64.byteToCharMaps_[o]=r;for(var n=0;n<r.length;n++){var s=r[n],i=goog.crypt.base64.charToByteMap_[s];void 0===i?goog.crypt.base64.charToByteMap_[s]=n:goog.asserts.assert(i===n)}}}},jspb.utils={},jspb.utils.split64Low=0,jspb.utils.split64High=0,jspb.utils.splitUint64=function(e){var t=e>>>0;e=Math.floor((e-t)/jspb.BinaryConstants.TWO_TO_32)>>>0,jspb.utils.split64Low=t,jspb.utils.split64High=e},jspb.utils.splitInt64=function(e){var t=0>e,o=(e=Math.abs(e))>>>0;e=Math.floor((e-o)/jspb.BinaryConstants.TWO_TO_32),e>>>=0,t&&(e=~e>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++e&&(e=0))),jspb.utils.split64Low=o,jspb.utils.split64High=e},jspb.utils.splitZigzag64=function(e){var t=0>e;e=2*Math.abs(e),jspb.utils.splitUint64(e),e=jspb.utils.split64Low;var o=jspb.utils.split64High;t&&(0==e?0==o?o=e=4294967295:(o--,e=4294967295):e--),jspb.utils.split64Low=e,jspb.utils.split64High=o},jspb.utils.splitFloat32=function(e){var t=0>e?1:0;if(0===(e=t?-e:e))0<1/e?(jspb.utils.split64High=0,jspb.utils.split64Low=0):(jspb.utils.split64High=0,jspb.utils.split64Low=2147483648);else if(isNaN(e))jspb.utils.split64High=0,jspb.utils.split64Low=2147483647;else if(e>jspb.BinaryConstants.FLOAT32_MAX)jspb.utils.split64High=0,jspb.utils.split64Low=(t<<31|2139095040)>>>0;else if(e<jspb.BinaryConstants.FLOAT32_MIN)e=Math.round(e/Math.pow(2,-149)),jspb.utils.split64High=0,jspb.utils.split64Low=(t<<31|e)>>>0;else{var o=Math.floor(Math.log(e)/Math.LN2);e*=Math.pow(2,-o),16777216<=(e=Math.round(e*jspb.BinaryConstants.TWO_TO_23))&&++o,jspb.utils.split64High=0,jspb.utils.split64Low=(t<<31|o+127<<23|8388607&e)>>>0}},jspb.utils.splitFloat64=function(e){var t=0>e?1:0;if(0===(e=t?-e:e))jspb.utils.split64High=0<1/e?0:2147483648,jspb.utils.split64Low=0;else if(isNaN(e))jspb.utils.split64High=2147483647,jspb.utils.split64Low=4294967295;else if(e>jspb.BinaryConstants.FLOAT64_MAX)jspb.utils.split64High=(t<<31|2146435072)>>>0,jspb.utils.split64Low=0;else if(e<jspb.BinaryConstants.FLOAT64_MIN){var o=e/Math.pow(2,-1074);e=o/jspb.BinaryConstants.TWO_TO_32,jspb.utils.split64High=(t<<31|e)>>>0,jspb.utils.split64Low=o>>>0}else{var r=0;if(2<=(o=e))for(;2<=o&&1023>r;)r++,o/=2;else for(;1>o&&-1022<r;)o*=2,r--;e=(o=e*Math.pow(2,-r))*jspb.BinaryConstants.TWO_TO_20&1048575,o=o*jspb.BinaryConstants.TWO_TO_52>>>0,jspb.utils.split64High=(t<<31|r+1023<<20|e)>>>0,jspb.utils.split64Low=o}},jspb.utils.splitHash64=function(e){var t=e.charCodeAt(0),o=e.charCodeAt(1),r=e.charCodeAt(2),n=e.charCodeAt(3),s=e.charCodeAt(4),i=e.charCodeAt(5),a=e.charCodeAt(6);e=e.charCodeAt(7),jspb.utils.split64Low=t+(o<<8)+(r<<16)+(n<<24)>>>0,jspb.utils.split64High=s+(i<<8)+(a<<16)+(e<<24)>>>0},jspb.utils.joinUint64=function(e,t){return t*jspb.BinaryConstants.TWO_TO_32+(e>>>0)},jspb.utils.joinInt64=function(e,t){var o=2147483648&t;return o&&(t=~t>>>0,0==(e=1+~e>>>0)&&(t=t+1>>>0)),e=jspb.utils.joinUint64(e,t),o?-e:e},jspb.utils.toZigzag64=function(e,t,o){var r=t>>31;return o(e<<1^r,(t<<1|e>>>31)^r)},jspb.utils.joinZigzag64=function(e,t){return jspb.utils.fromZigzag64(e,t,jspb.utils.joinInt64)},jspb.utils.fromZigzag64=function(e,t,o){var r=-(1&e);return o((e>>>1|t<<31)^r,t>>>1^r)},jspb.utils.joinFloat32=function(e,t){t=2*(e>>31)+1;var o=e>>>23&255;return e&=8388607,255==o?e?NaN:1/0*t:0==o?t*Math.pow(2,-149)*e:t*Math.pow(2,o-150)*(e+Math.pow(2,23))},jspb.utils.joinFloat64=function(e,t){var o=2*(t>>31)+1,r=t>>>20&2047;return e=jspb.BinaryConstants.TWO_TO_32*(1048575&t)+e,2047==r?e?NaN:1/0*o:0==r?o*Math.pow(2,-1074)*e:o*Math.pow(2,r-1075)*(e+jspb.BinaryConstants.TWO_TO_52)},jspb.utils.joinHash64=function(e,t){return String.fromCharCode(e>>>0&255,e>>>8&255,e>>>16&255,e>>>24&255,t>>>0&255,t>>>8&255,t>>>16&255,t>>>24&255)},jspb.utils.DIGITS="0123456789abcdef".split(""),jspb.utils.ZERO_CHAR_CODE_=48,jspb.utils.A_CHAR_CODE_=97,jspb.utils.joinUnsignedDecimalString=function(e,t){function o(e,t){return e=e?String(e):"",t?"0000000".slice(e.length)+e:e}if(2097151>=t)return""+jspb.utils.joinUint64(e,t);var r=(e>>>24|t<<8)>>>0&16777215;return e=(16777215&e)+6777216*r+6710656*(t=t>>16&65535),r+=8147497*t,t*=2,1e7<=e&&(r+=Math.floor(e/1e7),e%=1e7),1e7<=r&&(t+=Math.floor(r/1e7),r%=1e7),o(t,0)+o(r,t)+o(e,1)},jspb.utils.joinSignedDecimalString=function(e,t){var o=2147483648&t;return o&&(t=~t+(0==(e=1+~e>>>0)?1:0)>>>0),e=jspb.utils.joinUnsignedDecimalString(e,t),o?"-"+e:e},jspb.utils.hash64ToDecimalString=function(e,t){jspb.utils.splitHash64(e),e=jspb.utils.split64Low;var o=jspb.utils.split64High;return t?jspb.utils.joinSignedDecimalString(e,o):jspb.utils.joinUnsignedDecimalString(e,o)},jspb.utils.hash64ArrayToDecimalStrings=function(e,t){for(var o=Array(e.length),r=0;r<e.length;r++)o[r]=jspb.utils.hash64ToDecimalString(e[r],t);return o},jspb.utils.decimalStringToHash64=function(e){function t(e,t){for(var o=0;8>o&&(1!==e||0<t);o++)t=e*r[o]+t,r[o]=255&t,t>>>=8}goog.asserts.assert(0<e.length);var o=!1;"-"===e[0]&&(o=!0,e=e.slice(1));for(var r=[0,0,0,0,0,0,0,0],n=0;n<e.length;n++)t(10,e.charCodeAt(n)-jspb.utils.ZERO_CHAR_CODE_);return o&&(function(){for(var e=0;8>e;e++)r[e]=255&~r[e]}(),t(1,1)),goog.crypt.byteArrayToString(r)},jspb.utils.splitDecimalString=function(e){jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(e))},jspb.utils.toHexDigit_=function(e){return String.fromCharCode(10>e?jspb.utils.ZERO_CHAR_CODE_+e:jspb.utils.A_CHAR_CODE_-10+e)},jspb.utils.fromHexCharCode_=function(e){return e>=jspb.utils.A_CHAR_CODE_?e-jspb.utils.A_CHAR_CODE_+10:e-jspb.utils.ZERO_CHAR_CODE_},jspb.utils.hash64ToHexString=function(e){var t=Array(18);t[0]="0",t[1]="x";for(var o=0;8>o;o++){var r=e.charCodeAt(7-o);t[2*o+2]=jspb.utils.toHexDigit_(r>>4),t[2*o+3]=jspb.utils.toHexDigit_(15&r)}return t.join("")},jspb.utils.hexStringToHash64=function(e){e=e.toLowerCase(),goog.asserts.assert(18==e.length),goog.asserts.assert("0"==e[0]),goog.asserts.assert("x"==e[1]);for(var t="",o=0;8>o;o++){var r=jspb.utils.fromHexCharCode_(e.charCodeAt(2*o+2)),n=jspb.utils.fromHexCharCode_(e.charCodeAt(2*o+3));t=String.fromCharCode(16*r+n)+t}return t},jspb.utils.hash64ToNumber=function(e,t){jspb.utils.splitHash64(e),e=jspb.utils.split64Low;var o=jspb.utils.split64High;return t?jspb.utils.joinInt64(e,o):jspb.utils.joinUint64(e,o)},jspb.utils.numberToHash64=function(e){return jspb.utils.splitInt64(e),jspb.utils.joinHash64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.utils.countVarints=function(e,t,o){for(var r=0,n=t;n<o;n++)r+=e[n]>>7;return o-t-r},jspb.utils.countVarintFields=function(e,t,o,r){var n=0;if(128>(r=8*r+jspb.BinaryConstants.WireType.VARINT))for(;t<o&&e[t++]==r;)for(n++;;){var s=e[t++];if(0==(128&s))break}else for(;t<o;){for(s=r;128<s;){if(e[t]!=(127&s|128))return n;t++,s>>=7}if(e[t++]!=s)break;for(n++;0!=(128&(s=e[t++])););}return n},jspb.utils.countFixedFields_=function(e,t,o,r,n){var s=0;if(128>r)for(;t<o&&e[t++]==r;)s++,t+=n;else for(;t<o;){for(var i=r;128<i;){if(e[t++]!=(127&i|128))return s;i>>=7}if(e[t++]!=i)break;s++,t+=n}return s},jspb.utils.countFixed32Fields=function(e,t,o,r){return jspb.utils.countFixedFields_(e,t,o,8*r+jspb.BinaryConstants.WireType.FIXED32,4)},jspb.utils.countFixed64Fields=function(e,t,o,r){return jspb.utils.countFixedFields_(e,t,o,8*r+jspb.BinaryConstants.WireType.FIXED64,8)},jspb.utils.countDelimitedFields=function(e,t,o,r){var n=0;for(r=8*r+jspb.BinaryConstants.WireType.DELIMITED;t<o;){for(var s=r;128<s;){if(e[t++]!=(127&s|128))return n;s>>=7}if(e[t++]!=s)break;n++;for(var i=0,a=1;i+=(127&(s=e[t++]))*a,a*=128,0!=(128&s););t+=i}return n},jspb.utils.debugBytesToTextFormat=function(e){var t=\'"\';if(e){e=jspb.utils.byteSourceToUint8Array(e);for(var o=0;o<e.length;o++)t+="\\\\x",16>e[o]&&(t+="0"),t+=e[o].toString(16)}return t+\'"\'},jspb.utils.debugScalarToTextFormat=function(e){return"string"==typeof e?goog.string.quote(e):e.toString()},jspb.utils.stringToByteArray=function(e){for(var t=new Uint8Array(e.length),o=0;o<e.length;o++){var r=e.charCodeAt(o);if(255<r)throw Error("Conversion error: string contains codepoint outside of byte range");t[o]=r}return t},jspb.utils.byteSourceToUint8Array=function(e){return e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||"undefined"!=typeof Buffer&&e.constructor===Buffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?goog.crypt.base64.decodeStringToUint8Array(e):(goog.asserts.fail("Type not convertible to Uint8Array."),new Uint8Array(0))},jspb.BinaryDecoder=function(e,t,o){this.bytes_=null,this.cursor_=this.end_=this.start_=0,this.error_=!1,e&&this.setBlock(e,t,o)},jspb.BinaryDecoder.instanceCache_=[],jspb.BinaryDecoder.alloc=function(e,t,o){if(jspb.BinaryDecoder.instanceCache_.length){var r=jspb.BinaryDecoder.instanceCache_.pop();return e&&r.setBlock(e,t,o),r}return new jspb.BinaryDecoder(e,t,o)},jspb.BinaryDecoder.prototype.free=function(){this.clear(),100>jspb.BinaryDecoder.instanceCache_.length&&jspb.BinaryDecoder.instanceCache_.push(this)},jspb.BinaryDecoder.prototype.clone=function(){return jspb.BinaryDecoder.alloc(this.bytes_,this.start_,this.end_-this.start_)},jspb.BinaryDecoder.prototype.clear=function(){this.bytes_=null,this.cursor_=this.end_=this.start_=0,this.error_=!1},jspb.BinaryDecoder.prototype.getBuffer=function(){return this.bytes_},jspb.BinaryDecoder.prototype.setBlock=function(e,t,o){this.bytes_=jspb.utils.byteSourceToUint8Array(e),this.start_=void 0!==t?t:0,this.end_=void 0!==o?this.start_+o:this.bytes_.length,this.cursor_=this.start_},jspb.BinaryDecoder.prototype.getEnd=function(){return this.end_},jspb.BinaryDecoder.prototype.setEnd=function(e){this.end_=e},jspb.BinaryDecoder.prototype.reset=function(){this.cursor_=this.start_},jspb.BinaryDecoder.prototype.getCursor=function(){return this.cursor_},jspb.BinaryDecoder.prototype.setCursor=function(e){this.cursor_=e},jspb.BinaryDecoder.prototype.advance=function(e){this.cursor_+=e,goog.asserts.assert(this.cursor_<=this.end_)},jspb.BinaryDecoder.prototype.atEnd=function(){return this.cursor_==this.end_},jspb.BinaryDecoder.prototype.pastEnd=function(){return this.cursor_>this.end_},jspb.BinaryDecoder.prototype.getError=function(){return this.error_||0>this.cursor_||this.cursor_>this.end_},jspb.BinaryDecoder.prototype.readSplitVarint64=function(e){for(var t=128,o=0,r=0,n=0;4>n&&128<=t;n++)o|=(127&(t=this.bytes_[this.cursor_++]))<<7*n;if(128<=t&&(o|=(127&(t=this.bytes_[this.cursor_++]))<<28,r|=(127&t)>>4),128<=t)for(n=0;5>n&&128<=t;n++)r|=(127&(t=this.bytes_[this.cursor_++]))<<7*n+3;if(128>t)return e(o>>>0,r>>>0);goog.asserts.fail("Failed to read varint, encoding is invalid."),this.error_=!0},jspb.BinaryDecoder.prototype.readSplitZigzagVarint64=function(e){return this.readSplitVarint64((function(t,o){return jspb.utils.fromZigzag64(t,o,e)}))},jspb.BinaryDecoder.prototype.readSplitFixed64=function(e){var t=this.bytes_,o=this.cursor_;this.cursor_+=8;for(var r=0,n=0,s=o+7;s>=o;s--)r=r<<8|t[s],n=n<<8|t[s+4];return e(r,n)},jspb.BinaryDecoder.prototype.skipVarint=function(){for(;128&this.bytes_[this.cursor_];)this.cursor_++;this.cursor_++},jspb.BinaryDecoder.prototype.unskipVarint=function(e){for(;128<e;)this.cursor_--,e>>>=7;this.cursor_--},jspb.BinaryDecoder.prototype.readUnsignedVarint32=function(){var e=this.bytes_,t=e[this.cursor_+0],o=127&t;return 128>t?(this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(127&(t=e[this.cursor_+1]))<<7,128>t?(this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(127&(t=e[this.cursor_+2]))<<14,128>t?(this.cursor_+=3,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(127&(t=e[this.cursor_+3]))<<21,128>t?(this.cursor_+=4,goog.asserts.assert(this.cursor_<=this.end_),o):(o|=(15&(t=e[this.cursor_+4]))<<28,128>t?(this.cursor_+=5,goog.asserts.assert(this.cursor_<=this.end_),o>>>0):(this.cursor_+=5,128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&128<=e[this.cursor_++]&&goog.asserts.assert(!1),goog.asserts.assert(this.cursor_<=this.end_),o)))))},jspb.BinaryDecoder.prototype.readSignedVarint32=jspb.BinaryDecoder.prototype.readUnsignedVarint32,jspb.BinaryDecoder.prototype.readUnsignedVarint32String=function(){return this.readUnsignedVarint32().toString()},jspb.BinaryDecoder.prototype.readSignedVarint32String=function(){return this.readSignedVarint32().toString()},jspb.BinaryDecoder.prototype.readZigzagVarint32=function(){var e=this.readUnsignedVarint32();return e>>>1^-(1&e)},jspb.BinaryDecoder.prototype.readUnsignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinUint64)},jspb.BinaryDecoder.prototype.readUnsignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString)},jspb.BinaryDecoder.prototype.readSignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinInt64)},jspb.BinaryDecoder.prototype.readSignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinSignedDecimalString)},jspb.BinaryDecoder.prototype.readZigzagVarint64=function(){return this.readSplitVarint64(jspb.utils.joinZigzag64)},jspb.BinaryDecoder.prototype.readZigzagVarintHash64=function(){return this.readSplitZigzagVarint64(jspb.utils.joinHash64)},jspb.BinaryDecoder.prototype.readZigzagVarint64String=function(){return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString)},jspb.BinaryDecoder.prototype.readUint8=function(){var e=this.bytes_[this.cursor_+0];return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),e},jspb.BinaryDecoder.prototype.readUint16=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1];return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),e<<0|t<<8},jspb.BinaryDecoder.prototype.readUint32=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1],o=this.bytes_[this.cursor_+2],r=this.bytes_[this.cursor_+3];return this.cursor_+=4,goog.asserts.assert(this.cursor_<=this.end_),(e<<0|t<<8|o<<16|r<<24)>>>0},jspb.BinaryDecoder.prototype.readUint64=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinUint64(e,t)},jspb.BinaryDecoder.prototype.readUint64String=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinUnsignedDecimalString(e,t)},jspb.BinaryDecoder.prototype.readInt8=function(){var e=this.bytes_[this.cursor_+0];return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),e<<24>>24},jspb.BinaryDecoder.prototype.readInt16=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1];return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),(e<<0|t<<8)<<16>>16},jspb.BinaryDecoder.prototype.readInt32=function(){var e=this.bytes_[this.cursor_+0],t=this.bytes_[this.cursor_+1],o=this.bytes_[this.cursor_+2],r=this.bytes_[this.cursor_+3];return this.cursor_+=4,goog.asserts.assert(this.cursor_<=this.end_),e<<0|t<<8|o<<16|r<<24},jspb.BinaryDecoder.prototype.readInt64=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinInt64(e,t)},jspb.BinaryDecoder.prototype.readInt64String=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinSignedDecimalString(e,t)},jspb.BinaryDecoder.prototype.readFloat=function(){var e=this.readUint32();return jspb.utils.joinFloat32(e,0)},jspb.BinaryDecoder.prototype.readDouble=function(){var e=this.readUint32(),t=this.readUint32();return jspb.utils.joinFloat64(e,t)},jspb.BinaryDecoder.prototype.readBool=function(){return!!this.bytes_[this.cursor_++]},jspb.BinaryDecoder.prototype.readEnum=function(){return this.readSignedVarint32()},jspb.BinaryDecoder.prototype.readString=function(e){var t=this.bytes_,o=this.cursor_;e=o+e;for(var r=[],n="";o<e;){var s=t[o++];if(128>s)r.push(s);else{if(192>s)continue;if(224>s){var i=t[o++];r.push((31&s)<<6|63&i)}else if(240>s){i=t[o++];var a=t[o++];r.push((15&s)<<12|(63&i)<<6|63&a)}else 248>s&&(s=(7&s)<<18|(63&(i=t[o++]))<<12|(63&(a=t[o++]))<<6|63&t[o++],s-=65536,r.push(55296+(s>>10&1023),56320+(1023&s)))}8192<=r.length&&(n+=String.fromCharCode.apply(null,r),r.length=0)}return n+=goog.crypt.byteArrayToString(r),this.cursor_=o,n},jspb.BinaryDecoder.prototype.readStringWithLength=function(){var e=this.readUnsignedVarint32();return this.readString(e)},jspb.BinaryDecoder.prototype.readBytes=function(e){if(0>e||this.cursor_+e>this.bytes_.length)return this.error_=!0,goog.asserts.fail("Invalid byte length!"),new Uint8Array(0);var t=this.bytes_.subarray(this.cursor_,this.cursor_+e);return this.cursor_+=e,goog.asserts.assert(this.cursor_<=this.end_),t},jspb.BinaryDecoder.prototype.readVarintHash64=function(){return this.readSplitVarint64(jspb.utils.joinHash64)},jspb.BinaryDecoder.prototype.readFixedHash64=function(){var e=this.bytes_,t=this.cursor_,o=e[t+0],r=e[t+1],n=e[t+2],s=e[t+3],i=e[t+4],a=e[t+5],g=e[t+6];return e=e[t+7],this.cursor_+=8,String.fromCharCode(o,r,n,s,i,a,g,e)},jspb.BinaryReader=function(e,t,o){this.decoder_=jspb.BinaryDecoder.alloc(e,t,o),this.fieldCursor_=this.decoder_.getCursor(),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID,this.error_=!1,this.readCallbacks_=null},jspb.BinaryReader.instanceCache_=[],jspb.BinaryReader.alloc=function(e,t,o){if(jspb.BinaryReader.instanceCache_.length){var r=jspb.BinaryReader.instanceCache_.pop();return e&&r.decoder_.setBlock(e,t,o),r}return new jspb.BinaryReader(e,t,o)},jspb.BinaryReader.prototype.alloc=jspb.BinaryReader.alloc,jspb.BinaryReader.prototype.free=function(){this.decoder_.clear(),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID,this.error_=!1,this.readCallbacks_=null,100>jspb.BinaryReader.instanceCache_.length&&jspb.BinaryReader.instanceCache_.push(this)},jspb.BinaryReader.prototype.getFieldCursor=function(){return this.fieldCursor_},jspb.BinaryReader.prototype.getCursor=function(){return this.decoder_.getCursor()},jspb.BinaryReader.prototype.getBuffer=function(){return this.decoder_.getBuffer()},jspb.BinaryReader.prototype.getFieldNumber=function(){return this.nextField_},jspb.BinaryReader.prototype.getWireType=function(){return this.nextWireType_},jspb.BinaryReader.prototype.isDelimited=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED},jspb.BinaryReader.prototype.isEndGroup=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP},jspb.BinaryReader.prototype.getError=function(){return this.error_||this.decoder_.getError()},jspb.BinaryReader.prototype.setBlock=function(e,t,o){this.decoder_.setBlock(e,t,o),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID},jspb.BinaryReader.prototype.reset=function(){this.decoder_.reset(),this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER,this.nextWireType_=jspb.BinaryConstants.WireType.INVALID},jspb.BinaryReader.prototype.advance=function(e){this.decoder_.advance(e)},jspb.BinaryReader.prototype.nextField=function(){if(this.decoder_.atEnd())return!1;if(this.getError())return goog.asserts.fail("Decoder hit an error"),!1;this.fieldCursor_=this.decoder_.getCursor();var e=this.decoder_.readUnsignedVarint32(),t=e>>>3;return(e&=7)!=jspb.BinaryConstants.WireType.VARINT&&e!=jspb.BinaryConstants.WireType.FIXED32&&e!=jspb.BinaryConstants.WireType.FIXED64&&e!=jspb.BinaryConstants.WireType.DELIMITED&&e!=jspb.BinaryConstants.WireType.START_GROUP&&e!=jspb.BinaryConstants.WireType.END_GROUP?(goog.asserts.fail("Invalid wire type: %s (at position %s)",e,this.fieldCursor_),this.error_=!0,!1):(this.nextField_=t,this.nextWireType_=e,!0)},jspb.BinaryReader.prototype.unskipHeader=function(){this.decoder_.unskipVarint(this.nextField_<<3|this.nextWireType_)},jspb.BinaryReader.prototype.skipMatchingFields=function(){var e=this.nextField_;for(this.unskipHeader();this.nextField()&&this.getFieldNumber()==e;)this.skipField();this.decoder_.atEnd()||this.unskipHeader()},jspb.BinaryReader.prototype.skipVarintField=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.VARINT?(goog.asserts.fail("Invalid wire type for skipVarintField"),this.skipField()):this.decoder_.skipVarint()},jspb.BinaryReader.prototype.skipDelimitedField=function(){if(this.nextWireType_!=jspb.BinaryConstants.WireType.DELIMITED)goog.asserts.fail("Invalid wire type for skipDelimitedField"),this.skipField();else{var e=this.decoder_.readUnsignedVarint32();this.decoder_.advance(e)}},jspb.BinaryReader.prototype.skipFixed32Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED32?(goog.asserts.fail("Invalid wire type for skipFixed32Field"),this.skipField()):this.decoder_.advance(4)},jspb.BinaryReader.prototype.skipFixed64Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED64?(goog.asserts.fail("Invalid wire type for skipFixed64Field"),this.skipField()):this.decoder_.advance(8)},jspb.BinaryReader.prototype.skipGroup=function(){for(var e=this.nextField_;;){if(!this.nextField()){goog.asserts.fail("Unmatched start-group tag: stream EOF"),this.error_=!0;break}if(this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP){this.nextField_!=e&&(goog.asserts.fail("Unmatched end-group tag"),this.error_=!0);break}this.skipField()}},jspb.BinaryReader.prototype.skipField=function(){switch(this.nextWireType_){case jspb.BinaryConstants.WireType.VARINT:this.skipVarintField();break;case jspb.BinaryConstants.WireType.FIXED64:this.skipFixed64Field();break;case jspb.BinaryConstants.WireType.DELIMITED:this.skipDelimitedField();break;case jspb.BinaryConstants.WireType.FIXED32:this.skipFixed32Field();break;case jspb.BinaryConstants.WireType.START_GROUP:this.skipGroup();break;default:goog.asserts.fail("Invalid wire encoding for field.")}},jspb.BinaryReader.prototype.registerReadCallback=function(e,t){null===this.readCallbacks_&&(this.readCallbacks_={}),goog.asserts.assert(!this.readCallbacks_[e]),this.readCallbacks_[e]=t},jspb.BinaryReader.prototype.runReadCallback=function(e){return goog.asserts.assert(null!==this.readCallbacks_),e=this.readCallbacks_[e],goog.asserts.assert(e),e(this)},jspb.BinaryReader.prototype.readAny=function(e){this.nextWireType_=jspb.BinaryConstants.FieldTypeToWireType(e);var t=jspb.BinaryConstants.FieldType;switch(e){case t.DOUBLE:return this.readDouble();case t.FLOAT:return this.readFloat();case t.INT64:return this.readInt64();case t.UINT64:return this.readUint64();case t.INT32:return this.readInt32();case t.FIXED64:return this.readFixed64();case t.FIXED32:return this.readFixed32();case t.BOOL:return this.readBool();case t.STRING:return this.readString();case t.GROUP:goog.asserts.fail("Group field type not supported in readAny()");case t.MESSAGE:goog.asserts.fail("Message field type not supported in readAny()");case t.BYTES:return this.readBytes();case t.UINT32:return this.readUint32();case t.ENUM:return this.readEnum();case t.SFIXED32:return this.readSfixed32();case t.SFIXED64:return this.readSfixed64();case t.SINT32:return this.readSint32();case t.SINT64:return this.readSint64();case t.FHASH64:return this.readFixedHash64();case t.VHASH64:return this.readVarintHash64();default:goog.asserts.fail("Invalid field type in readAny()")}return 0},jspb.BinaryReader.prototype.readMessage=function(e,t){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var o=this.decoder_.getEnd(),r=this.decoder_.readUnsignedVarint32();r=this.decoder_.getCursor()+r,this.decoder_.setEnd(r),t(e,this),this.decoder_.setCursor(r),this.decoder_.setEnd(o)},jspb.BinaryReader.prototype.readGroup=function(e,t,o){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.START_GROUP),goog.asserts.assert(this.nextField_==e),o(t,this),this.error_||this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP||(goog.asserts.fail("Group submessage did not end with an END_GROUP tag"),this.error_=!0)},jspb.BinaryReader.prototype.getFieldDecoder=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var e=this.decoder_.readUnsignedVarint32(),t=this.decoder_.getCursor(),o=t+e;return e=jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(),t,e),this.decoder_.setCursor(o),e},jspb.BinaryReader.prototype.readInt32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint32()},jspb.BinaryReader.prototype.readInt32String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint32String()},jspb.BinaryReader.prototype.readInt64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint64()},jspb.BinaryReader.prototype.readInt64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint64String()},jspb.BinaryReader.prototype.readUint32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint32()},jspb.BinaryReader.prototype.readUint32String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint32String()},jspb.BinaryReader.prototype.readUint64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint64()},jspb.BinaryReader.prototype.readUint64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readUnsignedVarint64String()},jspb.BinaryReader.prototype.readSint32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarint32()},jspb.BinaryReader.prototype.readSint64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarint64()},jspb.BinaryReader.prototype.readSint64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarint64String()},jspb.BinaryReader.prototype.readFixed32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readUint32()},jspb.BinaryReader.prototype.readFixed64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readUint64()},jspb.BinaryReader.prototype.readFixed64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readUint64String()},jspb.BinaryReader.prototype.readSfixed32=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readInt32()},jspb.BinaryReader.prototype.readSfixed32String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readInt32().toString()},jspb.BinaryReader.prototype.readSfixed64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readInt64()},jspb.BinaryReader.prototype.readSfixed64String=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readInt64String()},jspb.BinaryReader.prototype.readFloat=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32),this.decoder_.readFloat()},jspb.BinaryReader.prototype.readDouble=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readDouble()},jspb.BinaryReader.prototype.readBool=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),!!this.decoder_.readUnsignedVarint32()},jspb.BinaryReader.prototype.readEnum=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSignedVarint64()},jspb.BinaryReader.prototype.readString=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var e=this.decoder_.readUnsignedVarint32();return this.decoder_.readString(e)},jspb.BinaryReader.prototype.readBytes=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var e=this.decoder_.readUnsignedVarint32();return this.decoder_.readBytes(e)},jspb.BinaryReader.prototype.readVarintHash64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readVarintHash64()},jspb.BinaryReader.prototype.readSintHash64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readZigzagVarintHash64()},jspb.BinaryReader.prototype.readSplitVarint64=function(e){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSplitVarint64(e)},jspb.BinaryReader.prototype.readSplitZigzagVarint64=function(e){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT),this.decoder_.readSplitVarint64((function(t,o){return jspb.utils.fromZigzag64(t,o,e)}))},jspb.BinaryReader.prototype.readFixedHash64=function(){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readFixedHash64()},jspb.BinaryReader.prototype.readSplitFixed64=function(e){return goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64),this.decoder_.readSplitFixed64(e)},jspb.BinaryReader.prototype.readPackedField_=function(e){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var t=this.decoder_.readUnsignedVarint32();t=this.decoder_.getCursor()+t;for(var o=[];this.decoder_.getCursor()<t;)o.push(e.call(this.decoder_));return o},jspb.BinaryReader.prototype.readPackedInt32=function(){return this.readPackedField_(this.decoder_.readSignedVarint32)},jspb.BinaryReader.prototype.readPackedInt32String=function(){return this.readPackedField_(this.decoder_.readSignedVarint32String)},jspb.BinaryReader.prototype.readPackedInt64=function(){return this.readPackedField_(this.decoder_.readSignedVarint64)},jspb.BinaryReader.prototype.readPackedInt64String=function(){return this.readPackedField_(this.decoder_.readSignedVarint64String)},jspb.BinaryReader.prototype.readPackedUint32=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32)},jspb.BinaryReader.prototype.readPackedUint32String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32String)},jspb.BinaryReader.prototype.readPackedUint64=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64)},jspb.BinaryReader.prototype.readPackedUint64String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64String)},jspb.BinaryReader.prototype.readPackedSint32=function(){return this.readPackedField_(this.decoder_.readZigzagVarint32)},jspb.BinaryReader.prototype.readPackedSint64=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64)},jspb.BinaryReader.prototype.readPackedSint64String=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64String)},jspb.BinaryReader.prototype.readPackedFixed32=function(){return this.readPackedField_(this.decoder_.readUint32)},jspb.BinaryReader.prototype.readPackedFixed64=function(){return this.readPackedField_(this.decoder_.readUint64)},jspb.BinaryReader.prototype.readPackedFixed64String=function(){return this.readPackedField_(this.decoder_.readUint64String)},jspb.BinaryReader.prototype.readPackedSfixed32=function(){return this.readPackedField_(this.decoder_.readInt32)},jspb.BinaryReader.prototype.readPackedSfixed64=function(){return this.readPackedField_(this.decoder_.readInt64)},jspb.BinaryReader.prototype.readPackedSfixed64String=function(){return this.readPackedField_(this.decoder_.readInt64String)},jspb.BinaryReader.prototype.readPackedFloat=function(){return this.readPackedField_(this.decoder_.readFloat)},jspb.BinaryReader.prototype.readPackedDouble=function(){return this.readPackedField_(this.decoder_.readDouble)},jspb.BinaryReader.prototype.readPackedBool=function(){return this.readPackedField_(this.decoder_.readBool)},jspb.BinaryReader.prototype.readPackedEnum=function(){return this.readPackedField_(this.decoder_.readEnum)},jspb.BinaryReader.prototype.readPackedVarintHash64=function(){return this.readPackedField_(this.decoder_.readVarintHash64)},jspb.BinaryReader.prototype.readPackedFixedHash64=function(){return this.readPackedField_(this.decoder_.readFixedHash64)},jspb.BinaryEncoder=function(){this.buffer_=[]},jspb.BinaryEncoder.prototype.length=function(){return this.buffer_.length},jspb.BinaryEncoder.prototype.end=function(){var e=this.buffer_;return this.buffer_=[],e},jspb.BinaryEncoder.prototype.writeSplitVarint64=function(e,t){for(goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(t==Math.floor(t)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32),goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32);0<t||127<e;)this.buffer_.push(127&e|128),e=(e>>>7|t<<25)>>>0,t>>>=7;this.buffer_.push(e)},jspb.BinaryEncoder.prototype.writeSplitFixed64=function(e,t){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(t==Math.floor(t)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32),goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeUint32(e),this.writeUint32(t)},jspb.BinaryEncoder.prototype.writeUnsignedVarint32=function(e){for(goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32);127<e;)this.buffer_.push(127&e|128),e>>>=7;this.buffer_.push(e)},jspb.BinaryEncoder.prototype.writeSignedVarint32=function(e){if(goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),0<=e)this.writeUnsignedVarint32(e);else{for(var t=0;9>t;t++)this.buffer_.push(127&e|128),e>>=7;this.buffer_.push(1)}},jspb.BinaryEncoder.prototype.writeUnsignedVarint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_64),jspb.utils.splitInt64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeSignedVarint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_63&&e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitInt64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeZigzagVarint32=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),this.writeUnsignedVarint32((e<<1^e>>31)>>>0)},jspb.BinaryEncoder.prototype.writeZigzagVarint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_63&&e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitZigzag64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeZigzagVarint64String=function(e){this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(e))},jspb.BinaryEncoder.prototype.writeZigzagVarintHash64=function(e){var t=this;jspb.utils.splitHash64(e),jspb.utils.toZigzag64(jspb.utils.split64Low,jspb.utils.split64High,(function(e,o){t.writeSplitVarint64(e>>>0,o>>>0)}))},jspb.BinaryEncoder.prototype.writeUint8=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&256>e),this.buffer_.push(e>>>0&255)},jspb.BinaryEncoder.prototype.writeUint16=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&65536>e),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255)},jspb.BinaryEncoder.prototype.writeUint32=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_32),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255),this.buffer_.push(e>>>16&255),this.buffer_.push(e>>>24&255)},jspb.BinaryEncoder.prototype.writeUint64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(0<=e&&e<jspb.BinaryConstants.TWO_TO_64),jspb.utils.splitUint64(e),this.writeUint32(jspb.utils.split64Low),this.writeUint32(jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeInt8=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(-128<=e&&128>e),this.buffer_.push(e>>>0&255)},jspb.BinaryEncoder.prototype.writeInt16=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(-32768<=e&&32768>e),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255)},jspb.BinaryEncoder.prototype.writeInt32=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),this.buffer_.push(e>>>0&255),this.buffer_.push(e>>>8&255),this.buffer_.push(e>>>16&255),this.buffer_.push(e>>>24&255)},jspb.BinaryEncoder.prototype.writeInt64=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_63&&e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitInt64(e),this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeInt64String=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(+e>=-jspb.BinaryConstants.TWO_TO_63&&+e<jspb.BinaryConstants.TWO_TO_63),jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(e)),this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeFloat=function(e){goog.asserts.assert(1/0===e||-1/0===e||isNaN(e)||e>=-jspb.BinaryConstants.FLOAT32_MAX&&e<=jspb.BinaryConstants.FLOAT32_MAX),jspb.utils.splitFloat32(e),this.writeUint32(jspb.utils.split64Low)},jspb.BinaryEncoder.prototype.writeDouble=function(e){goog.asserts.assert(1/0===e||-1/0===e||isNaN(e)||e>=-jspb.BinaryConstants.FLOAT64_MAX&&e<=jspb.BinaryConstants.FLOAT64_MAX),jspb.utils.splitFloat64(e),this.writeUint32(jspb.utils.split64Low),this.writeUint32(jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeBool=function(e){goog.asserts.assert("boolean"==typeof e||"number"==typeof e),this.buffer_.push(e?1:0)},jspb.BinaryEncoder.prototype.writeEnum=function(e){goog.asserts.assert(e==Math.floor(e)),goog.asserts.assert(e>=-jspb.BinaryConstants.TWO_TO_31&&e<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32(e)},jspb.BinaryEncoder.prototype.writeBytes=function(e){this.buffer_.push.apply(this.buffer_,e)},jspb.BinaryEncoder.prototype.writeVarintHash64=function(e){jspb.utils.splitHash64(e),this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeFixedHash64=function(e){jspb.utils.splitHash64(e),this.writeUint32(jspb.utils.split64Low),this.writeUint32(jspb.utils.split64High)},jspb.BinaryEncoder.prototype.writeString=function(e){for(var t=this.buffer_.length,o=0;o<e.length;o++){var r=e.charCodeAt(o);if(128>r)this.buffer_.push(r);else if(2048>r)this.buffer_.push(r>>6|192),this.buffer_.push(63&r|128);else if(65536>r)if(55296<=r&&56319>=r&&o+1<e.length){var n=e.charCodeAt(o+1);56320<=n&&57343>=n&&(r=1024*(r-55296)+n-56320+65536,this.buffer_.push(r>>18|240),this.buffer_.push(r>>12&63|128),this.buffer_.push(r>>6&63|128),this.buffer_.push(63&r|128),o++)}else this.buffer_.push(r>>12|224),this.buffer_.push(r>>6&63|128),this.buffer_.push(63&r|128)}return this.buffer_.length-t},jspb.arith={},jspb.arith.UInt64=function(e,t){this.lo=e,this.hi=t},jspb.arith.UInt64.prototype.cmp=function(e){return this.hi<e.hi||this.hi==e.hi&&this.lo<e.lo?-1:this.hi==e.hi&&this.lo==e.lo?0:1},jspb.arith.UInt64.prototype.rightShift=function(){return new jspb.arith.UInt64((this.lo>>>1|(1&this.hi)<<31)>>>0,this.hi>>>1>>>0)},jspb.arith.UInt64.prototype.leftShift=function(){return new jspb.arith.UInt64(this.lo<<1>>>0,(this.hi<<1|this.lo>>>31)>>>0)},jspb.arith.UInt64.prototype.msb=function(){return!!(2147483648&this.hi)},jspb.arith.UInt64.prototype.lsb=function(){return!!(1&this.lo)},jspb.arith.UInt64.prototype.zero=function(){return 0==this.lo&&0==this.hi},jspb.arith.UInt64.prototype.add=function(e){return new jspb.arith.UInt64((this.lo+e.lo&4294967295)>>>0>>>0,((this.hi+e.hi&4294967295)>>>0)+(4294967296<=this.lo+e.lo?1:0)>>>0)},jspb.arith.UInt64.prototype.sub=function(e){return new jspb.arith.UInt64((this.lo-e.lo&4294967295)>>>0>>>0,((this.hi-e.hi&4294967295)>>>0)-(0>this.lo-e.lo?1:0)>>>0)},jspb.arith.UInt64.mul32x32=function(e,t){var o=65535&e,r=65535&t,n=t>>>16;for(t=o*r+65536*(o*n&65535)+65536*((e>>>=16)*r&65535),o=e*n+(o*n>>>16)+(e*r>>>16);4294967296<=t;)t-=4294967296,o+=1;return new jspb.arith.UInt64(t>>>0,o>>>0)},jspb.arith.UInt64.prototype.mul=function(e){var t=jspb.arith.UInt64.mul32x32(this.lo,e);return(e=jspb.arith.UInt64.mul32x32(this.hi,e)).hi=e.lo,e.lo=0,t.add(e)},jspb.arith.UInt64.prototype.div=function(e){if(0==e)return[];var t=new jspb.arith.UInt64(0,0),o=new jspb.arith.UInt64(this.lo,this.hi);e=new jspb.arith.UInt64(e,0);for(var r=new jspb.arith.UInt64(1,0);!e.msb();)e=e.leftShift(),r=r.leftShift();for(;!r.zero();)0>=e.cmp(o)&&(t=t.add(r),o=o.sub(e)),e=e.rightShift(),r=r.rightShift();return[t,o]},jspb.arith.UInt64.prototype.toString=function(){for(var e="",t=this;!t.zero();){var o=(t=t.div(10))[0];e=t[1].lo+e,t=o}return""==e&&(e="0"),e},jspb.arith.UInt64.fromString=function(e){for(var t=new jspb.arith.UInt64(0,0),o=new jspb.arith.UInt64(0,0),r=0;r<e.length;r++){if("0">e[r]||"9"<e[r])return null;var n=parseInt(e[r],10);o.lo=n,t=t.mul(10).add(o)}return t},jspb.arith.UInt64.prototype.clone=function(){return new jspb.arith.UInt64(this.lo,this.hi)},jspb.arith.Int64=function(e,t){this.lo=e,this.hi=t},jspb.arith.Int64.prototype.add=function(e){return new jspb.arith.Int64((this.lo+e.lo&4294967295)>>>0>>>0,((this.hi+e.hi&4294967295)>>>0)+(4294967296<=this.lo+e.lo?1:0)>>>0)},jspb.arith.Int64.prototype.sub=function(e){return new jspb.arith.Int64((this.lo-e.lo&4294967295)>>>0>>>0,((this.hi-e.hi&4294967295)>>>0)-(0>this.lo-e.lo?1:0)>>>0)},jspb.arith.Int64.prototype.clone=function(){return new jspb.arith.Int64(this.lo,this.hi)},jspb.arith.Int64.prototype.toString=function(){var e=0!=(2147483648&this.hi),t=new jspb.arith.UInt64(this.lo,this.hi);return e&&(t=new jspb.arith.UInt64(0,0).sub(t)),(e?"-":"")+t.toString()},jspb.arith.Int64.fromString=function(e){var t=0<e.length&&"-"==e[0];return t&&(e=e.substring(1)),null===(e=jspb.arith.UInt64.fromString(e))?null:(t&&(e=new jspb.arith.UInt64(0,0).sub(e)),new jspb.arith.Int64(e.lo,e.hi))},jspb.BinaryWriter=function(){this.blocks_=[],this.totalLength_=0,this.encoder_=new jspb.BinaryEncoder,this.bookmarks_=[]},jspb.BinaryWriter.prototype.appendUint8Array_=function(e){var t=this.encoder_.end();this.blocks_.push(t),this.blocks_.push(e),this.totalLength_+=t.length+e.length},jspb.BinaryWriter.prototype.beginDelimited_=function(e){return this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),e=this.encoder_.end(),this.blocks_.push(e),this.totalLength_+=e.length,e.push(this.totalLength_),e},jspb.BinaryWriter.prototype.endDelimited_=function(e){var t=e.pop();for(t=this.totalLength_+this.encoder_.length()-t,goog.asserts.assert(0<=t);127<t;)e.push(127&t|128),t>>>=7,this.totalLength_++;e.push(t),this.totalLength_++},jspb.BinaryWriter.prototype.writeSerializedMessage=function(e,t,o){this.appendUint8Array_(e.subarray(t,o))},jspb.BinaryWriter.prototype.maybeWriteSerializedMessage=function(e,t,o){null!=e&&null!=t&&null!=o&&this.writeSerializedMessage(e,t,o)},jspb.BinaryWriter.prototype.reset=function(){this.blocks_=[],this.encoder_.end(),this.totalLength_=0,this.bookmarks_=[]},jspb.BinaryWriter.prototype.getResultBuffer=function(){goog.asserts.assert(0==this.bookmarks_.length);for(var e=new Uint8Array(this.totalLength_+this.encoder_.length()),t=this.blocks_,o=t.length,r=0,n=0;n<o;n++){var s=t[n];e.set(s,r),r+=s.length}return t=this.encoder_.end(),e.set(t,r),r+=t.length,goog.asserts.assert(r==e.length),this.blocks_=[e],e},jspb.BinaryWriter.prototype.getResultBase64String=function(e){return goog.crypt.base64.encodeByteArray(this.getResultBuffer(),e)},jspb.BinaryWriter.prototype.beginSubMessage=function(e){this.bookmarks_.push(this.beginDelimited_(e))},jspb.BinaryWriter.prototype.endSubMessage=function(){goog.asserts.assert(0<=this.bookmarks_.length),this.endDelimited_(this.bookmarks_.pop())},jspb.BinaryWriter.prototype.writeFieldHeader_=function(e,t){goog.asserts.assert(1<=e&&e==Math.floor(e)),this.encoder_.writeUnsignedVarint32(8*e+t)},jspb.BinaryWriter.prototype.writeAny=function(e,t,o){var r=jspb.BinaryConstants.FieldType;switch(e){case r.DOUBLE:this.writeDouble(t,o);break;case r.FLOAT:this.writeFloat(t,o);break;case r.INT64:this.writeInt64(t,o);break;case r.UINT64:this.writeUint64(t,o);break;case r.INT32:this.writeInt32(t,o);break;case r.FIXED64:this.writeFixed64(t,o);break;case r.FIXED32:this.writeFixed32(t,o);break;case r.BOOL:this.writeBool(t,o);break;case r.STRING:this.writeString(t,o);break;case r.GROUP:goog.asserts.fail("Group field type not supported in writeAny()");break;case r.MESSAGE:goog.asserts.fail("Message field type not supported in writeAny()");break;case r.BYTES:this.writeBytes(t,o);break;case r.UINT32:this.writeUint32(t,o);break;case r.ENUM:this.writeEnum(t,o);break;case r.SFIXED32:this.writeSfixed32(t,o);break;case r.SFIXED64:this.writeSfixed64(t,o);break;case r.SINT32:this.writeSint32(t,o);break;case r.SINT64:this.writeSint64(t,o);break;case r.FHASH64:this.writeFixedHash64(t,o);break;case r.VHASH64:this.writeVarintHash64(t,o);break;default:goog.asserts.fail("Invalid field type in writeAny()")}},jspb.BinaryWriter.prototype.writeUnsignedVarint32_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint32(t))},jspb.BinaryWriter.prototype.writeSignedVarint32_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(t))},jspb.BinaryWriter.prototype.writeUnsignedVarint64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint64(t))},jspb.BinaryWriter.prototype.writeSignedVarint64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint64(t))},jspb.BinaryWriter.prototype.writeZigzagVarint32_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint32(t))},jspb.BinaryWriter.prototype.writeZigzagVarint64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64(t))},jspb.BinaryWriter.prototype.writeZigzagVarint64String_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64String(t))},jspb.BinaryWriter.prototype.writeZigzagVarintHash64_=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarintHash64(t))},jspb.BinaryWriter.prototype.writeInt32=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeInt32String=function(e,t){null!=t&&(t=parseInt(t,10),goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeInt64=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_63&&t<jspb.BinaryConstants.TWO_TO_63),this.writeSignedVarint64_(e,t))},jspb.BinaryWriter.prototype.writeInt64String=function(e,t){null!=t&&(t=jspb.arith.Int64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeUint32=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeUint32String=function(e,t){null!=t&&(t=parseInt(t,10),goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(e,t))},jspb.BinaryWriter.prototype.writeUint64=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_64),this.writeUnsignedVarint64_(e,t))},jspb.BinaryWriter.prototype.writeUint64String=function(e,t){null!=t&&(t=jspb.arith.UInt64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeSint32=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeZigzagVarint32_(e,t))},jspb.BinaryWriter.prototype.writeSint64=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_63&&t<jspb.BinaryConstants.TWO_TO_63),this.writeZigzagVarint64_(e,t))},jspb.BinaryWriter.prototype.writeSintHash64=function(e,t){null!=t&&this.writeZigzagVarintHash64_(e,t)},jspb.BinaryWriter.prototype.writeSint64String=function(e,t){null!=t&&this.writeZigzagVarint64String_(e,t)},jspb.BinaryWriter.prototype.writeFixed32=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_32),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeUint32(t))},jspb.BinaryWriter.prototype.writeFixed64=function(e,t){null!=t&&(goog.asserts.assert(0<=t&&t<jspb.BinaryConstants.TWO_TO_64),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeUint64(t))},jspb.BinaryWriter.prototype.writeFixed64String=function(e,t){null!=t&&(t=jspb.arith.UInt64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeSfixed32=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeInt32(t))},jspb.BinaryWriter.prototype.writeSfixed64=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_63&&t<jspb.BinaryConstants.TWO_TO_63),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeInt64(t))},jspb.BinaryWriter.prototype.writeSfixed64String=function(e,t){null!=t&&(t=jspb.arith.Int64.fromString(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(t.lo,t.hi))},jspb.BinaryWriter.prototype.writeFloat=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeFloat(t))},jspb.BinaryWriter.prototype.writeDouble=function(e,t){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeDouble(t))},jspb.BinaryWriter.prototype.writeBool=function(e,t){null!=t&&(goog.asserts.assert("boolean"==typeof t||"number"==typeof t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeBool(t))},jspb.BinaryWriter.prototype.writeEnum=function(e,t){null!=t&&(goog.asserts.assert(t>=-jspb.BinaryConstants.TWO_TO_31&&t<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(t))},jspb.BinaryWriter.prototype.writeString=function(e,t){null!=t&&(e=this.beginDelimited_(e),this.encoder_.writeString(t),this.endDelimited_(e))},jspb.BinaryWriter.prototype.writeBytes=function(e,t){null!=t&&(t=jspb.utils.byteSourceToUint8Array(t),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(t.length),this.appendUint8Array_(t))},jspb.BinaryWriter.prototype.writeMessage=function(e,t,o){null!=t&&(e=this.beginDelimited_(e),o(t,this),this.endDelimited_(e))},jspb.BinaryWriter.prototype.writeMessageSet=function(e,t,o){null!=t&&(this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.START_GROUP),this.writeFieldHeader_(2,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(e),e=this.beginDelimited_(3),o(t,this),this.endDelimited_(e),this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.END_GROUP))},jspb.BinaryWriter.prototype.writeGroup=function(e,t,o){null!=t&&(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.START_GROUP),o(t,this),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.END_GROUP))},jspb.BinaryWriter.prototype.writeFixedHash64=function(e,t){null!=t&&(goog.asserts.assert(8==t.length),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeFixedHash64(t))},jspb.BinaryWriter.prototype.writeVarintHash64=function(e,t){null!=t&&(goog.asserts.assert(8==t.length),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeVarintHash64(t))},jspb.BinaryWriter.prototype.writeSplitFixed64=function(e,t,o){this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(t,o)},jspb.BinaryWriter.prototype.writeSplitVarint64=function(e,t,o){this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(t,o)},jspb.BinaryWriter.prototype.writeSplitZigzagVarint64=function(e,t,o){this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.VARINT);var r=this.encoder_;jspb.utils.toZigzag64(t,o,(function(e,t){r.writeSplitVarint64(e>>>0,t>>>0)}))},jspb.BinaryWriter.prototype.writeRepeatedInt32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSignedVarint32_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedInt32String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeInt32String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedInt64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSignedVarint64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSplitFixed64=function(e,t,o,r){if(null!=t)for(var n=0;n<t.length;n++)this.writeSplitFixed64(e,o(t[n]),r(t[n]))},jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64=function(e,t,o,r){if(null!=t)for(var n=0;n<t.length;n++)this.writeSplitVarint64(e,o(t[n]),r(t[n]))},jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64=function(e,t,o,r){if(null!=t)for(var n=0;n<t.length;n++)this.writeSplitZigzagVarint64(e,o(t[n]),r(t[n]))},jspb.BinaryWriter.prototype.writeRepeatedInt64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeInt64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUnsignedVarint32_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint32String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUint32String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUnsignedVarint64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedUint64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeUint64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSint32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarint32_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSint64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarint64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSint64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarint64String_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSintHash64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeZigzagVarintHash64_(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFixed32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixed32(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFixed64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixed64(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFixed64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixed64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSfixed32=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSfixed32(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSfixed64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSfixed64(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedSfixed64String=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeSfixed64String(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedFloat=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFloat(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedDouble=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeDouble(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedBool=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeBool(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedEnum=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeEnum(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedString=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeString(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedBytes=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeBytes(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedMessage=function(e,t,o){if(null!=t)for(var r=0;r<t.length;r++){var n=this.beginDelimited_(e);o(t[r],this),this.endDelimited_(n)}},jspb.BinaryWriter.prototype.writeRepeatedGroup=function(e,t,o){if(null!=t)for(var r=0;r<t.length;r++)this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.START_GROUP),o(t[r],this),this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.END_GROUP)},jspb.BinaryWriter.prototype.writeRepeatedFixedHash64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeFixedHash64(e,t[o])},jspb.BinaryWriter.prototype.writeRepeatedVarintHash64=function(e,t){if(null!=t)for(var o=0;o<t.length;o++)this.writeVarintHash64(e,t[o])},jspb.BinaryWriter.prototype.writePackedInt32=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeSignedVarint32(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedInt32String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeSignedVarint32(parseInt(t[o],10));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedInt64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeSignedVarint64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSplitFixed64=function(e,t,o,r){if(null!=t){e=this.beginDelimited_(e);for(var n=0;n<t.length;n++)this.encoder_.writeSplitFixed64(o(t[n]),r(t[n]));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSplitVarint64=function(e,t,o,r){if(null!=t){e=this.beginDelimited_(e);for(var n=0;n<t.length;n++)this.encoder_.writeSplitVarint64(o(t[n]),r(t[n]));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64=function(e,t,o,r){if(null!=t){e=this.beginDelimited_(e);for(var n=this.encoder_,s=0;s<t.length;s++)jspb.utils.toZigzag64(o(t[s]),r(t[s]),(function(e,t){n.writeSplitVarint64(e>>>0,t>>>0)}));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedInt64String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++){var r=jspb.arith.Int64.fromString(t[o]);this.encoder_.writeSplitVarint64(r.lo,r.hi)}this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint32=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeUnsignedVarint32(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint32String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeUnsignedVarint32(parseInt(t[o],10));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeUnsignedVarint64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedUint64String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++){var r=jspb.arith.UInt64.fromString(t[o]);this.encoder_.writeSplitVarint64(r.lo,r.hi)}this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSint32=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarint32(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSint64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarint64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSint64String=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(t[o]));this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedSintHash64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeZigzagVarintHash64(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedFixed32=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*t.length),e=0;e<t.length;e++)this.encoder_.writeUint32(t[e])},jspb.BinaryWriter.prototype.writePackedFixed64=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeUint64(t[e])},jspb.BinaryWriter.prototype.writePackedFixed64String=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++){var o=jspb.arith.UInt64.fromString(t[e]);this.encoder_.writeSplitFixed64(o.lo,o.hi)}},jspb.BinaryWriter.prototype.writePackedSfixed32=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*t.length),e=0;e<t.length;e++)this.encoder_.writeInt32(t[e])},jspb.BinaryWriter.prototype.writePackedSfixed64=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeInt64(t[e])},jspb.BinaryWriter.prototype.writePackedSfixed64String=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeInt64String(t[e])},jspb.BinaryWriter.prototype.writePackedFloat=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*t.length),e=0;e<t.length;e++)this.encoder_.writeFloat(t[e])},jspb.BinaryWriter.prototype.writePackedDouble=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeDouble(t[e])},jspb.BinaryWriter.prototype.writePackedBool=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(t.length),e=0;e<t.length;e++)this.encoder_.writeBool(t[e])},jspb.BinaryWriter.prototype.writePackedEnum=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeEnum(t[o]);this.endDelimited_(e)}},jspb.BinaryWriter.prototype.writePackedFixedHash64=function(e,t){if(null!=t&&t.length)for(this.writeFieldHeader_(e,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*t.length),e=0;e<t.length;e++)this.encoder_.writeFixedHash64(t[e])},jspb.BinaryWriter.prototype.writePackedVarintHash64=function(e,t){if(null!=t&&t.length){e=this.beginDelimited_(e);for(var o=0;o<t.length;o++)this.encoder_.writeVarintHash64(t[o]);this.endDelimited_(e)}},jspb.Map=function(e,t){this.arr_=e,this.valueCtor_=t,this.map_={},this.arrClean=!0,0<this.arr_.length&&this.loadFromArray_()},jspb.Map.prototype.loadFromArray_=function(){for(var e=0;e<this.arr_.length;e++){var t=this.arr_[e],o=t[0];this.map_[o.toString()]=new jspb.Map.Entry_(o,t[1])}this.arrClean=!0},jspb.Map.prototype.toArray=function(){if(this.arrClean){if(this.valueCtor_){var e,t=this.map_;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var o=t[e].valueWrapper;o&&o.toArray()}}}else{for(this.arr_.length=0,(t=this.stringKeys_()).sort(),e=0;e<t.length;e++){var r=this.map_[t[e]];(o=r.valueWrapper)&&o.toArray(),this.arr_.push([r.key,r.value])}this.arrClean=!0}return this.arr_},jspb.Map.prototype.toObject=function(e,t){for(var o=this.toArray(),r=[],n=0;n<o.length;n++){var s=this.map_[o[n][0].toString()];this.wrapEntry_(s);var i=s.valueWrapper;i?(goog.asserts.assert(t),r.push([s.key,t(e,i)])):r.push([s.key,s.value])}return r},jspb.Map.fromObject=function(e,t,o){t=new jspb.Map([],t);for(var r=0;r<e.length;r++){var n=e[r][0],s=o(e[r][1]);t.set(n,s)}return t},jspb.Map.ArrayIteratorIterable_=function(e){this.idx_=0,this.arr_=e},jspb.Map.ArrayIteratorIterable_.prototype.next=function(){return this.idx_<this.arr_.length?{done:!1,value:this.arr_[this.idx_++]}:{done:!0,value:void 0}},"undefined"!=typeof Symbol&&(jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator]=function(){return this}),jspb.Map.prototype.getLength=function(){return this.stringKeys_().length},jspb.Map.prototype.clear=function(){this.map_={},this.arrClean=!1},jspb.Map.prototype.del=function(e){e=e.toString();var t=this.map_.hasOwnProperty(e);return delete this.map_[e],this.arrClean=!1,t},jspb.Map.prototype.getEntryList=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++){var r=this.map_[t[o]];e.push([r.key,r.value])}return e},jspb.Map.prototype.entries=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++){var r=this.map_[t[o]];e.push([r.key,this.wrapEntry_(r)])}return new jspb.Map.ArrayIteratorIterable_(e)},jspb.Map.prototype.keys=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++)e.push(this.map_[t[o]].key);return new jspb.Map.ArrayIteratorIterable_(e)},jspb.Map.prototype.values=function(){var e=[],t=this.stringKeys_();t.sort();for(var o=0;o<t.length;o++)e.push(this.wrapEntry_(this.map_[t[o]]));return new jspb.Map.ArrayIteratorIterable_(e)},jspb.Map.prototype.forEach=function(e,t){var o=this.stringKeys_();o.sort();for(var r=0;r<o.length;r++){var n=this.map_[o[r]];e.call(t,this.wrapEntry_(n),n.key,this)}},jspb.Map.prototype.set=function(e,t){var o=new jspb.Map.Entry_(e);return this.valueCtor_?(o.valueWrapper=t,o.value=t.toArray()):o.value=t,this.map_[e.toString()]=o,this.arrClean=!1,this},jspb.Map.prototype.wrapEntry_=function(e){return this.valueCtor_?(e.valueWrapper||(e.valueWrapper=new this.valueCtor_(e.value)),e.valueWrapper):e.value},jspb.Map.prototype.get=function(e){if(e=this.map_[e.toString()])return this.wrapEntry_(e)},jspb.Map.prototype.has=function(e){return e.toString()in this.map_},jspb.Map.prototype.serializeBinary=function(e,t,o,r,n){var s=this.stringKeys_();s.sort();for(var i=0;i<s.length;i++){var a=this.map_[s[i]];t.beginSubMessage(e),o.call(t,1,a.key),this.valueCtor_?r.call(t,2,this.wrapEntry_(a),n):r.call(t,2,a.value),t.endSubMessage()}},jspb.Map.deserializeBinary=function(e,t,o,r,n,s,i){for(;t.nextField()&&!t.isEndGroup();){var a=t.getFieldNumber();1==a?s=o.call(t):2==a&&(e.valueCtor_?(goog.asserts.assert(n),i||(i=new e.valueCtor_),r.call(t,i,n)):i=r.call(t))}goog.asserts.assert(null!=s),goog.asserts.assert(null!=i),e.set(s,i)},jspb.Map.prototype.stringKeys_=function(){var e,t=this.map_,o=[];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&o.push(e);return o},jspb.Map.Entry_=function(e,t){this.key=e,this.value=t,this.valueWrapper=void 0},jspb.ExtensionFieldInfo=function(e,t,o,r,n){this.fieldIndex=e,this.fieldName=t,this.ctor=o,this.toObjectFn=r,this.isRepeated=n},jspb.ExtensionFieldBinaryInfo=function(e,t,o,r,n,s){this.fieldInfo=e,this.binaryReaderFn=t,this.binaryWriterFn=o,this.binaryMessageSerializeFn=r,this.binaryMessageDeserializeFn=n,this.isPacked=s},jspb.ExtensionFieldInfo.prototype.isMessageType=function(){return!!this.ctor},jspb.Message=function(){},jspb.Message.GENERATE_TO_OBJECT=!0,jspb.Message.GENERATE_FROM_OBJECT=!goog.DISALLOW_TEST_ONLY_CODE,jspb.Message.GENERATE_TO_STRING=!0,jspb.Message.ASSUME_LOCAL_ARRAYS=!1,jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS=!0,jspb.Message.SUPPORTS_UINT8ARRAY_="function"==typeof Uint8Array,jspb.Message.prototype.getJsPbMessageId=function(){return this.messageId_},jspb.Message.getIndex_=function(e,t){return t+e.arrayIndexOffset_},jspb.Message.hiddenES6Property_=function(){},jspb.Message.getFieldNumber_=function(e,t){return t-e.arrayIndexOffset_},jspb.Message.initialize=function(e,t,o,r,n,s){if(e.wrappers_=null,t||(t=o?[o]:[]),e.messageId_=o?String(o):void 0,e.arrayIndexOffset_=0===o?-1:0,e.array=t,jspb.Message.initPivotAndExtensionObject_(e,r),e.convertedPrimitiveFields_={},jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS||(e.repeatedFields=n),n)for(t=0;t<n.length;t++)(o=n[t])<e.pivot_?(o=jspb.Message.getIndex_(e,o),e.array[o]=e.array[o]||jspb.Message.EMPTY_LIST_SENTINEL_):(jspb.Message.maybeInitEmptyExtensionObject_(e),e.extensionObject_[o]=e.extensionObject_[o]||jspb.Message.EMPTY_LIST_SENTINEL_);if(s&&s.length)for(t=0;t<s.length;t++)jspb.Message.computeOneofCase(e,s[t])},jspb.Message.EMPTY_LIST_SENTINEL_=goog.DEBUG&&Object.freeze?Object.freeze([]):[],jspb.Message.isArray_=function(e){return jspb.Message.ASSUME_LOCAL_ARRAYS?e instanceof Array:Array.isArray(e)},jspb.Message.isExtensionObject_=function(e){return!(null===e||"object"!=typeof e||jspb.Message.isArray_(e)||jspb.Message.SUPPORTS_UINT8ARRAY_&&e instanceof Uint8Array)},jspb.Message.initPivotAndExtensionObject_=function(e,t){var o=e.array.length,r=-1;if(o&&(r=o-1,o=e.array[r],jspb.Message.isExtensionObject_(o)))return e.pivot_=jspb.Message.getFieldNumber_(e,r),void(e.extensionObject_=o);-1<t?(e.pivot_=Math.max(t,jspb.Message.getFieldNumber_(e,r+1)),e.extensionObject_=null):e.pivot_=Number.MAX_VALUE},jspb.Message.maybeInitEmptyExtensionObject_=function(e){var t=jspb.Message.getIndex_(e,e.pivot_);e.array[t]||(e.extensionObject_=e.array[t]={})},jspb.Message.toObjectList=function(e,t,o){for(var r=[],n=0;n<e.length;n++)r[n]=t.call(e[n],o,e[n]);return r},jspb.Message.toObjectExtension=function(e,t,o,r,n){for(var s in o){var i=o[s],a=r.call(e,i);if(null!=a){for(var g in i.fieldName)if(i.fieldName.hasOwnProperty(g))break;t[g]=i.toObjectFn?i.isRepeated?jspb.Message.toObjectList(a,i.toObjectFn,n):i.toObjectFn(n,a):a}}},jspb.Message.serializeBinaryExtensions=function(e,t,o,r){for(var n in o){var s=o[n],i=s.fieldInfo;if(!s.binaryWriterFn)throw Error("Message extension present that was generated without binary serialization support");var a=r.call(e,i);if(null!=a)if(i.isMessageType()){if(!s.binaryMessageSerializeFn)throw Error("Message extension present holding submessage without binary support enabled, and message is being serialized to binary format");s.binaryWriterFn.call(t,i.fieldIndex,a,s.binaryMessageSerializeFn)}else s.binaryWriterFn.call(t,i.fieldIndex,a)}},jspb.Message.readBinaryExtension=function(e,t,o,r,n){var s=o[t.getFieldNumber()];if(s){if(o=s.fieldInfo,!s.binaryReaderFn)throw Error("Deserializing extension whose generated code does not support binary format");if(o.isMessageType()){var i=new o.ctor;s.binaryReaderFn.call(t,i,s.binaryMessageDeserializeFn)}else i=s.binaryReaderFn.call(t);o.isRepeated&&!s.isPacked?(t=r.call(e,o))?t.push(i):n.call(e,o,[i]):n.call(e,o,i)}else t.skipField()},jspb.Message.getField=function(e,t){if(t<e.pivot_){t=jspb.Message.getIndex_(e,t);var o=e.array[t];return o===jspb.Message.EMPTY_LIST_SENTINEL_?e.array[t]=[]:o}if(e.extensionObject_)return(o=e.extensionObject_[t])===jspb.Message.EMPTY_LIST_SENTINEL_?e.extensionObject_[t]=[]:o},jspb.Message.getRepeatedField=function(e,t){return jspb.Message.getField(e,t)},jspb.Message.getOptionalFloatingPointField=function(e,t){return null==(e=jspb.Message.getField(e,t))?e:+e},jspb.Message.getBooleanField=function(e,t){return null==(e=jspb.Message.getField(e,t))?e:!!e},jspb.Message.getRepeatedFloatingPointField=function(e,t){var o=jspb.Message.getRepeatedField(e,t);if(e.convertedPrimitiveFields_||(e.convertedPrimitiveFields_={}),!e.convertedPrimitiveFields_[t]){for(var r=0;r<o.length;r++)o[r]=+o[r];e.convertedPrimitiveFields_[t]=!0}return o},jspb.Message.getRepeatedBooleanField=function(e,t){var o=jspb.Message.getRepeatedField(e,t);if(e.convertedPrimitiveFields_||(e.convertedPrimitiveFields_={}),!e.convertedPrimitiveFields_[t]){for(var r=0;r<o.length;r++)o[r]=!!o[r];e.convertedPrimitiveFields_[t]=!0}return o},jspb.Message.bytesAsB64=function(e){return null==e||"string"==typeof e?e:jspb.Message.SUPPORTS_UINT8ARRAY_&&e instanceof Uint8Array?goog.crypt.base64.encodeByteArray(e):(goog.asserts.fail("Cannot coerce to b64 string: "+goog.typeOf(e)),null)},jspb.Message.bytesAsU8=function(e){return null==e||e instanceof Uint8Array?e:"string"==typeof e?goog.crypt.base64.decodeStringToUint8Array(e):(goog.asserts.fail("Cannot coerce to Uint8Array: "+goog.typeOf(e)),null)},jspb.Message.bytesListAsB64=function(e){return jspb.Message.assertConsistentTypes_(e),e.length&&"string"!=typeof e[0]?goog.array.map(e,jspb.Message.bytesAsB64):e},jspb.Message.bytesListAsU8=function(e){return jspb.Message.assertConsistentTypes_(e),!e.length||e[0]instanceof Uint8Array?e:goog.array.map(e,jspb.Message.bytesAsU8)},jspb.Message.assertConsistentTypes_=function(e){if(goog.DEBUG&&e&&1<e.length){var t=goog.typeOf(e[0]);goog.array.forEach(e,(function(e){goog.typeOf(e)!=t&&goog.asserts.fail("Inconsistent type in JSPB repeated field array. Got "+goog.typeOf(e)+" expected "+t)}))}},jspb.Message.getFieldWithDefault=function(e,t,o){return null==(e=jspb.Message.getField(e,t))?o:e},jspb.Message.getBooleanFieldWithDefault=function(e,t,o){return null==(e=jspb.Message.getBooleanField(e,t))?o:e},jspb.Message.getFloatingPointFieldWithDefault=function(e,t,o){return null==(e=jspb.Message.getOptionalFloatingPointField(e,t))?o:e},jspb.Message.getFieldProto3=jspb.Message.getFieldWithDefault,jspb.Message.getMapField=function(e,t,o,r){if(e.wrappers_||(e.wrappers_={}),t in e.wrappers_)return e.wrappers_[t];var n=jspb.Message.getField(e,t);if(!n){if(o)return;n=[],jspb.Message.setField(e,t,n)}return e.wrappers_[t]=new jspb.Map(n,r)},jspb.Message.setField=function(e,t,o){return goog.asserts.assertInstanceof(e,jspb.Message),t<e.pivot_?e.array[jspb.Message.getIndex_(e,t)]=o:(jspb.Message.maybeInitEmptyExtensionObject_(e),e.extensionObject_[t]=o),e},jspb.Message.setProto3IntField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,0)},jspb.Message.setProto3FloatField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,0)},jspb.Message.setProto3BooleanField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,!1)},jspb.Message.setProto3StringField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,"")},jspb.Message.setProto3BytesField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,"")},jspb.Message.setProto3EnumField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,0)},jspb.Message.setProto3StringIntField=function(e,t,o){return jspb.Message.setFieldIgnoringDefault_(e,t,o,"0")},jspb.Message.setFieldIgnoringDefault_=function(e,t,o,r){return goog.asserts.assertInstanceof(e,jspb.Message),o!==r?jspb.Message.setField(e,t,o):t<e.pivot_?e.array[jspb.Message.getIndex_(e,t)]=null:(jspb.Message.maybeInitEmptyExtensionObject_(e),delete e.extensionObject_[t]),e},jspb.Message.addToRepeatedField=function(e,t,o,r){return goog.asserts.assertInstanceof(e,jspb.Message),t=jspb.Message.getRepeatedField(e,t),null!=r?t.splice(r,0,o):t.push(o),e},jspb.Message.setOneofField=function(e,t,o,r){return goog.asserts.assertInstanceof(e,jspb.Message),(o=jspb.Message.computeOneofCase(e,o))&&o!==t&&void 0!==r&&(e.wrappers_&&o in e.wrappers_&&(e.wrappers_[o]=void 0),jspb.Message.setField(e,o,void 0)),jspb.Message.setField(e,t,r)},jspb.Message.computeOneofCase=function(e,t){for(var o,r,n=0;n<t.length;n++){var s=t[n],i=jspb.Message.getField(e,s);null!=i&&(o=s,r=i,jspb.Message.setField(e,s,void 0))}return o?(jspb.Message.setField(e,o,r),o):0},jspb.Message.getWrapperField=function(e,t,o,r){if(e.wrappers_||(e.wrappers_={}),!e.wrappers_[o]){var n=jspb.Message.getField(e,o);(r||n)&&(e.wrappers_[o]=new t(n))}return e.wrappers_[o]},jspb.Message.getRepeatedWrapperField=function(e,t,o){return jspb.Message.wrapRepeatedField_(e,t,o),(t=e.wrappers_[o])==jspb.Message.EMPTY_LIST_SENTINEL_&&(t=e.wrappers_[o]=[]),t},jspb.Message.wrapRepeatedField_=function(e,t,o){if(e.wrappers_||(e.wrappers_={}),!e.wrappers_[o]){for(var r=jspb.Message.getRepeatedField(e,o),n=[],s=0;s<r.length;s++)n[s]=new t(r[s]);e.wrappers_[o]=n}},jspb.Message.setWrapperField=function(e,t,o){goog.asserts.assertInstanceof(e,jspb.Message),e.wrappers_||(e.wrappers_={});var r=o?o.toArray():o;return e.wrappers_[t]=o,jspb.Message.setField(e,t,r)},jspb.Message.setOneofWrapperField=function(e,t,o,r){goog.asserts.assertInstanceof(e,jspb.Message),e.wrappers_||(e.wrappers_={});var n=r?r.toArray():r;return e.wrappers_[t]=r,jspb.Message.setOneofField(e,t,o,n)},jspb.Message.setRepeatedWrapperField=function(e,t,o){goog.asserts.assertInstanceof(e,jspb.Message),e.wrappers_||(e.wrappers_={}),o=o||[];for(var r=[],n=0;n<o.length;n++)r[n]=o[n].toArray();return e.wrappers_[t]=o,jspb.Message.setField(e,t,r)},jspb.Message.addToRepeatedWrapperField=function(e,t,o,r,n){jspb.Message.wrapRepeatedField_(e,r,t);var s=e.wrappers_[t];return s||(s=e.wrappers_[t]=[]),o=o||new r,e=jspb.Message.getRepeatedField(e,t),null!=n?(s.splice(n,0,o),e.splice(n,0,o.toArray())):(s.push(o),e.push(o.toArray())),o},jspb.Message.toMap=function(e,t,o,r){for(var n={},s=0;s<e.length;s++)n[t.call(e[s])]=o?o.call(e[s],r,e[s]):e[s];return n},jspb.Message.prototype.syncMapFields_=function(){if(this.wrappers_)for(var e in this.wrappers_){var t=this.wrappers_[e];if(Array.isArray(t))for(var o=0;o<t.length;o++)t[o]&&t[o].toArray();else t&&t.toArray()}},jspb.Message.prototype.toArray=function(){return this.syncMapFields_(),this.array},jspb.Message.GENERATE_TO_STRING&&(jspb.Message.prototype.toString=function(){return this.syncMapFields_(),this.array.toString()}),jspb.Message.prototype.getExtension=function(e){if(this.extensionObject_){this.wrappers_||(this.wrappers_={});var t=e.fieldIndex;if(e.isRepeated){if(e.isMessageType())return this.wrappers_[t]||(this.wrappers_[t]=goog.array.map(this.extensionObject_[t]||[],(function(t){return new e.ctor(t)}))),this.wrappers_[t]}else if(e.isMessageType())return!this.wrappers_[t]&&this.extensionObject_[t]&&(this.wrappers_[t]=new e.ctor(this.extensionObject_[t])),this.wrappers_[t];return this.extensionObject_[t]}},jspb.Message.prototype.setExtension=function(e,t){this.wrappers_||(this.wrappers_={}),jspb.Message.maybeInitEmptyExtensionObject_(this);var o=e.fieldIndex;return e.isRepeated?(t=t||[],e.isMessageType()?(this.wrappers_[o]=t,this.extensionObject_[o]=goog.array.map(t,(function(e){return e.toArray()}))):this.extensionObject_[o]=t):e.isMessageType()?(this.wrappers_[o]=t,this.extensionObject_[o]=t?t.toArray():t):this.extensionObject_[o]=t,this},jspb.Message.difference=function(e,t){if(!(e instanceof t.constructor))throw Error("Messages have different types.");var o=e.toArray();t=t.toArray();var r=[],n=0,s=o.length>t.length?o.length:t.length;for(e.getJsPbMessageId()&&(r[0]=e.getJsPbMessageId(),n=1);n<s;n++)jspb.Message.compareFields(o[n],t[n])||(r[n]=t[n]);return new e.constructor(r)},jspb.Message.equals=function(e,t){return e==t||!(!e||!t)&&e instanceof t.constructor&&jspb.Message.compareFields(e.toArray(),t.toArray())},jspb.Message.compareExtensions=function(e,t){e=e||{},t=t||{};var o,r={};for(o in e)r[o]=0;for(o in t)r[o]=0;for(o in r)if(!jspb.Message.compareFields(e[o],t[o]))return!1;return!0},jspb.Message.compareFields=function(e,t){if(e==t)return!0;if(!goog.isObject(e)||!goog.isObject(t))return!!("number"==typeof e&&isNaN(e)||"number"==typeof t&&isNaN(t))&&String(e)==String(t);if(e.constructor!=t.constructor)return!1;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&e.constructor===Uint8Array){if(e.length!=t.length)return!1;for(var o=0;o<e.length;o++)if(e[o]!=t[o])return!1;return!0}if(e.constructor===Array){var r=void 0,n=void 0,s=Math.max(e.length,t.length);for(o=0;o<s;o++){var i=e[o],a=t[o];if(i&&i.constructor==Object&&(goog.asserts.assert(void 0===r),goog.asserts.assert(o===e.length-1),r=i,i=void 0),a&&a.constructor==Object&&(goog.asserts.assert(void 0===n),goog.asserts.assert(o===t.length-1),n=a,a=void 0),!jspb.Message.compareFields(i,a))return!1}return!r&&!n||(r=r||{},n=n||{},jspb.Message.compareExtensions(r,n))}if(e.constructor===Object)return jspb.Message.compareExtensions(e,t);throw Error("Invalid type in JSPB array")},jspb.Message.prototype.cloneMessage=function(){return jspb.Message.cloneMessage(this)},jspb.Message.prototype.clone=function(){return jspb.Message.cloneMessage(this)},jspb.Message.clone=function(e){return jspb.Message.cloneMessage(e)},jspb.Message.cloneMessage=function(e){return new e.constructor(jspb.Message.clone_(e.toArray()))},jspb.Message.copyInto=function(e,t){goog.asserts.assertInstanceof(e,jspb.Message),goog.asserts.assertInstanceof(t,jspb.Message),goog.asserts.assert(e.constructor==t.constructor,"Copy source and target message should have the same type."),e=jspb.Message.clone(e);for(var o=t.toArray(),r=e.toArray(),n=o.length=0;n<r.length;n++)o[n]=r[n];t.wrappers_=e.wrappers_,t.extensionObject_=e.extensionObject_},jspb.Message.clone_=function(e){if(Array.isArray(e)){for(var t=Array(e.length),o=0;o<e.length;o++){var r=e[o];null!=r&&(t[o]="object"==typeof r?jspb.Message.clone_(goog.asserts.assert(r)):r)}return t}if(jspb.Message.SUPPORTS_UINT8ARRAY_&&e instanceof Uint8Array)return new Uint8Array(e);for(o in t={},e)null!=(r=e[o])&&(t[o]="object"==typeof r?jspb.Message.clone_(goog.asserts.assert(r)):r);return t},jspb.Message.registerMessageType=function(e,t){t.messageId=e},jspb.Message.messageSetExtensions={},jspb.Message.messageSetExtensionsBinary={},jspb.Export={},exports.Map=jspb.Map,exports.Message=jspb.Message,exports.BinaryReader=jspb.BinaryReader,exports.BinaryWriter=jspb.BinaryWriter,exports.ExtensionFieldInfo=jspb.ExtensionFieldInfo,exports.ExtensionFieldBinaryInfo=jspb.ExtensionFieldBinaryInfo,exports.exportSymbol=goog.exportSymbol,exports.inherits=goog.inherits,exports.object={extend:goog.object.extend},exports.typeOf=goog.typeOf},40:function(e,t,o){var r;function n(e){var t=0;return function(){return t<e.length?{done:!1,value:e[t++]}:{done:!0}}}var s="function"==typeof Object.defineProperties?Object.defineProperty:function(e,t,o){e!=Array.prototype&&e!=Object.prototype&&(e[t]=o.value)},i=function(e){e=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof o.g&&o.g,e];for(var t=0;t<e.length;++t){var r=e[t];if(r&&r.Math==Math)return r}throw Error("Cannot find global object")}(this);function a(){a=function(){},i.Symbol||(i.Symbol=l)}function g(e,t){this.a=e,s(this,"description",{configurable:!0,writable:!0,value:t})}g.prototype.toString=function(){return this.a};var p,l=(p=0,function e(t){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new g("jscomp_symbol_"+(t||"")+"_"+p++,t)});function u(){a();var e=i.Symbol.iterator;e||(e=i.Symbol.iterator=i.Symbol("Symbol.iterator")),"function"!=typeof Array.prototype[e]&&s(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return function(e){return u(),(e={next:e})[i.Symbol.iterator]=function(){return this},e}(n(this))}}),u=function(){}}function c(e){var t="undefined"!=typeof Symbol&&Symbol.iterator&&e[Symbol.iterator];return t?t.call(e):{next:n(e)}}var d,y="function"==typeof Object.create?Object.create:function(e){function t(){}return t.prototype=e,new t};if("function"==typeof Object.setPrototypeOf)d=Object.setPrototypeOf;else{var f;e:{var b={};try{b.__proto__={V:!0},f=b.V;break e}catch(ee){}f=!1}d=f?function(e,t){if(e.__proto__=t,e.__proto__!==t)throw new TypeError(e+" is not extensible");return e}:null}var h=d;function _(e,t){if(e.prototype=y(t.prototype),e.prototype.constructor=e,h)h(e,t);else for(var o in t)if("prototype"!=o)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(t,o);r&&Object.defineProperty(e,o,r)}else e[o]=t[o];e.O=t.prototype}function v(e,t){if(t){var o=i;e=e.split(".");for(var r=0;r<e.length-1;r++){var n=e[r];n in o||(o[n]={}),o=o[n]}(t=t(r=o[e=e[e.length-1]]))!=r&&null!=t&&s(o,e,{configurable:!0,writable:!0,value:t})}}v("Array.prototype.keys",(function(e){return e||function(){return function(e,t){u(),e instanceof String&&(e+="");var o=0,r={next:function(){if(o<e.length){var n=o++;return{value:t(n,e[n]),done:!1}}return r.next=function(){return{done:!0,value:void 0}},r.next()}};return r[Symbol.iterator]=function(){return r},r}(this,(function(e){return e}))}})),v("Array.prototype.find",(function(e){return e||function(e,t){e:{var o=this;o instanceof String&&(o=String(o));for(var r=o.length,n=0;n<r;n++){var s=o[n];if(e.call(t,s,n,o)){e=s;break e}}e=void 0}return e}})),v("Object.is",(function(e){return e||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}})),v("Array.prototype.includes",(function(e){return e||function(e,t){var o=this;o instanceof String&&(o=String(o));var r=o.length;for(0>(t=t||0)&&(t=Math.max(t+r,0));t<r;t++){var n=o[t];if(n===e||Object.is(n,e))return!0}return!1}})),v("Promise",(function(e){function t(e){this.b=0,this.c=void 0,this.a=[];var t=this.f();try{e(t.resolve,t.reject)}catch(e){t.reject(e)}}function o(){this.a=null}function r(e){return e instanceof t?e:new t((function(t){t(e)}))}if(e)return e;o.prototype.b=function(e){if(null==this.a){this.a=[];var t=this;this.c((function(){t.g()}))}this.a.push(e)};var n=i.setTimeout;o.prototype.c=function(e){n(e,0)},o.prototype.g=function(){for(;this.a&&this.a.length;){var e=this.a;this.a=[];for(var t=0;t<e.length;++t){var o=e[t];e[t]=null;try{o()}catch(e){this.f(e)}}}this.a=null},o.prototype.f=function(e){this.c((function(){throw e}))},t.prototype.f=function(){function e(e){return function(r){o||(o=!0,e.call(t,r))}}var t=this,o=!1;return{resolve:e(this.s),reject:e(this.g)}},t.prototype.s=function(e){if(e===this)this.g(new TypeError("A Promise cannot resolve to itself"));else if(e instanceof t)this.v(e);else{e:switch(typeof e){case"object":var o=null!=e;break e;case"function":o=!0;break e;default:o=!1}o?this.m(e):this.h(e)}},t.prototype.m=function(e){var t=void 0;try{t=e.then}catch(e){return void this.g(e)}"function"==typeof t?this.w(t,e):this.h(e)},t.prototype.g=function(e){this.i(2,e)},t.prototype.h=function(e){this.i(1,e)},t.prototype.i=function(e,t){if(0!=this.b)throw Error("Cannot settle("+e+", "+t+"): Promise already settled in state"+this.b);this.b=e,this.c=t,this.l()},t.prototype.l=function(){if(null!=this.a){for(var e=0;e<this.a.length;++e)s.b(this.a[e]);this.a=null}};var s=new o;return t.prototype.v=function(e){var t=this.f();e.F(t.resolve,t.reject)},t.prototype.w=function(e,t){var o=this.f();try{e.call(t,o.resolve,o.reject)}catch(e){o.reject(e)}},t.prototype.then=function(e,o){function r(e,t){return"function"==typeof e?function(t){try{n(e(t))}catch(e){s(e)}}:t}var n,s,i=new t((function(e,t){n=e,s=t}));return this.F(r(e,n),r(o,s)),i},t.prototype.catch=function(e){return this.then(void 0,e)},t.prototype.F=function(e,t){function o(){switch(r.b){case 1:e(r.c);break;case 2:t(r.c);break;default:throw Error("Unexpected state: "+r.b)}}var r=this;null==this.a?s.b(o):this.a.push(o)},t.resolve=r,t.reject=function(e){return new t((function(t,o){o(e)}))},t.race=function(e){return new t((function(t,o){for(var n=c(e),s=n.next();!s.done;s=n.next())r(s.value).F(t,o)}))},t.all=function(e){var o=c(e),n=o.next();return n.done?r([]):new t((function(e,t){function s(t){return function(o){i[t]=o,0==--a&&e(i)}}var i=[],a=0;do{i.push(void 0),a++,r(n.value).F(s(i.length-1),t),n=o.next()}while(!n.done)}))},t}));var E=E||{},m=this||self;function T(e,t){e=e.split("."),t=t||m;for(var o=0;o<e.length;o++)if(null==(t=t[e[o]]))return null;return t}function R(){}function S(e){var t=typeof e;return"object"==t&&null!=e||"function"==t}var A="closure_uid_"+(1e9*Math.random()>>>0),M=0;function I(e,t,o){return e.call.apply(e.bind,arguments)}function O(e,t,o){if(!e)throw Error();if(2<arguments.length){var r=Array.prototype.slice.call(arguments,2);return function(){var o=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(o,r),e.apply(t,o)}}return function(){return e.apply(t,arguments)}}function w(e,t,o){return(w=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?I:O).apply(null,arguments)}function D(e,t){function o(){}o.prototype=t.prototype,e.O=t.prototype,e.prototype=new o,e.prototype.constructor=e}function F(){this.a={}}function C(e,t,o,r){this.f=e,this.c=t,this.b=o,this.a=r}function L(e,t,o,r){o=void 0===o?{}:o,this.c=e,this.a=o,this.b=t,this.f=void 0===r?null:r}function N(e,t,o){o=void 0===o?{}:o;var r=void 0===r?new F:r;return new C(t,e,o,r)}function j(e,t,o){o=void 0===o?{}:o,t=Error.call(this,t),this.message=t.message,"stack"in t&&(this.stack=t.stack),this.code=e,this.metadata=o}function B(e){this.a=e}function U(e){if(Error.captureStackTrace)Error.captureStackTrace(this,U);else{var t=Error().stack;t&&(this.stack=t)}e&&(this.message=String(e))}function P(e,t){for(var o="",r=(e=e.split("%s")).length-1,n=0;n<r;n++)o+=e[n]+(n<t.length?t[n]:"%s");U.call(this,o+e[r])}function W(){this.l=null,this.i=[],this.m=0,this.b=V,this.f=this.a=this.h=0,this.c=null,this.g=0}F.prototype.get=function(e){return this.a[e]},F.prototype.G=function(){return Object.keys(this.a)},C.prototype.getRequestMessage=function(){return this.f},C.prototype.getMethodDescriptor=function(){return this.c},C.prototype.getMetadata=function(){return this.b},C.prototype.getCallOptions=function(){return this.a},L.prototype.getResponseMessage=function(){return this.c},L.prototype.getMetadata=function(){return this.a},L.prototype.getMethodDescriptor=function(){return this.b},L.prototype.getStatus=function(){return this.f},_(j,Error),j.prototype.name="RpcError",B.prototype.on=function(e,t){return"data"==e||"error"==e?this:this.a.on(e,t)},B.prototype.removeListener=function(e,t){return this.a.removeListener(e,t)},B.prototype.cancel=function(){this.a.cancel()},D(U,Error),U.prototype.name="CustomError",D(P,U),P.prototype.name="AssertionError";var V=0,x=128;function z(e,t,o,r){throw e.b=3,e.l="The stream is broken @"+e.m+"/"+o+". Error: "+r+". With input:\\n"+t,Error(e.l)}var k,H=Array.prototype.indexOf?function(e,t){return Array.prototype.indexOf.call(e,t,void 0)}:function(e,t){if("string"==typeof e)return"string"!=typeof t||1!=t.length?-1:e.indexOf(t,0);for(var o=0;o<e.length;o++)if(o in e&&e[o]===t)return o;return-1},G=String.prototype.trim?function(e){return e.trim()}:function(e){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(e)[1]};function q(e,t){return-1!=e.indexOf(t)}function Y(e,t){return e<t?-1:e>t?1:0}e:{var Q=m.navigator;if(Q){var K=Q.userAgent;if(K){k=K;break e}}k=""}var $="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function X(e){var t=1;e=e.split(":");for(var o=[];0<t&&e.length;)o.push(e.shift()),t--;return e.length&&o.push(e.join(":")),o}function Z(e){return Z[" "](e),e}Z[" "]=R;var J,ee,te=q(k,"Opera"),oe=q(k,"Trident")||q(k,"MSIE"),re=q(k,"Edge"),ne=q(k,"Gecko")&&!(q(k.toLowerCase(),"webkit")&&!q(k,"Edge"))&&!(q(k,"Trident")||q(k,"MSIE"))&&!q(k,"Edge"),se=q(k.toLowerCase(),"webkit")&&!q(k,"Edge");e:{var ie="",ae=(ee=k,ne?/rv:([^\\);]+)(\\)|;)/.exec(ee):re?/Edge\\/([\\d\\.]+)/.exec(ee):oe?/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(ee):se?/WebKit\\/(\\S+)/.exec(ee):te?/(?:Version)[ \\/]?(\\S+)/.exec(ee):void 0);if(ae&&(ie=ae?ae[1]:""),oe){var ge,pe=m.document;if(null!=(ge=pe?pe.documentMode:void 0)&&ge>parseFloat(ie)){J=String(ge);break e}}J=ie}var le={};function ue(){return function(e){var t=le;return Object.prototype.hasOwnProperty.call(t,9)?t[9]:t[9]=function(){for(var e=0,t=G(String(J)).split("."),o=G("9").split("."),r=Math.max(t.length,o.length),n=0;0==e&&n<r;n++){var s=t[n]||"",i=o[n]||"";do{if(s=/(\\d*)(\\D*)(.*)/.exec(s)||["","","",""],i=/(\\d*)(\\D*)(.*)/.exec(i)||["","","",""],0==s[0].length&&0==i[0].length)break;e=Y(0==s[1].length?0:parseInt(s[1],10),0==i[1].length?0:parseInt(i[1],10))||Y(0==s[2].length,0==i[2].length)||Y(s[2],i[2]),s=s[3],i=i[3]}while(0==e)}return 0<=e}()}()}function ce(){0!=de&&(Object.prototype.hasOwnProperty.call(this,A)&&this[A]||(this[A]=++M)),this.K=this.K}var de=0;ce.prototype.K=!1;var ye=Object.freeze||function(e){return e};function fe(e,t){this.type=e,this.a=this.target=t,this.defaultPrevented=!1}fe.prototype.b=function(){this.defaultPrevented=!0};var be=function(){if(!m.addEventListener||!Object.defineProperty)return!1;var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}});try{m.addEventListener("test",R,t),m.removeEventListener("test",R,t)}catch(e){}return e}();function he(e,t){if(fe.call(this,e?e.type:""),this.relatedTarget=this.a=this.target=null,this.button=this.screenY=this.screenX=this.clientY=this.clientX=0,this.key="",this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1,this.pointerId=0,this.pointerType="",this.c=null,e){var o=this.type=e.type,r=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:null;if(this.target=e.target||e.srcElement,this.a=t,t=e.relatedTarget){if(ne){e:{try{Z(t.nodeName);var n=!0;break e}catch(e){}n=!1}n||(t=null)}}else"mouseover"==o?t=e.fromElement:"mouseout"==o&&(t=e.toElement);this.relatedTarget=t,r?(this.clientX=void 0!==r.clientX?r.clientX:r.pageX,this.clientY=void 0!==r.clientY?r.clientY:r.pageY,this.screenX=r.screenX||0,this.screenY=r.screenY||0):(this.clientX=void 0!==e.clientX?e.clientX:e.pageX,this.clientY=void 0!==e.clientY?e.clientY:e.pageY,this.screenX=e.screenX||0,this.screenY=e.screenY||0),this.button=e.button,this.key=e.key||"",this.ctrlKey=e.ctrlKey,this.altKey=e.altKey,this.shiftKey=e.shiftKey,this.metaKey=e.metaKey,this.pointerId=e.pointerId||0,this.pointerType="string"==typeof e.pointerType?e.pointerType:_e[e.pointerType]||"",this.c=e,e.defaultPrevented&&he.O.b.call(this)}}D(he,fe);var _e=ye({2:"touch",3:"pen",4:"mouse"});he.prototype.b=function(){he.O.b.call(this);var e=this.c;e.preventDefault?e.preventDefault():e.returnValue=!1};var ve="closure_listenable_"+(1e6*Math.random()|0),Ee=0;function me(e,t,o,r,n){this.listener=e,this.proxy=null,this.src=t,this.type=o,this.capture=!!r,this.H=n,this.key=++Ee,this.A=this.D=!1}function Te(e){e.A=!0,e.listener=null,e.proxy=null,e.src=null,e.H=null}function Re(e){this.src=e,this.a={},this.b=0}function Se(e,t){var o=t.type;if(o in e.a){var r,n=e.a[o],s=H(n,t);(r=0<=s)&&Array.prototype.splice.call(n,s,1),r&&(Te(t),0==e.a[o].length&&(delete e.a[o],e.b--))}}function Ae(e,t,o,r){for(var n=0;n<e.length;++n){var s=e[n];if(!s.A&&s.listener==t&&s.capture==!!o&&s.H==r)return n}return-1}Re.prototype.add=function(e,t,o,r,n){var s=e.toString();(e=this.a[s])||(e=this.a[s]=[],this.b++);var i=Ae(e,t,r,n);return-1<i?(t=e[i],o||(t.D=!1)):((t=new me(t,this.src,s,!!r,n)).D=o,e.push(t)),t},Re.prototype.remove=function(e,t,o,r){if(!((e=e.toString())in this.a))return!1;var n=this.a[e];return-1<(t=Ae(n,t,o,r))&&(Te(n[t]),Array.prototype.splice.call(n,t,1),0==n.length&&(delete this.a[e],this.b--),!0)};var Me="closure_lm_"+(1e6*Math.random()|0),Ie={};function Oe(e,t,o,r,n){if(r&&r.once)De(e,t,o,r,n);else if(Array.isArray(t))for(var s=0;s<t.length;s++)Oe(e,t[s],o,r,n);else o=Ue(o),e&&e[ve]?e.f.add(String(t),o,!1,S(r)?!!r.capture:!!r,n):we(e,t,o,!1,r,n)}function we(e,t,o,r,n,s){if(!t)throw Error("Invalid event type");var i=S(n)?!!n.capture:!!n,a=je(e);if(a||(e[Me]=a=new Re(e)),!(o=a.add(t,o,r,i,s)).proxy)if(r=function(){var e=Ne;return function t(o){return e.call(t.src,t.listener,o)}}(),o.proxy=r,r.src=e,r.listener=o,e.addEventListener)be||(n=i),void 0===n&&(n=!1),e.addEventListener(t.toString(),r,n);else if(e.attachEvent)e.attachEvent(Le(t.toString()),r);else{if(!e.addListener||!e.removeListener)throw Error("addEventListener and attachEvent are unavailable.");e.addListener(r)}}function De(e,t,o,r,n){if(Array.isArray(t))for(var s=0;s<t.length;s++)De(e,t[s],o,r,n);else o=Ue(o),e&&e[ve]?e.f.add(String(t),o,!0,S(r)?!!r.capture:!!r,n):we(e,t,o,!0,r,n)}function Fe(e,t,o,r,n){if(Array.isArray(t))for(var s=0;s<t.length;s++)Fe(e,t[s],o,r,n);else r=S(r)?!!r.capture:!!r,o=Ue(o),e&&e[ve]?e.f.remove(String(t),o,r,n):e&&(e=je(e))&&(t=e.a[t.toString()],e=-1,t&&(e=Ae(t,o,r,n)),(o=-1<e?t[e]:null)&&Ce(o))}function Ce(e){if("number"!=typeof e&&e&&!e.A){var t=e.src;if(t&&t[ve])Se(t.f,e);else{var o=e.type,r=e.proxy;t.removeEventListener?t.removeEventListener(o,r,e.capture):t.detachEvent?t.detachEvent(Le(o),r):t.addListener&&t.removeListener&&t.removeListener(r),(o=je(t))?(Se(o,e),0==o.b&&(o.src=null,t[Me]=null)):Te(e)}}}function Le(e){return e in Ie?Ie[e]:Ie[e]="on"+e}function Ne(e,t){if(e.A)e=!0;else{t=new he(t,this);var o=e.listener,r=e.H||e.src;e.D&&Ce(e),e=o.call(r,t)}return e}function je(e){return(e=e[Me])instanceof Re?e:null}var Be="__closure_events_fn_"+(1e9*Math.random()>>>0);function Ue(e){return"function"==typeof e?e:(e[Be]||(e[Be]=function(t){return e.handleEvent(t)}),e[Be])}function Pe(){ce.call(this),this.f=new Re(this),this.U=this}function We(e,t){e=e.U;var o=t.type||t;if("string"==typeof t)t=new fe(t,e);else if(t instanceof fe)t.target=t.target||e;else{var r=t;!function(e,t){for(var o,r,n=1;n<arguments.length;n++){for(o in r=arguments[n])e[o]=r[o];for(var s=0;s<$.length;s++)o=$[s],Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}}(t=new fe(o,e),r)}Ve(e=t.a=e,o,!0,t),Ve(e,o,!1,t)}function Ve(e,t,o,r){if(t=e.f.a[String(t)]){t=t.concat();for(var n=!0,s=0;s<t.length;++s){var i=t[s];if(i&&!i.A&&i.capture==o){var a=i.listener,g=i.H||i.src;i.D&&Se(e.f,i),n=!1!==a.call(g,r)&&n}}}}function xe(e,t,o){if("function"==typeof e)o&&(e=w(e,o));else{if(!e||"function"!=typeof e.handleEvent)throw Error("Invalid listener argument");e=w(e.handleEvent,e)}return 2147483647<Number(t)?-1:m.setTimeout(e,t||0)}function ze(e,t){this.name=e,this.value=t}D(Pe,ce),Pe.prototype[ve]=!0,Pe.prototype.addEventListener=function(e,t,o,r){Oe(this,e,t,o,r)},Pe.prototype.removeEventListener=function(e,t,o,r){Fe(this,e,t,o,r)},ze.prototype.toString=function(){return this.name};var ke,He,Ge,qe=new ze("OFF",1/0),Ye=new ze("SEVERE",1e3),Qe=new ze("CONFIG",700),Ke=new ze("FINE",500);function $e(){this.clear()}function Xe(e,t,o){this.reset(e||qe,t,o,void 0,void 0)}function Ze(e,t){this.a=null,this.f=[],this.b=(void 0===t?null:t)||null,this.c=[],this.g={a:function(){return e}}}function Je(e){return e.a?e.a:e.b?Je(e.b):(function(e,t){throw new P("Failure"+(e?": "+e:""),Array.prototype.slice.call(arguments,1))}("Root logger has no level set."),qe)}function et(){this.entries={};var e=new Ze("");e.a=Qe,this.entries[""]=e}function tt(e,t,o){var r=e.entries[t];if(r)return void 0!==o&&(r.a=o),r;r=tt(e,t.substr(0,t.lastIndexOf(".")));var n=new Ze(t,r);return e.entries[t]=n,r.c.push(n),void 0!==o&&(n.a=o),n}function ot(){return He||(He=new et),He}function rt(e,t,o){var r;(r=e)&&(r=e&&t)&&(r=(r=t.value)>=(e?Je(tt(ot(),e.a())):qe).value),r&&(t=t||qe,r=tt(ot(),e.a()),"function"==typeof o&&(o=o()),ke||(ke=new $e),function(e,t){for(;e;)e.f.forEach((function(e){e(t)})),e=e.b}(r,e=new Xe(t,o,e.a())))}function nt(e,t){e&&rt(e,Ke,t)}function st(){}function it(e){var t;return(t=e.a)||(t={},pt(e)&&(t[0]=!0,t[1]=!0),t=e.a=t),t}function at(){}function gt(e){return(e=pt(e))?new ActiveXObject(e):new XMLHttpRequest}function pt(e){if(!e.b&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var t=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],o=0;o<t.length;o++){var r=t[o];try{return new ActiveXObject(r),e.b=r}catch(e){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed")}return e.b}function lt(e,t){this.b=e[m.Symbol.iterator](),this.c=t,this.f=0}$e.prototype.clear=function(){},Xe.prototype.reset=function(){},st.prototype.a=null,D(at,st),Ge=new at,a(),u(),lt.prototype[Symbol.iterator]=function(){return this},lt.prototype.next=function(){var e=this.b.next();return{value:e.done?void 0:this.c.call(void 0,e.value,this.f++),done:e.done}},a(),u(),a(),u();var ut="StopIteration"in m?m.StopIteration:{message:"StopIteration",stack:""};function ct(){}function dt(e){if(e instanceof ft||e instanceof bt||e instanceof ht)return e;if("function"==typeof e.next)return new ft((function(){return yt(e)}));if(a(),u(),"function"==typeof e[Symbol.iterator])return a(),u(),new ft((function(){return e[Symbol.iterator]()}));if("function"==typeof e.u)return new ft((function(){return yt(e.u())}));throw Error("Not an iterator or iterable.")}function yt(e){if(!(e instanceof ct))return e;var t=!1;return{next:function(){for(var o;!t;)try{o=e.a();break}catch(e){if(e!==ut)throw e;t=!0}return{value:o,done:t}}}}function ft(e){this.b=e}function bt(e){this.b=e}function ht(e){ft.call(this,(function(){return e})),this.f=e}function _t(e,t){this.o={},this.j=[],this.B=this.size=0;var o=arguments.length;if(1<o){if(o%2)throw Error("Uneven number of arguments");for(var r=0;r<o;r+=2)this.set(arguments[r],arguments[r+1])}else e&&this.addAll(e)}function vt(e){if(e.size!=e.j.length){for(var t=0,o=0;t<e.j.length;){var r=e.j[t];Et(e.o,r)&&(e.j[o++]=r),t++}e.j.length=o}if(e.size!=e.j.length){var n={};for(o=t=0;t<e.j.length;)Et(n,r=e.j[t])||(e.j[o++]=r,n[r]=1),t++;e.j.length=o}}function Et(e,t){return Object.prototype.hasOwnProperty.call(e,t)}ct.prototype.next=function(){return ct.prototype.a.call(this)},ct.prototype.a=function(){throw ut},ct.prototype.u=function(){return this},a(),u(),ft.prototype.u=function(){return new bt(this.b())},ft.prototype[Symbol.iterator]=function(){return new ht(this.b())},ft.prototype.c=function(){return new ht(this.b())},a(),u(),_(bt,ct),bt.prototype.a=function(){var e=this.b.next();if(e.done)throw ut;return e.value},bt.prototype.next=function(){return bt.prototype.a.call(this)},bt.prototype[Symbol.iterator]=function(){return new ht(this.b)},bt.prototype.c=function(){return new ht(this.b)},_(ht,ft),ht.prototype.next=function(){return this.f.next()},(r=_t.prototype).G=function(){return vt(this),this.j.concat()},r.has=function(e){return Et(this.o,e)},r.clear=function(){this.o={},this.B=this.size=this.j.length=0},r.remove=function(e){return this.delete(e)},r.delete=function(e){return!!Et(this.o,e)&&(delete this.o[e],--this.size,this.B++,this.j.length>2*this.size&&vt(this),!0)},r.get=function(e,t){return Et(this.o,e)?this.o[e]:t},r.set=function(e,t){Et(this.o,e)||(this.size+=1,this.j.push(e),this.B++),this.o[e]=t},r.addAll=function(e){if(e instanceof _t)for(var t=e.G(),o=0;o<t.length;o++)this.set(t[o],e.get(t[o]));else for(t in e)this.set(t,e[t])},r.forEach=function(e,t){for(var o=this.G(),r=0;r<o.length;r++){var n=o[r],s=this.get(n);e.call(t,s,n,this)}},r.clone=function(){return new _t(this)},r.keys=function(){return dt(this.u(!0)).c()},r.values=function(){return dt(this.u(!1)).c()},r.entries=function(){var e=this;return function(e,t){return new lt(e,t)}(this.keys(),(function(t){return[t,e.get(t)]}))},r.u=function(e){vt(this);var t=0,o=this.B,r=this,n=new ct;return n.a=function(){if(o!=r.B)throw Error("The map has changed since the iterator was created");if(t>=r.j.length)throw ut;var n=r.j[t++];return e?n:r.o[n]},n.next=n.a.bind(n),n};var mt=/^(?:([^:/?#.]+):)?(?:\\/\\/(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$/;function Tt(e){Pe.call(this),this.headers=new _t,this.C=e||null,this.c=!1,this.J=this.a=null,this.P=this.v="",this.g=0,this.l="",this.i=this.N=this.s=this.L=!1,this.h=0,this.w=null,this.m=Rt,this.I=this.M=!1}D(Tt,Pe);var Rt="";Tt.prototype.b=tt(ot(),"goog.net.XhrIo",void 0).g;var St=/^https?$/i,At=["POST","PUT"];function Mt(e,t){e.c=!1,e.a&&(e.i=!0,e.a.abort(),e.i=!1),e.l=t,e.g=5,It(e),wt(e)}function It(e){e.L||(e.L=!0,We(e,"complete"),We(e,"error"))}function Ot(e){if(e.c&&void 0!==E)if(e.J[1]&&4==Ft(e)&&2==e.getStatus())nt(e.b,Lt(e,"Local request error detected and ignored"));else if(e.s&&4==Ft(e))xe(e.R,0,e);else if(We(e,"readystatechange"),4==Ft(e)){nt(e.b,Lt(e,"Request complete")),e.c=!1;try{var t,o=e.getStatus();e:switch(o){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var r=!0;break e;default:r=!1}if(!(t=r)){var n;if(n=0===o){var s=String(e.v).match(mt)[1]||null;if(!s&&m.self&&m.self.location){var i=m.self.location.protocol;s=i.substr(0,i.length-1)}n=!St.test(s?s.toLowerCase():"")}t=n}if(t)We(e,"complete"),We(e,"success");else{e.g=6;try{var a=2<Ft(e)?e.a.statusText:""}catch(t){nt(e.b,"Can not get status: "+t.message),a=""}e.l=a+" ["+e.getStatus()+"]",It(e)}}finally{wt(e)}}}function wt(e){if(e.a){Dt(e);var t=e.a,o=e.J[0]?R:null;e.a=null,e.J=null,We(e,"ready");try{t.onreadystatechange=o}catch(t){(e=e.b)&&rt(e,Ye,"Problem encountered resetting onreadystatechange: "+t.message)}}}function Dt(e){e.a&&e.I&&(e.a.ontimeout=null),e.w&&(m.clearTimeout(e.w),e.w=null)}function Ft(e){return e.a?e.a.readyState:0}function Ct(e,t){if(e.a&&4==Ft(e))return null===(e=e.a.getResponseHeader(t))?void 0:e}function Lt(e,t){return t+" ["+e.P+" "+e.v+" "+e.getStatus()+"]"}(r=Tt.prototype).T=function(){void 0!==E&&this.a&&(this.l="Timed out after "+this.h+"ms, aborting",this.g=8,nt(this.b,Lt(this,this.l)),We(this,"timeout"),this.abort(8))},r.abort=function(e){this.a&&this.c&&(nt(this.b,Lt(this,"Aborting")),this.c=!1,this.i=!0,this.a.abort(),this.i=!1,this.g=e||7,We(this,"complete"),We(this,"abort"),wt(this))},r.R=function(){this.K||(this.N||this.s||this.i?Ot(this):this.W())},r.W=function(){Ot(this)},r.getStatus=function(){try{return 2<Ft(this)?this.a.status:-1}catch(e){return-1}};var Nt={},jt=null;function Bt(){if(!jt){jt={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),t=["+/=","+/","-_=","-_.","-_"],o=0;5>o;o++){var r=e.concat(t[o].split(""));Nt[o]=r;for(var n=0;n<r.length;n++){var s=r[n];void 0===jt[s]&&(jt[s]=n)}}}}var Ut=["content-type","grpc-status","grpc-message"];function Pt(e){this.a=e.Z,this.m=null,this.b=[],this.h=[],this.g=[],this.f=[],this.c=[],this.l=!1,this.i=0,this.s=new W;var t=this;Oe(this.a,"readystatechange",(function(){var e=t.a;if(e=e.a?e.a.getResponseHeader("Content-Type"):null){if(0==(e=e.toLowerCase()).lastIndexOf("application/grpc-web-text",0)){e=t.a;try{var o=e.a?e.a.responseText:""}catch(t){nt(e.b,"Can not get responseText: "+t.message),o=""}if(o=(e=o||"").length-e.length%4,0==(e=e.substr(t.i,o-t.i)).length)return;t.i=o,e=function(e){var t=e.length,o=3*t/4;o%3?o=Math.floor(o):q("=.",e[t-1])&&(o=q("=.",e[t-2])?o-2:o-1);var r=new Uint8Array(o),n=0;return function(e,t){function o(t){for(;r<e.length;){var o=e.charAt(r++),n=jt[o];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(o))throw Error("Unknown base64 encoding at char: "+o)}return t}Bt();for(var r=0;;){var n=o(-1),s=o(0),i=o(64),a=o(64);if(64===a&&-1===n)break;t(n<<2|s>>4),64!=i&&(t(s<<4&240|i>>2),64!=a&&t(i<<6&192|a))}}(e,(function(e){r[n++]=e})),r.subarray(0,n)}(e)}else{if(0!=e.lastIndexOf("application/grpc",0))return void Vt(t,new j(2,"Unknown Content-type received."));e=new Uint8Array(function(e){try{if(!e.a)return null;if("response"in e.a)return e.a.response;switch(e.m){case Rt:case"text":return e.a.responseText;case"arraybuffer":if("mozResponseArrayBuffer"in e.a)return e.a.mozResponseArrayBuffer}var t=e.b;return t&&rt(t,Ye,"Response type "+e.m+" is not supported on this browser"),null}catch(t){return nt(e.b,"Can not get response: "+t.message),null}}(t.a))}o=null;try{o=function(e,t){function o(e){a.f++,a.a=(a.a<<8)+e,4==a.f&&(a.b=2,a.g=0,"undefined"!=typeof Uint8Array?a.c=new Uint8Array(a.a):a.c=Array(a.a),0==a.a&&n())}function r(e){a.c[a.g++]=e,a.g==a.a&&n()}function n(){var e={};e[a.h]=a.c,a.i.push(e),a.b=V}var s,i,a=e,g=0;for(s=t instanceof Uint8Array||t instanceof Array?t:new Uint8Array(t);g<s.length;){switch(a.b){case 3:z(a,s,g,"stream already broken");break;case V:0==(i=s[g])||i==x?a.h=i:z(a,s,g,"invalid frame byte"),a.b=1,a.a=0,a.f=0;break;case 1:o(s[g]);break;case 2:r(s[g]);break;default:throw Error("unexpected parser state: "+a.b)}a.m++,g++}return e=a.i,a.i=[],0<e.length?e:null}(t.s,e)}catch(e){Vt(t,new j(2,"Error in parsing response body"))}if(o)for(e=0;e<o.length;e++){if(0 in o[e]){var r=o[e][0];if(r){var n=void 0;try{n=t.m(r)}catch(e){Vt(t,new j(13,"Error when deserializing response data: "+n))}if(n){r=t;for(var s=0;s<r.b.length;s++)r.b[s](n)}}}if(x in o[e]&&0<o[e][x].length){for(r="",n=0;n<o[e][x].length;n++)r+=String.fromCharCode(o[e][x][n]);for(r=r.trim().split("\\r\\n"),n={},s=0;s<r.length;s++){var i=r[s].indexOf(":");n[r[s].substring(0,i).trim()]=r[s].substring(i+1).trim()}r=n,n=0,s="","grpc-status"in r&&(n=Number(r["grpc-status"]),delete r["grpc-status"]),"grpc-message"in r&&(s=r["grpc-message"],delete r["grpc-message"]),Vt(t,new j(n,s,r))}}}})),Oe(this.a,"complete",(function(){var e=t.a.g,o=2,r="",n={},s=function(e){var t={};e=(e.a&&4==Ft(e)&&e.a.getAllResponseHeaders()||"").split("\\r\\n");for(var o=0;o<e.length;o++)if(!/^[\\s\\xa0]*$/.test(e[o])){var r=X(e[o]),n=r[0];if("string"==typeof(r=r[1])){r=r.trim();var s=t[n]||[];t[n]=s,s.push(r)}}return function(e,t){var o,r={};for(o in e)r[o]=t.call(void 0,e[o],o,e);return r}(t,(function(e){return e.join(", ")}))}(t.a);if(Object.keys(s).forEach((function(e){Ut.includes(e)||(n[e]=s[e])})),function(e,t){for(var o=0;o<e.g.length;o++)e.g[o](t)}(t,n),0!=e){switch(e){case 7:o=10;break;case 8:o=4;break;case 6:o=function(e){switch(e){case 200:return 0;case 400:return 3;case 401:return 16;case 403:return 7;case 404:return 5;case 409:return 10;case 412:return 9;case 429:return 8;case 499:return 1;case 500:default:return 2;case 501:return 12;case 503:return 14;case 504:return 4}}(t.a.getStatus());break;default:o=14}10==o&&t.l||Vt(t,new j(o,function(e){switch(e){case 0:return"No Error";case 1:return"Access denied to content document";case 2:return"File not found";case 3:return"Firefox silently errored";case 4:return"Application custom error";case 5:return"An exception occurred";case 6:return"Http response at 400 or 500 level";case 7:return"Request was aborted";case 8:return"Request timed out";case 9:return"The resource is not available offline";default:return"Unrecognized error code"}}(e)))}else e=!1,"grpc-status"in s&&(o=Number(Ct(t.a,"grpc-status")),"grpc-message"in s&&(r=Ct(t.a,"grpc-message")),0!=o&&(Vt(t,new j(o,r||"",s)),e=!0)),e||function(e){for(var t=0;t<e.c.length;t++)e.c[t]()}(t)}))}function Wt(e,t){-1<(t=e.indexOf(t))&&e.splice(t,1)}function Vt(e,t){if(0!=t.code)for(var o=new j(t.code,decodeURIComponent(t.message||""),t.metadata),r=0;r<e.f.length;r++)e.f[r](o);for(t={code:t.code,details:decodeURIComponent(t.message||""),metadata:t.metadata},o=0;o<e.h.length;o++)e.h[o](t)}function xt(e,t){e=void 0===e?{}:e,this.a=e.format||T("format",e)||"text",this.g=e.aa||T("suppressCorsPreflight",e)||!1,this.f=e.withCredentials||T("withCredentials",e)||!1,this.b=e.$||T("streamInterceptors",e)||[],this.h=e.ba||T("unaryInterceptors",e)||[],this.c=t||null}function zt(e,t,o){var r=t.getMethodDescriptor(),n=o+r.name;(o=e.c?e.c:new Tt).M=e.f;var s=new Pt({Z:o});s.m=r.b;var i=t.getMetadata();for(a in i)o.headers.set(a,i[a]);if("text"==e.a?(o.headers.set("Content-Type","application/grpc-web-text"),o.headers.set("Accept","application/grpc-web-text")):o.headers.set("Content-Type","application/grpc-web+proto"),o.headers.set("X-User-Agent","grpc-web-javascript/0.1"),o.headers.set("X-Grpc-Web","1"),o.headers.has("deadline")){var a=Number(o.headers.get("deadline"));a=Math.ceil(a-(new Date).getTime()),o.headers.delete("deadline"),1/0===a&&(a=0),0<a&&(o.headers.set("grpc-timeout",a+"m"),o.h=Math.max(0,Math.max(1e3,Math.ceil(1.1*a))))}if(e.g){a={};for(var g=c((i=o.headers).keys()),p=g.next();!p.done;p=g.next())a[p=p.value]=i.get(p);o.headers.clear();e:{for(l in a){var l=!1;break e}l=!0}l||(a=function(e){var t="";return function(e,t){for(var o in e)t.call(void 0,e[o],o,e)}(e,(function(e,o){t+=o,t+=":",t+=e,t+="\\r\\n"})),t}(a),"string"==typeof n?(l=encodeURIComponent("$httpHeaders"),(l+=a=null!=a?"="+encodeURIComponent(String(a)):"")&&(0>(a=n.indexOf("#"))&&(a=n.length),0>(i=n.indexOf("?"))||i>a?(i=a,g=""):g=n.substring(i+1,a),a=(n=[n.substr(0,i),g,n.substr(a)])[1],n[1]=l?a?a+"&"+l:l:a,n=n[0]+(n[1]?"?"+n[1]:"")+n[2])):n.a("$httpHeaders",a))}for(r=(t=(0,r.a)(t.getRequestMessage())).length,l=[0,0,0,0],a=new Uint8Array(5+r),i=3;0<=i;i--)l[i]=r%256,r>>>=8;if(a.set(new Uint8Array(l),1),a.set(t,5),t=a,"text"==e.a){var u;for(e=t,void 0===u&&(u=0),Bt(),u=Nt[u],t=Array(Math.floor(e.length/3)),r=u[64]||"",l=a=0;a<e.length-2;a+=3){p=e[a];var d=e[a+1];g=e[a+2],i=u[p>>2],p=u[(3&p)<<4|d>>4],d=u[(15&d)<<2|g>>6],g=u[63&g],t[l++]=i+p+d+g}switch(i=0,g=r,e.length-a){case 2:g=u[(15&(i=e[a+1]))<<2]||r;case 1:e=e[a],t[l]=u[e>>2]+u[(3&e)<<4|i>>4]+g+r}t=t.join("")}else"binary"==e.a&&(o.m="arraybuffer");return function(e,t,o){if(e.a)throw Error("[goog.net.XhrIo] Object is active with another request="+e.v+"; newUri="+t);e.v=t,e.l="",e.g=0,e.P="POST",e.L=!1,e.c=!0,e.a=e.C?gt(e.C):gt(Ge),e.J=e.C?it(e.C):it(Ge),e.a.onreadystatechange=w(e.R,e);try{nt(e.b,Lt(e,"Opening Xhr")),e.N=!0,e.a.open("POST",String(t),!0),e.N=!1}catch(t){return nt(e.b,Lt(e,"Error opening Xhr: "+t.message)),void Mt(e,t)}t=o||"";var r=(o=e.headers.clone()).G().find((function(e){return"content-type"==e.toLowerCase()})),n=m.FormData&&t instanceof m.FormData;!(0<=H(At,"POST"))||r||n||o.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),o.forEach((function(e,t){this.a.setRequestHeader(t,e)}),e),e.m&&(e.a.responseType=e.m),"withCredentials"in e.a&&e.a.withCredentials!==e.M&&(e.a.withCredentials=e.M);try{Dt(e),0<e.h&&(e.I=function(e){return oe&&ue()&&"number"==typeof e.timeout&&void 0!==e.ontimeout}(e.a),nt(e.b,Lt(e,"Will abort after "+e.h+"ms if incomplete, xhr2 "+e.I)),e.I?(e.a.timeout=e.h,e.a.ontimeout=w(e.T,e)):e.w=xe(e.T,e.h,e)),nt(e.b,Lt(e,"Sending request")),e.s=!0,e.a.send(t),e.s=!1}catch(t){nt(e.b,Lt(e,"Send error: "+t.message)),Mt(e,t)}}(o,n,t),s}function kt(e,t,o){var r=!1,n=null,s=!1;e.on("data",(function(e){r=!0,n=e})),e.on("error",(function(e){0==e.code||s||(s=!0,t(e,null))})),e.on("status",(function(e){0==e.code||s?o&&t(null,null,e):(s=!0,t({code:e.code,message:e.details,metadata:e.metadata},null))})),o&&e.on("metadata",(function(e){t(null,null,null,e)})),e.on("end",(function(){s||(r?t(null,n):t({code:2,message:"Incomplete response"})),o&&t(null,null)}))}function Ht(e,t){var o=e;return t.forEach((function(e){var t=o;o=function(o){return e.intercept(o,t)}})),o}Pt.prototype.on=function(e,t){return"data"==e?this.b.push(t):"status"==e?this.h.push(t):"metadata"==e?this.g.push(t):"end"==e?this.c.push(t):"error"==e&&this.f.push(t),this},Pt.prototype.removeListener=function(e,t){return"data"==e?Wt(this.b,t):"status"==e?Wt(this.h,t):"metadata"==e?Wt(this.g,t):"end"==e?Wt(this.c,t):"error"==e&&Wt(this.f,t),this},Pt.prototype.cancel=function(){this.l=!0,this.a.abort()},Pt.prototype.cancel=Pt.prototype.cancel,Pt.prototype.removeListener=Pt.prototype.removeListener,Pt.prototype.on=Pt.prototype.on,xt.prototype.X=function(e,t,o,r,n){var s=this,i=e.substr(0,e.length-r.name.length);return kt(e=Ht((function(e){return zt(s,e,i)}),this.b).call(this,N(r,t,o)),n,!1),new B(e)},xt.prototype.S=function(e,t,o,r){var n=this,s=e.substr(0,e.length-r.name.length);return Ht((function(e){return new Promise((function(t,o){var r,i,a;kt(zt(n,e,s),(function(n,s,g,p){n?o(n):s?a=s:g?i=g:p?r=p:(n=e.getMethodDescriptor(),t(new L(a,n,s=void 0===(s=r)?{}:s,void 0===i?null:i)))}),!0)}))}),this.h).call(this,N(r,t,o)).then((function(e){return e.getResponseMessage()}))},xt.prototype.unaryCall=function(e,t,o,r){return this.S(e,t,o,r)},xt.prototype.Y=function(e,t,o,r){var n=this,s=e.substr(0,e.length-r.name.length);return Ht((function(e){return zt(n,e,s)}),this.b).call(this,N(r,t,o))},xt.prototype.serverStreaming=xt.prototype.Y,xt.prototype.unaryCall=xt.prototype.unaryCall,xt.prototype.thenableCall=xt.prototype.S,xt.prototype.rpcCall=xt.prototype.X,e.exports.GrpcWebClientBase=xt,e.exports.StatusCode={OK:0,CANCELLED:1,UNKNOWN:2,INVALID_ARGUMENT:3,DEADLINE_EXCEEDED:4,NOT_FOUND:5,ALREADY_EXISTS:6,PERMISSION_DENIED:7,UNAUTHENTICATED:16,RESOURCE_EXHAUSTED:8,FAILED_PRECONDITION:9,ABORTED:10,OUT_OF_RANGE:11,UNIMPLEMENTED:12,INTERNAL:13,UNAVAILABLE:14,DATA_LOSS:15},e.exports.MethodDescriptor=function(e,t,o,r,n,s){this.name=e,this.a=n,this.b=s},e.exports.MethodType={UNARY:"unary",SERVER_STREAMING:"server_streaming",BIDI_STREAMING:"bidi_streaming"}}},__webpack_module_cache__={};function __nested_webpack_require_435574__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var o=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(o.exports,o,o.exports,__nested_webpack_require_435574__),o.exports}__nested_webpack_require_435574__.d=(e,t)=>{for(var o in t)__nested_webpack_require_435574__.o(t,o)&&!__nested_webpack_require_435574__.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},__nested_webpack_require_435574__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__nested_webpack_require_435574__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__nested_webpack_require_435574__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__nested_webpack_require_435574__.r(__webpack_exports__),__nested_webpack_require_435574__.d(__webpack_exports__,{Entity:()=>i,EntityACI:()=>d,EntityACL:()=>y,Property:()=>r,TransactionService:()=>M});var e=__nested_webpack_require_435574__(347);function t(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(t){var o=e.h.v1.ScalarValue.ScalarValueCase;switch(t.getScalarValueCase()){case o.SCALAR_VALUE_NOT_SET:return;case o.INTEGER_VALUE:return t.getIntegerValue();case o.DOUBLE_VALUE:return t.getDoubleValue();case o.BOOLEAN_VALUE:return t.getBooleanValue();case o.STRING_VALUE:return t.getStringValue();case o.SPECIAL_VALUE:return t.getSpecialValue();default:throw new Error("Unkown value type ".concat(t.getScalarValueCase(),"."))}}var r=function(){function r(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this.wrappedProperty=e}var n,s;return n=r,(s=[{key:"getName",value:function(){return this.wrappedProperty.getName()}},{key:"getId",value:function(){return this.wrappedProperty.getId()}},{key:"getUnit",value:function(){return this.wrappedProperty.getUnit()}},{key:"getValue",value:function(){var t=this.wrappedProperty.getValue();if(void 0!==t){var r=e.h.v1.Value.ValueCase;switch(t.getValueCase()){case r.VALUE_NOT_SET:return;case r.SCALAR_VALUE:return o(t.getScalarValue());case r.LIST_VALUES:return t.getListValues().getValuesList().map((function(e){return o(e)}));default:throw new Error("Unknown value type ".concat(t.getValueCase(),"."))}}}},{key:"isList",value:function(){return this.wrappedProperty.getDataType().getDataTypeCase()===e.h.v1.DataType.DataTypeCase.LIST_DATA_TYPE}},{key:"isReference",value:function(){var t=this.wrappedProperty.getDataType(),o=t.getDataTypeCase();return o===e.h.v1.DataType.DataTypeCase.REFERENCE_DATA_TYPE||o===e.h.v1.DataType.DataTypeCase.LIST_DATA_TYPE&&t.getListDataType().getListDataTypeCase()===e.h.v1.ListDataType.ListDataTypeCase.REFERENCE_DATA_TYPE}}])&&t(n.prototype,s),r}();function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function s(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.wrappedEntity=e}var o,i;return o=t,(i=[{key:"getDescription",value:function(){return this.wrappedEntity.getDescription()}},{key:"getFilePath",value:function(){if(!this.isFile())throw new Error("Only FILE entities can have a file path.");return this.wrappedEntity.getFileDescriptor().getPath()}},{key:"getId",value:function(){return this.wrappedEntity.getId()}},{key:"getName",value:function(){return this.wrappedEntity.getName()}},{key:"getParents",value:function(){return this.wrappedEntity.getParentsList()}},{key:"getProperties",value:function(){return this.wrappedEntity.getPropertiesList().map((function(e){return new r(e)}))}},{key:"getProperty",value:function(e){var t=this.getProperties();if(t){var o,r=function(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,t){if(e){if("string"==typeof e)return n(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?n(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0,s=function(){};return{s,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,g=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return a=e.done,e},e:function(e){g=!0,i=e},f:function(){try{a||null==o.return||o.return()}finally{if(g)throw i}}}}(t);try{for(r.s();!(o=r.n()).done;){var s=o.value;if(s.getName().toLowerCase()===e.toLowerCase())return s}}catch(e){r.e(e)}finally{r.f()}}}},{key:"getRole",value:function(){return function(t){var o=e.h.v1.EntityRole;switch(t){case o.ENTITY_ROLE_UNSPECIFIED:return;case o.ENTITY_ROLE_RECORD_TYPE:return"RECORD_TYPE";case o.ENTITY_ROLE_RECORD:return"RECORD";case o.ENTITY_ROLE_PROPERTY:return"PROPERTY";case o.ENTITY_ROLE_FILE:return"FILE";default:throw new Error("Unknown role ".concat(t,"."))}}(this.wrappedEntity.getRole())}},{key:"isRecord",value:function(){return this.wrappedEntity.getRole()===e.h.v1.EntityRole.ENTITY_ROLE_RECORD}},{key:"isFile",value:function(){return this.wrappedEntity.getRole()===e.h.v1.EntityRole.ENTITY_ROLE_FILE}}])&&s(o.prototype,i),t}();function a(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,t){if(e){if("string"==typeof e)return g(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?g(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0,n=function(){};return{s:n,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,a=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==o.return||o.return()}finally{if(a)throw s}}}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function u(e,t,o){return t&&l(e.prototype,t),o&&l(e,o),e}var c,d=function(){function e(t){var o=t.role,r=t.grant,n=t.priority,s=t.permissions,i=t.capabilities;p(this,e),this.role=o,this.grant=r,this.priority=n,this.permissions=s||{retrieve_entity:!1,retrieve_acl:!1,retrieve_history:!1,retrieve_owner:!1,retrieve_file:!1,delete_entity:!1,edit_acl:!1,update_description:!1,update_value:!1,update_role:!1,update_remove_parent:!1,update_add_parent:!1,update_remove_property:!1,update_add_property:!1,update_name:!1,update_data_type:!1,update_query_template_definition:!1,update_remove_file:!1,update_add_file:!1,update_move_file:!1,use_as_reference:!1,use_as_property:!1,use_as_parent:!1,use_as_data_type:!1},this.capabilities=i||{delete_aci:!1}}return u(e,[{key:"isEditAcl",value:function(){return this.permissions.edit_acl}},{key:"setEditAcl",value:function(e){e=void 0===e||e,this.permissions.edit_acl=e}},{key:"isDelete",value:function(){return this.permissions.delete_entity}},{key:"setDelete",value:function(e){e=void 0===e||e,this.permissions.delete_entity=e}},{key:"isFullRetrieve",value:function(){return this.permissions.retrieve_entity&&this.permissions.retrieve_acl&&this.permissions.retrieve_history&&this.permissions.retrieve_owner&&this.permissions.retrieve_file}},{key:"setFullRetrieve",value:function(e){e=void 0===e||e,this.permissions.retrieve_entity=e,this.permissions.retrieve_acl=e,this.permissions.retrieve_history=e,this.permissions.retrieve_owner=e,this.permissions.retrieve_file=e}},{key:"isPartialRetrieve",value:function(){return this.permissions.retrieve_entity||this.permissions.retrieve_acl||this.permissions.retrieve_history||this.permissions.retrieve_owner||this.permissions.retrieve_file}},{key:"isFullUse",value:function(){return this.permissions.use_as_reference&&this.permissions.use_as_property&&this.permissions.use_as_parent&&this.permissions.use_as_data_type}},{key:"setFullUse",value:function(e){e=void 0===e||e,this.permissions.use_as_reference=e,this.permissions.use_as_property=e,this.permissions.use_as_parent=e,this.permissions.use_as_data_type=e}},{key:"isPartialUse",value:function(){return this.permissions.use_as_reference||this.permissions.use_as_property||this.permissions.use_as_parent||this.permissions.use_as_data_type}},{key:"isFullUpdate",value:function(){return this.permissions.update_description&&this.permissions.update_value&&this.permissions.update_role&&this.permissions.update_remove_parent&&this.permissions.update_add_parent&&this.permissions.update_remove_property&&this.permissions.update_add_property&&this.permissions.update_name&&this.permissions.update_data_type&&this.permissions.update_query_template_definition&&this.permissions.update_remove_file&&this.permissions.update_add_file&&this.permissions.update_move_file}},{key:"setFullUpdate",value:function(e){e=void 0===e||e,this.permissions.update_description=e,this.permissions.update_value=e,this.permissions.update_role=e,this.permissions.update_remove_parent=e,this.permissions.update_add_parent=e,this.permissions.update_remove_property=e,this.permissions.update_add_property=e,this.permissions.update_name=e,this.permissions.update_data_type=e,this.permissions.update_query_template_definition=e,this.permissions.update_remove_file=e,this.permissions.update_add_file=e,this.permissions.update_move_file=e}},{key:"isPartialUpdate",value:function(){return this.permissions.update_description||this.permissions.update_value||this.permissions.update_role||this.permissions.update_remove_parent||this.permissions.update_add_parent||this.permissions.update_remove_property||this.permissions.update_add_property||this.permissions.update_name||this.permissions.update_data_type||this.permissions.update_query_template_definition||this.permissions.update_remove_file||this.permissions.update_add_file||this.permissions.update_move_file}},{key:"impliesOwnership",value:function(){return this.grant&&!this.isOtherRole()&&!this.isOwnerRole()&&this.permissions.edit_acl}},{key:"isOtherRole",value:function(){return"?OTHER?"===this.role}},{key:"isOwnerRole",value:function(){return"?OWNER?"===this.role}}]),e}(),y=function(){function e(t){var o=t.id,r=t.acis,n=t.current_permissions;p(this,e),this.id=o,this.acis=r||[],this.current_permissions=n||{}}return u(e,[{key:"getOwners",value:function(){return this.acis.filter((function(e){return e.impliesOwnership()})).map((function(e){return e.role}))}}]),e}(),f={retrieve_entity:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_ENTITY,retrieve_acl:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_ACL,retrieve_history:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_HISTORY,retrieve_owner:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_OWNER,retrieve_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_RETRIEVE_FILE,delete_entity:e.h.v1.EntityPermission.ENTITY_PERMISSION_DELETE,edit_acl:e.h.v1.EntityPermission.ENTITY_PERMISSION_EDIT_ACL,update_description:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_DESCRIPTION,update_value:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_VALUE,update_role:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ROLE,update_remove_parent:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_REMOVE_PARENT,update_add_parent:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ADD_PARENT,update_remove_property:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_REMOVE_PROPERTY,update_add_property:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ADD_PROPERTY,update_name:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_NAME,update_data_type:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_DATA_TYPE,update_query_template_definition:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_QUERY_TEMPLATE_DEFINITION,update_remove_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_REMOVE_FILE,update_add_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_ADD_FILE,update_move_file:e.h.v1.EntityPermission.ENTITY_PERMISSION_UPDATE_MOVE_FILE,use_as_reference:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_REFERENCE,use_as_property:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_PROPERTY,use_as_parent:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_PARENT,use_as_data_type:e.h.v1.EntityPermission.ENTITY_PERMISSION_USE_AS_DATA_TYPE},b=(c={},Object.keys(f).forEach((function(e){c[f[e]]=e})),c);function h(t){var o=t.getRole(),r=t.getGrant(),n=t.getPriority(),s=t.getPermissionsList(),i=t.getCapabilitiesList(),g=new d({role:o,grant:r,priority:n});return g.permissions=function(e){var t,o={},r=a(e);try{for(r.s();!(t=r.n()).done;){var n=t.value;o[b[n]]=!0}}catch(e){r.e(e)}finally{r.f()}return o}(s),g.capabilities=function(t){var o,r={},n=a(t);try{for(n.s();!(o=n.n()).done;)o.value===e.h.v1.EntityPermissionRuleCapability.ENTITY_PERMISSION_RULE_CAPABILITY_DELETE&&(r.delete_aci=!0)}catch(e){n.e(e)}finally{n.f()}return r}(i),g}function _(t){var o={edit_acl:!1,edit_priority_acl:!1};return t===e.h.v1.EntityAclPermission.ENTITY_ACL_PERMISSION_EDIT_ACL?o.edit_acl=!0:t===e.h.v1.EntityAclPermission.ENTITY_ACL_PERMISSION_EDIT_PRIORITY_ACL&&(o.edit_acl=!0,o.edit_priority_acl=!0),o}function v(e){var t=e.getId(),o=e.getRulesList(),r=e.getPermission();return new y({id:t,acis:o.map(h),current_permissions:_(r)})}function E(t){var o=new e.h.v1.EntityPermissionRule;return o.setRole(t.role),o.setPriority(t.priority),o.setGrant(t.grant),o.setPermissionsList(Object.keys(t.permissions).filter((function(e){return t.permissions[e]&&f[e]})).map((function(e){return f[e]}))),o}function m(t){var o=new e.h.v1.EntityACL;return o.setId(t.id),o.setRulesList(t.acis.map(E)),o}function T(e,t,o,r,n,s,i){try{var a=e[s](i),g=a.value}catch(e){return void o(e)}a.done?t(g):Promise.resolve(g).then(r,n)}function R(e){return function(){var t=this,o=arguments;return new Promise((function(r,n){var s=e.apply(t,o);function i(e){T(s,r,n,i,a,"next",e)}function a(e){T(s,r,n,i,a,"throw",e)}i(void 0)}))}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function A(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var M=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.uri=e||"/api"}var o,r,n,s,i,a;return o=t,r=[{key:"_PrepareTransaction",value:function(t){Array.isArray(t)||(t=[t]);var o,r,n=new e.h.v1.EntityTransactionServiceClient(this.uri,null,null),s=new e.h.v1.MultiTransactionRequest,i=function(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,t){if(e){if("string"==typeof e)return S(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?S(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var r=0,n=function(){};return{s:n,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,a=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==o.return||o.return()}finally{if(a)throw s}}}}(t);try{for(i.s();!(r=i.n()).done;){var a=r.value;(o=new e.h.v1.TransactionRequest).setRetrieveRequest(a),s.addRequests(o)}}catch(e){i.e(e)}finally{i.f()}var g={};return function(e,t){n.multiTransaction(s,g,(function(o,r){o&&t(o),e(r)}))}}},{key:"_CreateRetrieveRequest",value:function(t){var o=new e.h.v1.RetrieveRequest;return o.setId(t),o.setRegisterFileDownload(!1),o}},{key:"_CreateQueryRequest",value:function(t){var o=new e.h.v1.Query;o.setQuery(t);var r=new e.h.v1.RetrieveRequest;return r.setQuery(o),r.setRegisterFileDownload(!1),r}},{key:"retrieve",value:(a=R(regeneratorRuntime.mark((function e(t){var o,r=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return Array.isArray(t)||(t=[t]),o=t.map((function(e){return r._CreateRetrieveRequest(e)})),e.abrupt("return",new Promise(this._PrepareTransaction(o)));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"executeQuery",value:(i=R(regeneratorRuntime.mark((function e(t){var o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=this._CreateQueryRequest(t),e.abrupt("return",new Promise(this._PrepareTransaction(o)));case 2:case"end":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:"retrieveEntityAcl",value:(s=R(regeneratorRuntime.mark((function t(o){var r,n,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=new e.h.v1.EntityTransactionServicePromiseClient(this.uri,null,null),(n=new e.h.v1.MultiRetrieveEntityACLRequest).addId(o),t.next=5,r.multiRetrieveEntityACL(n,{});case 5:return s=t.sent,t.abrupt("return",v(s.getAclsList()[0]));case 7:case"end":return t.stop()}}),t,this)}))),function(e){return s.apply(this,arguments)})},{key:"updateEntityAcl",value:(n=R(regeneratorRuntime.mark((function t(o){var r,n,s,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=m(o),n=new e.h.v1.EntityTransactionServicePromiseClient(this.uri,null,null),(s=new e.h.v1.MultiUpdateEntityACLRequest).setAclsList([r]),t.next=6,n.multiUpdateEntityACL(s,{});case 6:return i=t.sent,t.abrupt("return",i);case 8:case"end":return t.stop()}}),t,this)}))),function(e){return n.apply(this,arguments)})}],r&&A(o.prototype,r),t}()})(),__webpack_exports__})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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OEUsNEJBQTRCLGdCQUFnQixlQUFlLDRDQUE0QywwQkFBMEIsNkhBQTZILHNFQUFzRSxPQUFPLHNDQUFzQyxNQUFNLG9DQUFvQyxvREFBb0QsZ0xBQWdMLHVDQUF1QyxTQUFTLHVCQUF1QixPQUFPLGlCQUFpQixvQkFBb0IsUUFBUSxFQUFFLHNCQUFzQixlQUFlLFFBQVEsTUFBTSw2SkFBNkosZ0JBQWdCLE9BQU8sYUFBYSxZQUFZLGNBQWMsZUFBZSxrQkFBa0IsZUFBZSxTQUFTLGNBQWMsSUFBSSw4QkFBOEIsUUFBUSxnQkFBZ0IsSUFBSSxJQUFJLFVBQVUsZ0JBQWdCLEVBQUUsY0FBYywwRUFBMEUsU0FBUyxPQUFPLFFBQVEsTUFBTSxTQUFTLHFCQUFxQixzQ0FBc0MsYUFBYSxLQUFLLEVBQUUsK0NBQStDLGlDQUFpQyxtREFBbUQsRUFBRSw0Q0FBNEMsdUJBQXVCLGNBQWMsaUNBQWlDLHNEQUFzRCxFQUFFLGlFQUFpRSxhQUFhLDRDQUE0QyxNQUFNLHVCQUF1Qiw2REFBNkQsbUNBQW1DLCtEQUErRCxrQ0FBa0MsVUFBVSxnQkFBZ0IsK0JBQStCLEVBQUUsRUFBRSxxRUFBcUUsTUFBTSw0Q0FBNEMsTUFBTSx1QkFBdUIsd0dBQXdHLGtDQUFrQyxVQUFVLGdCQUFnQiwrQkFBK0IsRUFBRSxFQUFFLDBFQUEwRSxVQUFVLDRDQUE0QyxNQUFNLHVCQUF1QixpTEFBaUwsRUFBRSxnRUFBZ0Usa0NBQWtDLFVBQVUsZ0JBQWdCLCtCQUErQixFQUFFLEVBQUUsd0VBQXdFLFlBQVksNENBQTRDLE1BQU0sdUJBQXVCLDRMQUE0TCxFQUFFLDRDQUE0QyxrQ0FBa0MsVUFBVSxnQkFBZ0IsK0JBQStCLEVBQUUsd0JBQXdCLEdBQUcsd0JBQXdCLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW9zREJXZWJ1aTIvLi9ub2RlX21vZHVsZXMvQGluZGlzY2FsZS9jYW9zZGItd2VidWktZW50aXR5LXNlcnZpY2UvZGlzdC9jYW9zZGItd2VidWktZW50aXR5LXNlcnZpY2UuanM/NDMwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkNhb3NEQkVudGl0eVNlcnZpY2U9dCgpOmUuQ2Fvc0RCRW50aXR5U2VydmljZT10KCl9KHNlbGYsKGZ1bmN0aW9uKCl7cmV0dXJuKCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189ezM0NzooZSx0LG8pPT57dmFyIHI9e307ci52MT1vKDQwMCksdC5oPXJ9LDQwMDooZSx0LG8pPT57dmFyIHI9e307ci53ZWI9byg0MCk7dmFyIG49e2Nhb3NkYjp7fX07bi5jYW9zZGIuZW50aXR5PXt9LG4uY2Fvc2RiLmVudGl0eS52MT1vKDIyNiksbi5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZUNsaWVudD1mdW5jdGlvbihlLHQsbyl7b3x8KG89e30pLG8uZm9ybWF0PVwidGV4dFwiLHRoaXMuY2xpZW50Xz1uZXcgci53ZWIuR3JwY1dlYkNsaWVudEJhc2UobyksdGhpcy5ob3N0bmFtZV89ZS5yZXBsYWNlKC9cXC8rJC8sXCJcIil9LG4uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VQcm9taXNlQ2xpZW50PWZ1bmN0aW9uKGUsdCxvKXtvfHwobz17fSksby5mb3JtYXQ9XCJ0ZXh0XCIsdGhpcy5jbGllbnRfPW5ldyByLndlYi5HcnBjV2ViQ2xpZW50QmFzZShvKSx0aGlzLmhvc3RuYW1lXz1lLnJlcGxhY2UoL1xcLyskLyxcIlwiKX07dmFyIHM9bmV3IHIud2ViLk1ldGhvZERlc2NyaXB0b3IoXCIvY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2UvTXVsdGlUcmFuc2FjdGlvblwiLHIud2ViLk1ldGhvZFR5cGUuVU5BUlksbi5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LG4uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNlcmlhbGl6ZUJpbmFyeSgpfSksbi5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSk7bi5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUubXVsdGlUcmFuc2FjdGlvbj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHRoaXMuY2xpZW50Xy5ycGNDYWxsKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlL011bHRpVHJhbnNhY3Rpb25cIixlLHR8fHt9LHMsbyl9LG4uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VQcm9taXNlQ2xpZW50LnByb3RvdHlwZS5tdWx0aVRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2xpZW50Xy51bmFyeUNhbGwodGhpcy5ob3N0bmFtZV8rXCIvY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2UvTXVsdGlUcmFuc2FjdGlvblwiLGUsdHx8e30scyl9O3ZhciBpPW5ldyByLndlYi5NZXRob2REZXNjcmlwdG9yKFwiL2Nhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlL011bHRpUmV0cmlldmVFbnRpdHlBQ0xcIixyLndlYi5NZXRob2RUeXBlLlVOQVJZLG4uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdCxuLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLChmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXJpYWxpemVCaW5hcnkoKX0pLG4uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkpO24uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLm11bHRpUmV0cmlldmVFbnRpdHlBQ0w9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0aGlzLmNsaWVudF8ucnBjQ2FsbCh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZS9NdWx0aVJldHJpZXZlRW50aXR5QUNMXCIsZSx0fHx7fSxpLG8pfSxuLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlUHJvbWlzZUNsaWVudC5wcm90b3R5cGUubXVsdGlSZXRyaWV2ZUVudGl0eUFDTD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNsaWVudF8udW5hcnlDYWxsKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlL011bHRpUmV0cmlldmVFbnRpdHlBQ0xcIixlLHR8fHt9LGkpfTt2YXIgYT1uZXcgci53ZWIuTWV0aG9kRGVzY3JpcHRvcihcIi9jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZS9NdWx0aVVwZGF0ZUVudGl0eUFDTFwiLHIud2ViLk1ldGhvZFR5cGUuVU5BUlksbi5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdCxuLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWFsaXplQmluYXJ5KCl9KSxuLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSk7bi5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUubXVsdGlVcGRhdGVFbnRpdHlBQ0w9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0aGlzLmNsaWVudF8ucnBjQ2FsbCh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZS9NdWx0aVVwZGF0ZUVudGl0eUFDTFwiLGUsdHx8e30sYSxvKX0sbi5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZVByb21pc2VDbGllbnQucHJvdG90eXBlLm11bHRpVXBkYXRlRW50aXR5QUNMPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2xpZW50Xy51bmFyeUNhbGwodGhpcy5ob3N0bmFtZV8rXCIvY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlUcmFuc2FjdGlvblNlcnZpY2UvTXVsdGlVcGRhdGVFbnRpdHlBQ0xcIixlLHR8fHt9LGEpfSxuLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2VDbGllbnQ9ZnVuY3Rpb24oZSx0LG8pe298fChvPXt9KSxvLmZvcm1hdD1cInRleHRcIix0aGlzLmNsaWVudF89bmV3IHIud2ViLkdycGNXZWJDbGllbnRCYXNlKG8pLHRoaXMuaG9zdG5hbWVfPWUucmVwbGFjZSgvXFwvKyQvLFwiXCIpfSxuLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2VQcm9taXNlQ2xpZW50PWZ1bmN0aW9uKGUsdCxvKXtvfHwobz17fSksby5mb3JtYXQ9XCJ0ZXh0XCIsdGhpcy5jbGllbnRfPW5ldyByLndlYi5HcnBjV2ViQ2xpZW50QmFzZShvKSx0aGlzLmhvc3RuYW1lXz1lLnJlcGxhY2UoL1xcLyskLyxcIlwiKX07dmFyIGc9bmV3IHIud2ViLk1ldGhvZERlc2NyaXB0b3IoXCIvY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZS9SZWdpc3RlckZpbGVVcGxvYWRcIixyLndlYi5NZXRob2RUeXBlLlVOQVJZLG4uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LG4uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWFsaXplQmluYXJ5KCl9KSxuLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnkpO24uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUucmVnaXN0ZXJGaWxlVXBsb2FkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdGhpcy5jbGllbnRfLnJwY0NhbGwodGhpcy5ob3N0bmFtZV8rXCIvY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZS9SZWdpc3RlckZpbGVVcGxvYWRcIixlLHR8fHt9LGcsbyl9LG4uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZVByb21pc2VDbGllbnQucHJvdG90eXBlLnJlZ2lzdGVyRmlsZVVwbG9hZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNsaWVudF8udW5hcnlDYWxsKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2UvUmVnaXN0ZXJGaWxlVXBsb2FkXCIsZSx0fHx7fSxnKX07dmFyIHA9bmV3IHIud2ViLk1ldGhvZERlc2NyaXB0b3IoXCIvY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZS9GaWxlRG93bmxvYWRcIixyLndlYi5NZXRob2RUeXBlLlNFUlZFUl9TVFJFQU1JTkcsbi5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3Qsbi5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLChmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXJpYWxpemVCaW5hcnkoKX0pLG4uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeSk7bi5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZS5maWxlRG93bmxvYWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jbGllbnRfLnNlcnZlclN0cmVhbWluZyh0aGlzLmhvc3RuYW1lXytcIi9jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXJ2aWNlL0ZpbGVEb3dubG9hZFwiLGUsdHx8e30scCl9LG4uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2VydmljZVByb21pc2VDbGllbnQucHJvdG90eXBlLmZpbGVEb3dubG9hZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNsaWVudF8uc2VydmVyU3RyZWFtaW5nKHRoaXMuaG9zdG5hbWVfK1wiL2Nhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNlcnZpY2UvRmlsZURvd25sb2FkXCIsZSx0fHx7fSxwKX0sZS5leHBvcnRzPW4uY2Fvc2RiLmVudGl0eS52MX0sMjI2OihlLHQsbyk9Pnt2YXIgcj1vKDE5KSxuPXIscz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc3x8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHx2b2lkIDAhPT1zJiZzfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZnx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30uY2FsbChudWxsKXx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO24uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5BdG9taWNEYXRhVHlwZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXNcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLkRhdGFUeXBlQ2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LldyYXBwZWRSZXF1ZXN0Q2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UuV3JhcHBlZFJlc3BvbnNlQ2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFjbFBlcm1pc3Npb25cIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZUNhcGFiaWxpdHlcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSb2xlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3JcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWRcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3NcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2hcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW1wb3J0YW5jZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLldyYXBwZWRSZXNwb25zZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUuTGlzdERhdGFUeXBlQ2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlQ29kZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3RcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHlcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0cmF0aW9uU3RhdHVzXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LldyYXBwZWRSZXF1ZXN0Q2FzZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLlJldHJpZXZlUmVzcG9uc2VDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5TY2FsYXJWYWx1ZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtblwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHRcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvd1wiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNwZWNpYWxWYWx1ZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdFwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5XcmFwcGVkUmVxdWVzdHNDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZVwiLG51bGwscyksbi5leHBvcnRTeW1ib2woXCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UuVHJhbnNhY3Rpb25SZXNwb25zZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc21pc3Npb25TdGF0dXNcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0XCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5XcmFwcGVkUmVzcG9uc2VDYXNlXCIsbnVsbCxzKSxuLmV4cG9ydFN5bWJvbChcInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWVcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5WYWx1ZUNhc2VcIixudWxsLHMpLG4uZXhwb3J0U3ltYm9sKFwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uXCIsbnVsbCxzKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGVcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGVcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWU9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWU9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb249ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24sci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24uZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb25cIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHk9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3Isci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvclwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2g9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2guZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2hcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHlcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQ9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnk9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnlcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQ9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3csci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvd1wiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbixyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4uZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXI9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlcixyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQ9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3Qub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5vbmVvZkdyb3Vwc18pfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2Usci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3Qub25lb2ZHcm91cHNfKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLm9uZW9mR3JvdXBzXyl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXyxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3Qsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZT1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZVwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGU9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5yZXBlYXRlZEZpZWxkc18sbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmssci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQsci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3Msci5NZXNzYWdlKSxuLkRFQlVHJiYhQ09NUElMRUQmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdD1mdW5jdGlvbihlKXtyLk1lc3NhZ2UuaW5pdGlhbGl6ZSh0aGlzLGUsMCwtMSxudWxsLG51bGwpfSxuLmluaGVyaXRzKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdCxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdFwiKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UuZGlzcGxheU5hbWU9XCJwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlXCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3Q9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3RcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZSxyLk1lc3NhZ2UpLG4uREVCVUcmJiFDT01QSUxFRCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2VcIikscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0PWZ1bmN0aW9uKGUpe3IuTWVzc2FnZS5pbml0aWFsaXplKHRoaXMsZSwwLC0xLG51bGwsbnVsbCl9LG4uaW5oZXJpdHMocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LmRpc3BsYXlOYW1lPVwicHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0XCIpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2U9ZnVuY3Rpb24oZSl7ci5NZXNzYWdlLmluaXRpYWxpemUodGhpcyxlLDAsLTEsbnVsbCxudWxsKX0sbi5pbmhlcml0cyhwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLHIuTWVzc2FnZSksbi5ERUJVRyYmIUNPTVBJTEVEJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5kaXNwbGF5TmFtZT1cInByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2VcIiksci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17bmFtZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXROYW1lKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0TmFtZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUub25lb2ZHcm91cHNfPVtbMSwyXV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUuTGlzdERhdGFUeXBlQ2FzZT17TElTVF9EQVRBX1RZUEVfTk9UX1NFVDowLEFUT01JQ19EQVRBX1RZUEU6MSxSRUZFUkVOQ0VfREFUQV9UWVBFOjJ9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5nZXRMaXN0RGF0YVR5cGVDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXthdG9taWNEYXRhVHlwZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsMCkscmVmZXJlbmNlRGF0YVR5cGU6KG89dC5nZXRSZWZlcmVuY2VEYXRhVHlwZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkRW51bSgpO2Uuc2V0QXRvbWljRGF0YVR5cGUobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFJlZmVyZW5jZURhdGFUeXBlKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwxKSkmJnQud3JpdGVFbnVtKDEsbyksbnVsbCE9KG89ZS5nZXRSZWZlcmVuY2VEYXRhVHlwZSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuZ2V0QXRvbWljRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuc2V0QXRvbWljRGF0YVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5jbGVhckF0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUucHJvdG90eXBlLmhhc0F0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5wcm90b3R5cGUuZ2V0UmVmZXJlbmNlRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVmZXJlbmNlRGF0YVR5cGUsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5zZXRSZWZlcmVuY2VEYXRhVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnByb3RvdHlwZS5jbGVhclJlZmVyZW5jZURhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmVmZXJlbmNlRGF0YVR5cGUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUucHJvdG90eXBlLmhhc1JlZmVyZW5jZURhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLm9uZW9mR3JvdXBzXz1bWzEsMiwzXV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5EYXRhVHlwZUNhc2U9e0RBVEFfVFlQRV9OT1RfU0VUOjAsQVRPTUlDX0RBVEFfVFlQRToxLExJU1RfREFUQV9UWVBFOjIsUkVGRVJFTkNFX0RBVEFfVFlQRTozfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5nZXREYXRhVHlwZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17YXRvbWljRGF0YVR5cGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLGxpc3REYXRhVHlwZToobz10LmdldExpc3REYXRhVHlwZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUudG9PYmplY3QoZSxvKSxyZWZlcmVuY2VEYXRhVHlwZToobz10LmdldFJlZmVyZW5jZURhdGFUeXBlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZmVyZW5jZURhdGFUeXBlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEVudW0oKTtlLnNldEF0b21pY0RhdGFUeXBlKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkxpc3REYXRhVHlwZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldExpc3REYXRhVHlwZShvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0UmVmZXJlbmNlRGF0YVR5cGUobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPXIuTWVzc2FnZS5nZXRGaWVsZChlLDEpKSYmdC53cml0ZUVudW0oMSxvKSxudWxsIT0obz1lLmdldExpc3REYXRhVHlwZSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTGlzdERhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFJlZmVyZW5jZURhdGFUeXBlKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmdldEF0b21pY0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuc2V0QXRvbWljRGF0YVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuY2xlYXJBdG9taWNEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuaGFzQXRvbWljRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmdldExpc3REYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5MaXN0RGF0YVR5cGUsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLnNldExpc3REYXRhVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuY2xlYXJMaXN0RGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRMaXN0RGF0YVR5cGUodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuaGFzTGlzdERhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5nZXRSZWZlcmVuY2VEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWZlcmVuY2VEYXRhVHlwZSwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5wcm90b3R5cGUuc2V0UmVmZXJlbmNlRGF0YVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUucHJvdG90eXBlLmNsZWFyUmVmZXJlbmNlRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRSZWZlcmVuY2VEYXRhVHlwZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnByb3RvdHlwZS5oYXNSZWZlcmVuY2VEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17dmFsdWVzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VmFsdWVzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXM7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkVmFsdWVzKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0VmFsdWVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5wcm90b3R5cGUuZ2V0VmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMucHJvdG90eXBlLnNldFZhbHVlc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5wcm90b3R5cGUuYWRkVmFsdWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQ29sbGVjdGlvblZhbHVlcy5wcm90b3R5cGUuY2xlYXJWYWx1ZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VmFsdWVzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfPVtbMSwyLDMsNCw1XV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5TY2FsYXJWYWx1ZUNhc2U9e1NDQUxBUl9WQUxVRV9OT1RfU0VUOjAsSU5URUdFUl9WQUxVRToxLERPVUJMRV9WQUxVRToyLEJPT0xFQU5fVkFMVUU6MyxTVFJJTkdfVkFMVUU6NCxTUEVDSUFMX1ZBTFVFOjV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmdldFNjYWxhclZhbHVlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17aW50ZWdlclZhbHVlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxkb3VibGVWYWx1ZTpyLk1lc3NhZ2UuZ2V0RmxvYXRpbmdQb2ludEZpZWxkV2l0aERlZmF1bHQodCwyLDApLGJvb2xlYW5WYWx1ZTpyLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodCwzLCExKSxzdHJpbmdWYWx1ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDQsXCJcIiksc3BlY2lhbFZhbHVlOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsNSwwKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkSW50NjQoKTtlLnNldEludGVnZXJWYWx1ZShvKTticmVhaztjYXNlIDI6bz10LnJlYWREb3VibGUoKSxlLnNldERvdWJsZVZhbHVlKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEJvb2woKSxlLnNldEJvb2xlYW5WYWx1ZShvKTticmVhaztjYXNlIDQ6bz10LnJlYWRTdHJpbmcoKSxlLnNldFN0cmluZ1ZhbHVlKG8pO2JyZWFrO2Nhc2UgNTpvPXQucmVhZEVudW0oKSxlLnNldFNwZWNpYWxWYWx1ZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlSW50NjQoMSxvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwyKSkmJnQud3JpdGVEb3VibGUoMixvKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSwzKSkmJnQud3JpdGVCb29sKDMsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNCkpJiZ0LndyaXRlU3RyaW5nKDQsbyksbnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsNSkpJiZ0LndyaXRlRW51bSg1LG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5nZXRJbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5zZXRJbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuY2xlYXJJbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmhhc0ludGVnZXJWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuZ2V0RG91YmxlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMiwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuc2V0RG91YmxlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuY2xlYXJEb3VibGVWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDIscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuaGFzRG91YmxlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmdldEJvb2xlYW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywzLCExKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuc2V0Qm9vbGVhblZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmNsZWFyQm9vbGVhblZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5oYXNCb29sZWFuVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmdldFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNCxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuc2V0U3RyaW5nVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuY2xlYXJTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDQscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuaGFzU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLmdldFNwZWNpYWxWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUucHJvdG90eXBlLnNldFNwZWNpYWxWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw1LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnByb3RvdHlwZS5jbGVhclNwZWNpYWxWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZS5wcm90b3R5cGUuaGFzU3BlY2lhbFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLm9uZW9mR3JvdXBzXz1bWzEsMl1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuVmFsdWVDYXNlPXtWQUxVRV9OT1RfU0VUOjAsU0NBTEFSX1ZBTFVFOjEsTElTVF9WQUxVRVM6Mn0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuZ2V0VmFsdWVDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3NjYWxhclZhbHVlOihvPXQuZ2V0U2NhbGFyVmFsdWUoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2NhbGFyVmFsdWUudG9PYmplY3QoZSxvKSxsaXN0VmFsdWVzOihvPXQuZ2V0TGlzdFZhbHVlcygpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRTY2FsYXJWYWx1ZShvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldExpc3RWYWx1ZXMobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0U2NhbGFyVmFsdWUoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNjYWxhclZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldExpc3RWYWx1ZXMoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkNvbGxlY3Rpb25WYWx1ZXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5nZXRTY2FsYXJWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TY2FsYXJWYWx1ZSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuc2V0U2NhbGFyVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUucHJvdG90eXBlLmNsZWFyU2NhbGFyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRTY2FsYXJWYWx1ZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5oYXNTY2FsYXJWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5wcm90b3R5cGUuZ2V0TGlzdFZhbHVlcz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Db2xsZWN0aW9uVmFsdWVzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5zZXRMaXN0VmFsdWVzPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnByb3RvdHlwZS5jbGVhckxpc3RWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRMaXN0VmFsdWVzKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUucHJvdG90eXBlLmhhc0xpc3RWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2NvZGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLGRlc2NyaXB0aW9uOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRJbnQzMigpO2Uuc2V0Q29kZShvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKSxlLnNldERlc2NyaXB0aW9uKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDswIT09KG89ZS5nZXRDb2RlKCkpJiZ0LndyaXRlSW50MzIoMSxvKSwobz1lLmdldERlc2NyaXB0aW9uKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5wcm90b3R5cGUuZ2V0Q29kZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5wcm90b3R5cGUuc2V0Q29kZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0ludEZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5wcm90b3R5cGUuc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24uZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0SWQobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24ucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRJZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24ucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucmVwZWF0ZWRGaWVsZHNfPVs5LDEwXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxuYW1lOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxkZXNjcmlwdGlvbjpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDMsXCJcIiksdmVyc2lvbjoobz10LmdldFZlcnNpb24oKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi50b09iamVjdChlLG8pLHJvbGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw1LDApLHVuaXQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw2LFwiXCIpLGRhdGFUeXBlOihvPXQuZ2V0RGF0YVR5cGUoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUudG9PYmplY3QoZSxvKSx2YWx1ZToobz10LmdldFZhbHVlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnRvT2JqZWN0KGUsbykscHJvcGVydGllc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFByb3BlcnRpZXNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS50b09iamVjdCxlKSxwYXJlbnRzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UGFyZW50c0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC50b09iamVjdCxlKSxmaWxlRGVzY3JpcHRvcjoobz10LmdldEZpbGVEZXNjcmlwdG9yKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpLGUuc2V0TmFtZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKSxlLnNldERlc2NyaXB0aW9uKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24sdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VmVyc2lvbihvKTticmVhaztjYXNlIDU6bz10LnJlYWRFbnVtKCksZS5zZXRSb2xlKG8pO2JyZWFrO2Nhc2UgNjpvPXQucmVhZFN0cmluZygpLGUuc2V0VW5pdChvKTticmVhaztjYXNlIDc6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RGF0YVR5cGUobyk7YnJlYWs7Y2FzZSA4Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFZhbHVlKG8pO2JyZWFrO2Nhc2UgOTpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRQcm9wZXJ0aWVzKG8pO2JyZWFrO2Nhc2UgMTA6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRQYXJlbnRzKG8pO2JyZWFrO2Nhc2UgMTQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvcix0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RmlsZURlc2NyaXB0b3Iobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0SWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldE5hbWUoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKSwobz1lLmdldERlc2NyaXB0aW9uKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDMsbyksbnVsbCE9KG89ZS5nZXRWZXJzaW9uKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwwIT09KG89ZS5nZXRSb2xlKCkpJiZ0LndyaXRlRW51bSg1LG8pLChvPWUuZ2V0VW5pdCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZyg2LG8pLG51bGwhPShvPWUuZ2V0RGF0YVR5cGUoKSkmJnQud3JpdGVNZXNzYWdlKDcsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRhdGFUeXBlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFZhbHVlKCkpJiZ0LndyaXRlTWVzc2FnZSg4LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRQcm9wZXJ0aWVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg5LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRQYXJlbnRzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxMCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEZpbGVEZXNjcmlwdG9yKCkpJiZ0LndyaXRlTWVzc2FnZSgxNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3Iuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXREZXNjcmlwdGlvbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5zZXREZXNjcmlwdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbiw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldFZlcnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuY2xlYXJWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VmVyc2lvbih2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuaGFzVmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmdldFJvbGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcyw1LDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2V0Um9sZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDUsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXRVbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDYsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXREYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZSw3KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldERhdGFUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmNsZWFyRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXREYXRhVHlwZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuaGFzRGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZSw4KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsOCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmNsZWFyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRWYWx1ZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsOCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LDkpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2V0UHJvcGVydGllc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDksZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5hZGRQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHksdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5jbGVhclByb3BlcnRpZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UHJvcGVydGllc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0UGFyZW50c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQsMTApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2V0UGFyZW50c0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEwLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuYWRkUGFyZW50cz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEwLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnByb3RvdHlwZS5jbGVhclBhcmVudHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UGFyZW50c0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuZ2V0RmlsZURlc2NyaXB0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IsMTQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuc2V0RmlsZURlc2NyaXB0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkucHJvdG90eXBlLmNsZWFyRmlsZURlc2NyaXB0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRGaWxlRGVzY3JpcHRvcih2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5wcm90b3R5cGUuaGFzRmlsZURlc2NyaXB0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMTQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnJlcGVhdGVkRmllbGRzXz1bNF0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17ZW50aXR5SWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLHBhdGg6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpLHNpemU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLDApLGhhc2hlc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEhhc2hlc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0RW50aXR5SWQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCksZS5zZXRQYXRoKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZEludDY0KCksZS5zZXRTaXplKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkSGFzaGVzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldEVudGl0eUlkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRQYXRoKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyksMCE9PShvPWUuZ2V0U2l6ZSgpKSYmdC53cml0ZUludDY0KDMsbyksKG89ZS5nZXRIYXNoZXNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2guc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5nZXRFbnRpdHlJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLnNldEVudGl0eUlkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuc2V0UGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRGVzY3JpcHRvci5wcm90b3R5cGUuZ2V0U2l6ZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLnNldFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURlc2NyaXB0b3IucHJvdG90eXBlLmdldEhhc2hlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5zZXRIYXNoZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5hZGRIYXNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEZXNjcmlwdG9yLnByb3RvdHlwZS5jbGVhckhhc2hlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRIYXNoZXNMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YWxnb3JpdGhtOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSx2YWx1ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2g7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRBbGdvcml0aG0obyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCksZS5zZXRWYWx1ZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2guc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2guc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRBbGdvcml0aG0oKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSwobz1lLmdldFZhbHVlKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5wcm90b3R5cGUuZ2V0QWxnb3JpdGhtPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5IYXNoLnByb3RvdHlwZS5zZXRBbGdvcml0aG09ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSGFzaC5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkhhc2gucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnJlcGVhdGVkRmllbGRzXz1bOCw5LDEwXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxuYW1lOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxkZXNjcmlwdGlvbjpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDMsXCJcIiksdmFsdWU6KG89dC5nZXRWYWx1ZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS50b09iamVjdChlLG8pLGltcG9ydGFuY2U6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw1LDApLHVuaXQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCw2LFwiXCIpLGRhdGFUeXBlOihvPXQuZ2V0RGF0YVR5cGUoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUudG9PYmplY3QoZSxvKSxlcnJvcnNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRFcnJvcnNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0LGUpLHdhcm5pbmdzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0V2FybmluZ3NMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0LGUpLGluZm9zTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0SW5mb3NMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHk7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpLGUuc2V0TmFtZShvKTticmVhaztjYXNlIDM6bz10LnJlYWRTdHJpbmcoKSxlLnNldERlc2NyaXB0aW9uKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRWYWx1ZShvKTticmVhaztjYXNlIDU6bz10LnJlYWRFbnVtKCksZS5zZXRJbXBvcnRhbmNlKG8pO2JyZWFrO2Nhc2UgNjpvPXQucmVhZFN0cmluZygpLGUuc2V0VW5pdChvKTticmVhaztjYXNlIDc6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RGF0YVR5cGUobyk7YnJlYWs7Y2FzZSA4Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFcnJvcnMobyk7YnJlYWs7Y2FzZSA5Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRXYXJuaW5ncyhvKTticmVhaztjYXNlIDEwOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRJbmZvcyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRJZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0TmFtZSgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygyLG8pLChvPWUuZ2V0RGVzY3JpcHRpb24oKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMyxvKSxudWxsIT0obz1lLmdldFZhbHVlKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksMCE9PShvPWUuZ2V0SW1wb3J0YW5jZSgpKSYmdC53cml0ZUVudW0oNSxvKSwobz1lLmdldFVuaXQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoNixvKSxudWxsIT0obz1lLmdldERhdGFUeXBlKCkpJiZ0LndyaXRlTWVzc2FnZSg3LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EYXRhVHlwZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRFcnJvcnNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDgsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0V2FybmluZ3NMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDksbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0SW5mb3NMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEwLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldERlc2NyaXB0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMyxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmNsZWFyVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRWYWx1ZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5oYXNWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuZ2V0SW1wb3J0YW5jZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDUsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldEltcG9ydGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcyw1LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5nZXRVbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsNixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuc2V0VW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsNixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RGF0YVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGF0YVR5cGUsNyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldERhdGFUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsNyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuY2xlYXJEYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERhdGFUeXBlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmhhc0RhdGFUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDcpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5nZXRFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSw4KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuc2V0RXJyb3JzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuYWRkRXJyb3JzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuY2xlYXJFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXJyb3JzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldFdhcm5pbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsOSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLnNldFdhcm5pbmdzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsOSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5Qcm9wZXJ0eS5wcm90b3R5cGUuYWRkV2FybmluZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw5LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5jbGVhcldhcm5pbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFdhcm5pbmdzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUHJvcGVydHkucHJvdG90eXBlLmdldEluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsMTApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5zZXRJbmZvc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEwLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5hZGRJbmZvcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEwLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlByb3BlcnR5LnByb3RvdHlwZS5jbGVhckluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluZm9zTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnJlcGVhdGVkRmllbGRzXz1bNCw1LDZdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxuYW1lOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMixcIlwiKSxkZXNjcmlwdGlvbjpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDMsXCJcIiksZXJyb3JzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RXJyb3JzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSx3YXJuaW5nc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFdhcm5pbmdzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSxpbmZvc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEluZm9zTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQ7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0SWQobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkU3RyaW5nKCksZS5zZXROYW1lKG8pO2JyZWFrO2Nhc2UgMzpvPXQucmVhZFN0cmluZygpLGUuc2V0RGVzY3JpcHRpb24obyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFcnJvcnMobyk7YnJlYWs7Y2FzZSA1Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRXYXJuaW5ncyhvKTticmVhaztjYXNlIDY6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEluZm9zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldElkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXROYW1lKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDIsbyksKG89ZS5nZXREZXNjcmlwdGlvbigpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygzLG8pLChvPWUuZ2V0RXJyb3JzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFdhcm5pbmdzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg1LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEluZm9zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg2LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnNldElkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuZ2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywzLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5nZXRFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnNldEVycm9yc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5hZGRFcnJvcnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuY2xlYXJFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXJyb3JzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUGFyZW50LnByb3RvdHlwZS5nZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuc2V0V2FybmluZ3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuYWRkV2FybmluZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuY2xlYXJXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRXYXJuaW5nc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlBhcmVudC5wcm90b3R5cGUuZ2V0SW5mb3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSw2KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLnNldEluZm9zTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmFkZEluZm9zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNixlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5QYXJlbnQucHJvdG90eXBlLmNsZWFySW5mb3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SW5mb3NMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtlbnRpdHk6KG89dC5nZXRFbnRpdHkoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnRvT2JqZWN0KGUsbyksdXBsb2FkSWQ6KG89dC5nZXRVcGxvYWRJZCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHk7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRFbnRpdHkobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VXBsb2FkSWQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0RW50aXR5KCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0VXBsb2FkSWQoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUuZ2V0RW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnByb3RvdHlwZS5zZXRFbnRpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLmNsZWFyRW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RW50aXR5KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUuaGFzRW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QucHJvdG90eXBlLmdldFVwbG9hZElkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZCwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LnByb3RvdHlwZS5zZXRVcGxvYWRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUuY2xlYXJVcGxvYWRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVwbG9hZElkKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5wcm90b3R5cGUuaGFzVXBsb2FkSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfPVszLDQsNV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtlbnRpdHk6KG89dC5nZXRFbnRpdHkoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnRvT2JqZWN0KGUsbyksZG93bmxvYWRJZDoobz10LmdldERvd25sb2FkSWQoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnRvT2JqZWN0KGUsbyksZXJyb3JzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RXJyb3JzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSx3YXJuaW5nc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFdhcm5pbmdzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSxpbmZvc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEluZm9zTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5O3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RW50aXR5KG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZCx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldERvd25sb2FkSWQobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRFcnJvcnMobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRXYXJuaW5ncyhvKTticmVhaztjYXNlIDU6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEluZm9zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDtudWxsIT0obz1lLmdldEVudGl0eSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldERvd25sb2FkSWQoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRFcnJvcnNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0V2FybmluZ3NMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0SW5mb3NMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDUsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5nZXRFbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5LDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5zZXRFbnRpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckVudGl0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVudGl0eSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5oYXNFbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmdldERvd25sb2FkSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5zZXREb3dubG9hZElkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJEb3dubG9hZElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RG93bmxvYWRJZCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5oYXNEb3dubG9hZElkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5nZXRFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuc2V0RXJyb3JzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuYWRkRXJyb3JzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJFcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RXJyb3JzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmdldFdhcm5pbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLnNldFdhcm5pbmdzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuYWRkV2FybmluZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhcldhcm5pbmdzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFdhcm5pbmdzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLmdldEluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsNSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UucHJvdG90eXBlLnNldEluZm9zTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS5wcm90b3R5cGUuYWRkSW5mb3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw1LGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluZm9zTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5yZXBlYXRlZEZpZWxkc189WzIsMyw0XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSx2ZXJzaW9uOihvPXQuZ2V0VmVyc2lvbigpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLnRvT2JqZWN0KGUsbyksZXJyb3JzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0RXJyb3JzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSx3YXJuaW5nc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFdhcm5pbmdzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSxpbmZvc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEluZm9zTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pO2JyZWFrO2Nhc2UgNTpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24sdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmVyc2lvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0VmVyc2lvbihvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEVycm9ycyhvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFdhcm5pbmdzKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkSW5mb3Mobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwOyhvPWUuZ2V0SWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKSxudWxsIT0obz1lLmdldFZlcnNpb24oKSkmJnQud3JpdGVNZXNzYWdlKDUsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZlcnNpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0RXJyb3JzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFdhcm5pbmdzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldEluZm9zTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WZXJzaW9uLDUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLnNldFZlcnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcyw1LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyVmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFZlcnNpb24odm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5oYXNWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmdldEVycm9yc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLnNldEVycm9yc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuYWRkRXJyb3JzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckVycm9yc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFcnJvcnNMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5nZXRXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLnNldFdhcm5pbmdzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5hZGRXYXJuaW5ncz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJXYXJuaW5nc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRXYXJuaW5nc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmdldEluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5wcm90b3R5cGUuc2V0SW5mb3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UucHJvdG90eXBlLmFkZEluZm9zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckluZm9zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluZm9zTGlzdChbXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3F1ZXJ5OnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFF1ZXJ5KG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0UXVlcnkoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeS5wcm90b3R5cGUuZ2V0UXVlcnk9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LnByb3RvdHlwZS5zZXRRdWVyeT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtyZXN1bHRTZXRMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRSZXN1bHRTZXRMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXNwb25zZS50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQ7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFJlc3VsdFNldChvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmluZFF1ZXJ5UmVzdWx0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldFJlc3VsdFNldExpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5wcm90b3R5cGUuZ2V0UmVzdWx0U2V0TGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5wcm90b3R5cGUuc2V0UmVzdWx0U2V0TGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQucHJvdG90eXBlLmFkZFJlc3VsdFNldD1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5wcm90b3R5cGUuY2xlYXJSZXN1bHRTZXRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmVzdWx0U2V0TGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucmVwZWF0ZWRGaWVsZHNfPVsyXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtjZWxsc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldENlbGxzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdztyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMj09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWU7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZENlbGxzKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0Q2VsbHNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlZhbHVlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5wcm90b3R5cGUuZ2V0Q2VsbHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVmFsdWUsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSb3cucHJvdG90eXBlLnNldENlbGxzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5wcm90b3R5cGUuYWRkQ2VsbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywyLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5WYWx1ZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5wcm90b3R5cGUuY2xlYXJDZWxsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDZWxsc0xpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4udG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtuYW1lOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldE5hbWUobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXROYW1lKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlDb2x1bW4ucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17Y29sdW1uc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldENvbHVtbnNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkQ29sdW1ucyhvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldENvbHVtbnNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Q29sdW1uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5wcm90b3R5cGUuZ2V0Q29sdW1uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbiwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5wcm90b3R5cGUuc2V0Q29sdW1uc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlIZWFkZXIucHJvdG90eXBlLmFkZENvbHVtbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUNvbHVtbix0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5wcm90b3R5cGUuY2xlYXJDb2x1bW5zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENvbHVtbnNMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5yZXBlYXRlZEZpZWxkc189WzRdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8sbj17aGVhZGVyOihvPXQuZ2V0SGVhZGVyKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnRvT2JqZWN0KGUsbyksZGF0YVJvd3NMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXREYXRhUm93c0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQ7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMzp2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlcjt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SGVhZGVyKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGREYXRhUm93cyhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ZS5nZXRIZWFkZXIoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5SGVhZGVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldERhdGFSb3dzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQucHJvdG90eXBlLmdldEhlYWRlcj1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeUhlYWRlciwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuc2V0SGVhZGVyPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuY2xlYXJIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRIZWFkZXIodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuaGFzSGVhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5nZXREYXRhUm93c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJvdyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdC5wcm90b3R5cGUuc2V0RGF0YVJvd3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5hZGREYXRhUm93cz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5Um93LHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnByb3RvdHlwZS5jbGVhckRhdGFSb3dzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERhdGFSb3dzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0Lm9uZW9mR3JvdXBzXz1bWzEsMl1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LldyYXBwZWRSZXF1ZXN0Q2FzZT17V1JBUFBFRF9SRVFVRVNUX05PVF9TRVQ6MCxJRDoxLFFVRVJZOjJ9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5nZXRXcmFwcGVkUmVxdWVzdENhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKSxxdWVyeToobz10LmdldFF1ZXJ5KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LnRvT2JqZWN0KGUsbykscmVnaXN0ZXJGaWxlRG93bmxvYWQ6ci5NZXNzYWdlLmdldEJvb2xlYW5GaWVsZFdpdGhEZWZhdWx0KHQsMywhMSl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldElkKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlF1ZXJ5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRRdWVyeShvKTticmVhaztjYXNlIDM6bz10LnJlYWRCb29sKCksZS5zZXRSZWdpc3RlckZpbGVEb3dubG9hZChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyksbnVsbCE9KG89ZS5nZXRRdWVyeSgpKSYmdC53cml0ZU1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUXVlcnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLChvPWUuZ2V0UmVnaXN0ZXJGaWxlRG93bmxvYWQoKSkmJnQud3JpdGVCb29sKDMsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5zZXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFySWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSx2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuaGFzSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5nZXRRdWVyeT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5RdWVyeSwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLnNldFF1ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLmNsZWFyUXVlcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRRdWVyeSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5wcm90b3R5cGUuaGFzUXVlcnk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LnByb3RvdHlwZS5nZXRSZWdpc3RlckZpbGVEb3dubG9hZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQodGhpcywzLCExKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QucHJvdG90eXBlLnNldFJlZ2lzdGVyRmlsZURvd25sb2FkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zQm9vbGVhbkZpZWxkKHRoaXMsMyxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLm9uZW9mR3JvdXBzXz1bWzEsMiwzLDRdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UuUmV0cmlldmVSZXNwb25zZUNhc2U9e1JFVFJJRVZFX1JFU1BPTlNFX05PVF9TRVQ6MCxFTlRJVFlfUkVTUE9OU0U6MSxGSU5EX1JFU1VMVDoyLFNFTEVDVF9SRVNVTFQ6MyxDT1VOVF9SRVNVTFQ6NH0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRSZXRyaWV2ZVJlc3BvbnNlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2VudGl0eVJlc3BvbnNlOihvPXQuZ2V0RW50aXR5UmVzcG9uc2UoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UudG9PYmplY3QoZSxvKSxmaW5kUmVzdWx0OihvPXQuZ2V0RmluZFJlc3VsdCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQudG9PYmplY3QoZSxvKSxzZWxlY3RSZXN1bHQ6KG89dC5nZXRTZWxlY3RSZXN1bHQoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQudG9PYmplY3QoZSxvKSxjb3VudFJlc3VsdDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDQsMCl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEVudGl0eVJlc3BvbnNlKG8pO2JyZWFrO2Nhc2UgMjpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdCx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEZpbmRSZXN1bHQobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuU2VsZWN0UXVlcnlSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFNlbGVjdFJlc3VsdChvKTticmVhaztjYXNlIDQ6bz10LnJlYWRJbnQ2NCgpLGUuc2V0Q291bnRSZXN1bHQobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0RW50aXR5UmVzcG9uc2UoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEZpbmRSZXN1bHQoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbmRRdWVyeVJlc3VsdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRTZWxlY3RSZXN1bHQoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlNlbGVjdFF1ZXJ5UmVzdWx0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1yLk1lc3NhZ2UuZ2V0RmllbGQoZSw0KSkmJnQud3JpdGVJbnQ2NCg0LG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmdldEVudGl0eVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlc3BvbnNlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLnNldEVudGl0eVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJFbnRpdHlSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVudGl0eVJlc3BvbnNlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuaGFzRW50aXR5UmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuZ2V0RmluZFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaW5kUXVlcnlSZXN1bHQsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuc2V0RmluZFJlc3VsdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyRmluZFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZpbmRSZXN1bHQodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNGaW5kUmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmdldFNlbGVjdFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TZWxlY3RRdWVyeVJlc3VsdCwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRTZWxlY3RSZXN1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclNlbGVjdFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFNlbGVjdFJlc3VsdCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmhhc1NlbGVjdFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRDb3VudFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDQsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5wcm90b3R5cGUuc2V0Q291bnRSZXN1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsNCxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQ291bnRSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mRmllbGQodGhpcyw0LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sdm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNDb3VudFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0Lm9uZW9mR3JvdXBzXz1bWzFdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QuV3JhcHBlZFJlcXVlc3RDYXNlPXtXUkFQUEVEX1JFUVVFU1RfTk9UX1NFVDowLElEOjF9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5wcm90b3R5cGUuZ2V0V3JhcHBlZFJlcXVlc3RDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e2lkOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSxcIlwiKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPXQucmVhZFN0cmluZygpO2Uuc2V0SWQobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ci5NZXNzYWdlLmdldEZpZWxkKGUsMSkpJiZ0LndyaXRlU3RyaW5nKDEsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QucHJvdG90eXBlLnNldElkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXF1ZXN0LnByb3RvdHlwZS5jbGVhcklkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZkZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3Qub25lb2ZHcm91cHNfWzBdLHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5wcm90b3R5cGUuaGFzSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfPVtbMV1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UuV3JhcHBlZFJlc3BvbnNlQ2FzZT17V1JBUFBFRF9SRVNQT05TRV9OT1RfU0VUOjAsSURfUkVTUE9OU0U6MX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5wcm90b3R5cGUuZ2V0V3JhcHBlZFJlc3BvbnNlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtpZFJlc3BvbnNlOihvPXQuZ2V0SWRSZXNwb25zZSgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYoci4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxyfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRJZFJlc3BvbnNlKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0SWRSZXNwb25zZSgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UucHJvdG90eXBlLmdldElkUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZSwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5wcm90b3R5cGUuc2V0SWRSZXNwb25zZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5wcm90b3R5cGUuY2xlYXJJZFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SWRSZXNwb25zZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnByb3RvdHlwZS5oYXNJZFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2VudGl0eVJlcXVlc3Q6KG89dC5nZXRFbnRpdHlSZXF1ZXN0KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3QudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Q7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RW50aXR5UmVxdWVzdChvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldEVudGl0eVJlcXVlc3QoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QucHJvdG90eXBlLmdldEVudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdCwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRFbnRpdHlSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckVudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRFbnRpdHlSZXF1ZXN0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVxdWVzdC5wcm90b3R5cGUuaGFzRW50aXR5UmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5vbmVvZkdyb3Vwc189W1sxXV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5XcmFwcGVkUmVzcG9uc2VDYXNlPXtXUkFQUEVEX1JFU1BPTlNFX05PVF9TRVQ6MCxJRF9SRVNQT05TRToxfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnByb3RvdHlwZS5nZXRXcmFwcGVkUmVzcG9uc2VDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2lkUmVzcG9uc2U6KG89dC5nZXRJZFJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldElkUmVzcG9uc2Uobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87bnVsbCE9KG89ZS5nZXRJZFJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5wcm90b3R5cGUuZ2V0SWRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JZFJlc3BvbnNlLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnByb3RvdHlwZS5zZXRJZFJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnByb3RvdHlwZS5jbGVhcklkUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRJZFJlc3BvbnNlKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UucHJvdG90eXBlLmhhc0lkUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17ZW50aXR5UmVxdWVzdDoobz10LmdldEVudGl0eVJlcXVlc3QoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRFbnRpdHlSZXF1ZXN0KG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0RW50aXR5UmVxdWVzdCgpKSYmdC53cml0ZU1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC5wcm90b3R5cGUuZ2V0RW50aXR5UmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlSZXF1ZXN0LDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QucHJvdG90eXBlLnNldEVudGl0eVJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QucHJvdG90eXBlLmNsZWFyRW50aXR5UmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEVudGl0eVJlcXVlc3Qodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LnByb3RvdHlwZS5oYXNFbnRpdHlSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLm9uZW9mR3JvdXBzXz1bWzFdXSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLldyYXBwZWRSZXNwb25zZUNhc2U9e1dSQVBQRURfUkVTUE9OU0VfTk9UX1NFVDowLElEX1JFU1BPTlNFOjF9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UucHJvdG90eXBlLmdldFdyYXBwZWRSZXNwb25zZUNhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17aWRSZXNwb25zZToobz10LmdldElkUmVzcG9uc2UoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2U7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SWRSZXNwb25zZShvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldElkUmVzcG9uc2UoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlc3BvbnNlLnByb3RvdHlwZS5nZXRJZFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLklkUmVzcG9uc2UsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UucHJvdG90eXBlLnNldElkUmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UucHJvdG90eXBlLmNsZWFySWRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldElkUmVzcG9uc2Uodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5wcm90b3R5cGUuaGFzSWRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3Qub25lb2ZHcm91cHNfPVtbMSwyLDMsNF1dLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LldyYXBwZWRSZXF1ZXN0c0Nhc2U9e1dSQVBQRURfUkVRVUVTVFNfTk9UX1NFVDowLFJFVFJJRVZFX1JFUVVFU1Q6MSxVUERBVEVfUkVRVUVTVDoyLElOU0VSVF9SRVFVRVNUOjMsREVMRVRFX1JFUVVFU1Q6NH0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmdldFdyYXBwZWRSZXF1ZXN0c0Nhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmNvbXB1dGVPbmVvZkNhc2UodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e3JldHJpZXZlUmVxdWVzdDoobz10LmdldFJldHJpZXZlUmVxdWVzdCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QudG9PYmplY3QoZSxvKSx1cGRhdGVSZXF1ZXN0OihvPXQuZ2V0VXBkYXRlUmVxdWVzdCgpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnRvT2JqZWN0KGUsbyksaW5zZXJ0UmVxdWVzdDoobz10LmdldEluc2VydFJlcXVlc3QoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdC50b09iamVjdChlLG8pLGRlbGV0ZVJlcXVlc3Q6KG89dC5nZXREZWxldGVSZXF1ZXN0KCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3Q7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFJldHJpZXZlUmVxdWVzdChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFVwZGF0ZVJlcXVlc3Qobyk7YnJlYWs7Y2FzZSAzOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVxdWVzdCx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRJbnNlcnRSZXF1ZXN0KG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RGVsZXRlUmVxdWVzdChvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ZS5nZXRSZXRyaWV2ZVJlcXVlc3QoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRVcGRhdGVSZXF1ZXN0KCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEluc2VydFJlcXVlc3QoKSkmJnQud3JpdGVNZXNzYWdlKDMsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpLG51bGwhPShvPWUuZ2V0RGVsZXRlUmVxdWVzdCgpKSYmdC53cml0ZU1lc3NhZ2UoNCxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRSZXRyaWV2ZVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXF1ZXN0LDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuc2V0UmV0cmlldmVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywxLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmNsZWFyUmV0cmlldmVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmV0cmlldmVSZXF1ZXN0KHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5oYXNSZXRyaWV2ZVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRVcGRhdGVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlcXVlc3QsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXRVcGRhdGVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywyLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmNsZWFyVXBkYXRlUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFVwZGF0ZVJlcXVlc3Qodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmhhc1VwZGF0ZVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXRJbnNlcnRSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkluc2VydFJlcXVlc3QsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXRJbnNlcnRSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmNsZWFySW5zZXJ0UmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEluc2VydFJlcXVlc3Qodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmhhc0luc2VydFJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXREZWxldGVSZXF1ZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlcXVlc3QsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXREZWxldGVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcyw0LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0Lm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmNsZWFyRGVsZXRlUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldERlbGV0ZVJlcXVlc3Qodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmhhc0RlbGV0ZVJlcXVlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5vbmVvZkdyb3Vwc189W1sxLDIsMyw0XV0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLlRyYW5zYWN0aW9uUmVzcG9uc2VDYXNlPXtUUkFOU0FDVElPTl9SRVNQT05TRV9OT1RfU0VUOjAsREVMRVRFX1JFU1BPTlNFOjEsVVBEQVRFX1JFU1BPTlNFOjIsUkVUUklFVkVfUkVTUE9OU0U6MyxJTlNFUlRfUkVTUE9OU0U6NH0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvblJlc3BvbnNlQ2FzZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuY29tcHV0ZU9uZW9mQ2FzZSh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLHI9e2RlbGV0ZVJlc3BvbnNlOihvPXQuZ2V0RGVsZXRlUmVzcG9uc2UoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UudG9PYmplY3QoZSxvKSx1cGRhdGVSZXNwb25zZToobz10LmdldFVwZGF0ZVJlc3BvbnNlKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLlVwZGF0ZVJlc3BvbnNlLnRvT2JqZWN0KGUsbykscmV0cmlldmVSZXNwb25zZToobz10LmdldFJldHJpZXZlUmVzcG9uc2UoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS50b09iamVjdChlLG8pLGluc2VydFJlc3BvbnNlOihvPXQuZ2V0SW5zZXJ0UmVzcG9uc2UoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5EZWxldGVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RGVsZXRlUmVzcG9uc2Uobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVXBkYXRlUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFVwZGF0ZVJlc3BvbnNlKG8pO2JyZWFrO2Nhc2UgMzpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJldHJpZXZlUmVzcG9uc2UsdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0UmV0cmlldmVSZXNwb25zZShvKTticmVhaztjYXNlIDQ6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0SW5zZXJ0UmVzcG9uc2Uobyk7YnJlYWs7ZGVmYXVsdDp0LnNraXBGaWVsZCgpfXJldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG89dm9pZCAwO251bGwhPShvPWUuZ2V0RGVsZXRlUmVzcG9uc2UoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkRlbGV0ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldFVwZGF0ZVJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSgyLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksbnVsbCE9KG89ZS5nZXRSZXRyaWV2ZVJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZXRyaWV2ZVJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSxudWxsIT0obz1lLmdldEluc2VydFJlc3BvbnNlKCkpJiZ0LndyaXRlTWVzc2FnZSg0LG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbnNlcnRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0RGVsZXRlUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRGVsZXRlUmVzcG9uc2UsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0RGVsZXRlUmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDEscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckRlbGV0ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0RGVsZXRlUmVzcG9uc2Uodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5oYXNEZWxldGVSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5nZXRVcGRhdGVSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5VcGRhdGVSZXNwb25zZSwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRVcGRhdGVSZXNwb25zZT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkKHRoaXMsMixwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2Uub25lb2ZHcm91cHNfWzBdLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyVXBkYXRlUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRVcGRhdGVSZXNwb25zZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmhhc1VwZGF0ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldFJldHJpZXZlUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmV0cmlldmVSZXNwb25zZSwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRSZXRyaWV2ZVJlc3BvbnNlPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0T25lb2ZXcmFwcGVyRmllbGQodGhpcywzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5vbmVvZkdyb3Vwc19bMF0sZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuY2xlYXJSZXRyaWV2ZVJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0UmV0cmlldmVSZXNwb25zZSh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmhhc1JldHJpZXZlUmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0SW5zZXJ0UmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuSW5zZXJ0UmVzcG9uc2UsNCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0SW5zZXJ0UmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRPbmVvZldyYXBwZXJGaWVsZCh0aGlzLDQscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLm9uZW9mR3JvdXBzX1swXSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckluc2VydFJlc3BvbnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SW5zZXJ0UmVzcG9uc2Uodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5oYXNJbnNlcnRSZXNwb25zZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5yZXBlYXRlZEZpZWxkc189WzFdLHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e3JlcXVlc3RzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UmVxdWVzdHNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlcXVlc3QudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0O3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUmVxdWVzdHMobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRSZXF1ZXN0c0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdC5wcm90b3R5cGUuZ2V0UmVxdWVzdHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5zZXRSZXF1ZXN0c0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlcXVlc3QucHJvdG90eXBlLmFkZFJlcXVlc3RzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXF1ZXN0LHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXF1ZXN0LnByb3RvdHlwZS5jbGVhclJlcXVlc3RzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlcXVlc3RzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnJlcGVhdGVkRmllbGRzXz1bMSwyLDMsNF0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17cmVzcG9uc2VzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0UmVzcG9uc2VzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS50b09iamVjdCxlKSx0cmFuc2FjdGlvbkVycm9yc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFRyYW5zYWN0aW9uRXJyb3JzTGlzdCgpLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS50b09iamVjdCxlKSx0cmFuc2FjdGlvbldhcm5pbmdzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0VHJhbnNhY3Rpb25XYXJuaW5nc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UudG9PYmplY3QsZSksdHJhbnNhY3Rpb25JbmZvc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldFRyYW5zYWN0aW9uSW5mb3NMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnRvT2JqZWN0LGUpfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZTt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc2FjdGlvblJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRSZXNwb25zZXMobyk7YnJlYWs7Y2FzZSAyOm89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRUcmFuc2FjdGlvbkVycm9ycyhvKTticmVhaztjYXNlIDM6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLHQucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZFRyYW5zYWN0aW9uV2FybmluZ3Mobyk7YnJlYWs7Y2FzZSA0Om89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5hZGRUcmFuc2FjdGlvbkluZm9zKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFJlc3BvbnNlc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRUcmFuc2FjdGlvbkVycm9yc0xpc3QoKSkubGVuZ3RoPjAmJnQud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMixvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXRUcmFuc2FjdGlvbldhcm5pbmdzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwobz1lLmdldFRyYW5zYWN0aW9uSW5mb3NMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0UmVzcG9uc2VzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLlRyYW5zYWN0aW9uUmVzcG9uc2UsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5zZXRSZXNwb25zZXNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuYWRkUmVzcG9uc2VzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuVHJhbnNhY3Rpb25SZXNwb25zZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyUmVzcG9uc2VzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJlc3BvbnNlc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25FcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uRXJyb3JzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmFkZFRyYW5zYWN0aW9uRXJyb3JzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyVHJhbnNhY3Rpb25FcnJvcnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VHJhbnNhY3Rpb25FcnJvcnNMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uV2FybmluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSwzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uV2FybmluZ3NMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywzLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuYWRkVHJhbnNhY3Rpb25XYXJuaW5ncz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDMsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk1lc3NhZ2UsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclRyYW5zYWN0aW9uV2FybmluZ3NMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VHJhbnNhY3Rpb25XYXJuaW5nc0xpc3QoW10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25JbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVHJhbnNhY3Rpb25SZXNwb25zZS5wcm90b3R5cGUuc2V0VHJhbnNhY3Rpb25JbmZvc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDQsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlUcmFuc2FjdGlvblJlc3BvbnNlLnByb3RvdHlwZS5hZGRUcmFuc2FjdGlvbkluZm9zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsNCxlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTWVzc2FnZSx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVRyYW5zYWN0aW9uUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyVHJhbnNhY3Rpb25JbmZvc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRUcmFuc2FjdGlvbkluZm9zTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e2lkTGlzdDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0LDEpKT92b2lkIDA6b307cmV0dXJuIGUmJihuLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG59KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz10LnJlYWRTdHJpbmcoKTtlLmFkZElkKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvOyhvPWUuZ2V0SWRMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRTdHJpbmcoMSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUuZ2V0SWRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHRoaXMsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLnNldElkTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsMSxlfHxbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLmFkZElkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkRmllbGQodGhpcywxLGUsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLmNsZWFySWRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SWRMaXN0KFtdKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UucmVwZWF0ZWRGaWVsZHNfPVsxXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXthY2xzTGlzdDpyLk1lc3NhZ2UudG9PYmplY3RMaXN0KHQuZ2V0QWNsc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC50b09iamVjdCxlKX07cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkQWNscyhvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbzsobz1lLmdldEFjbHNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS5nZXRBY2xzTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTCwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UucHJvdG90eXBlLnNldEFjbHNMaXN0PWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpUmV0cmlldmVFbnRpdHlBQ0xSZXNwb25zZS5wcm90b3R5cGUuYWRkQWNscz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZFdyYXBwZXJGaWVsZCh0aGlzLDEsZSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTCx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVJldHJpZXZlRW50aXR5QUNMUmVzcG9uc2UucHJvdG90eXBlLmNsZWFyQWNsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRBY2xzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnJlcGVhdGVkRmllbGRzXz1bMV0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17YWNsc0xpc3Q6ci5NZXNzYWdlLnRvT2JqZWN0TGlzdCh0LmdldEFjbHNMaXN0KCkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wudG9PYmplY3QsZSl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KWlmKDE9PT10LmdldEZpZWxkTnVtYmVyKCkpe3ZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLmFkZEFjbHMobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87KG89ZS5nZXRBY2xzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdC5wcm90b3R5cGUuZ2V0QWNsc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS5zZXRBY2xzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlcXVlc3QucHJvdG90eXBlLmFkZEFjbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5NZXNzYWdlLmFkZFRvUmVwZWF0ZWRXcmFwcGVyRmllbGQodGhpcywxLGUscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckFjbHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0QWNsc0xpc3QoW10pfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXt9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVzcG9uc2U7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOyl0LmdldEZpZWxkTnVtYmVyKCksdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NdWx0aVVwZGF0ZUVudGl0eUFDTFJlc3BvbnNlLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuTXVsdGlVcGRhdGVFbnRpdHlBQ0xSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe307cHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucmVwZWF0ZWRGaWVsZHNfPVsyXSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtpZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsXCJcIikscnVsZXNMaXN0OnIuTWVzc2FnZS50b09iamVjdExpc3QodC5nZXRSdWxlc0xpc3QoKSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnRvT2JqZWN0LGUpLHBlcm1pc3Npb246ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwzLDApfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylzd2l0Y2godC5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIG89dC5yZWFkU3RyaW5nKCk7ZS5zZXRJZChvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZSx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuYWRkUnVsZXMobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkRW51bSgpLGUuc2V0UGVybWlzc2lvbihvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRJZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygxLG8pLChvPWUuZ2V0UnVsZXNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUmVwZWF0ZWRNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKSwwIT09KG89ZS5nZXRQZXJtaXNzaW9uKCkpJiZ0LndyaXRlRW51bSgzLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLFwiXCIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eUFDTC5wcm90b3R5cGUuc2V0SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5nZXRSdWxlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZSwyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucHJvdG90eXBlLnNldFJ1bGVzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFJlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucHJvdG90eXBlLmFkZFJ1bGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkKHRoaXMsMixlLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUsdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5jbGVhclJ1bGVzTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFJ1bGVzTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5QUNMLnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMywwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBQ0wucHJvdG90eXBlLnNldFBlcm1pc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQodGhpcywzLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnJlcGVhdGVkRmllbGRzXz1bNCw1XSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3JvbGU6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLHByaW9yaXR5OnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDIsITEpLGdyYW50OnIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0LDMsITEpLHBlcm1pc3Npb25zTGlzdDpudWxsPT0obz1yLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0LDQpKT92b2lkIDA6byxjYXBhYmlsaXRpZXNMaXN0Om51bGw9PShvPXIuTWVzc2FnZS5nZXRSZXBlYXRlZEZpZWxkKHQsNSkpP3ZvaWQgMDpvfTtyZXR1cm4gZSYmKG4uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksbn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGU7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFJvbGUobyk7YnJlYWs7Y2FzZSAyOm89dC5yZWFkQm9vbCgpLGUuc2V0UHJpb3JpdHkobyk7YnJlYWs7Y2FzZSAzOm89dC5yZWFkQm9vbCgpLGUuc2V0R3JhbnQobyk7YnJlYWs7Y2FzZSA0OmZvcih2YXIgcj10LmlzRGVsaW1pdGVkKCk/dC5yZWFkUGFja2VkRW51bSgpOlt0LnJlYWRFbnVtKCldLG49MDtuPHIubGVuZ3RoO24rKyllLmFkZFBlcm1pc3Npb25zKHJbbl0pO2JyZWFrO2Nhc2UgNTpmb3Iocj10LmlzRGVsaW1pdGVkKCk/dC5yZWFkUGFja2VkRW51bSgpOlt0LnJlYWRFbnVtKCldLG49MDtuPHIubGVuZ3RoO24rKyllLmFkZENhcGFiaWxpdGllcyhyW25dKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7KG89ZS5nZXRSb2xlKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRQcmlvcml0eSgpKSYmdC53cml0ZUJvb2woMixvKSwobz1lLmdldEdyYW50KCkpJiZ0LndyaXRlQm9vbCgzLG8pLChvPWUuZ2V0UGVybWlzc2lvbnNMaXN0KCkpLmxlbmd0aD4wJiZ0LndyaXRlUGFja2VkRW51bSg0LG8pLChvPWUuZ2V0Q2FwYWJpbGl0aWVzTGlzdCgpKS5sZW5ndGg+MCYmdC53cml0ZVBhY2tlZEVudW0oNSxvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuZ2V0Um9sZT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLnNldFJvbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLmdldFByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsITEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5zZXRQcmlvcml0eT1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLmdldEdyYW50PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRCb29sZWFuRmllbGRXaXRoRGVmYXVsdCh0aGlzLDMsITEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5zZXRHcmFudD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZCh0aGlzLDMsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLmdldFBlcm1pc3Npb25zTGlzdD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZCh0aGlzLDQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5zZXRQZXJtaXNzaW9uc0xpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRGaWVsZCh0aGlzLDQsZXx8W10pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5hZGRQZXJtaXNzaW9ucz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsNCxlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5jbGVhclBlcm1pc3Npb25zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFBlcm1pc3Npb25zTGlzdChbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLmdldENhcGFiaWxpdGllc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQodGhpcyw1KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZS5wcm90b3R5cGUuc2V0Q2FwYWJpbGl0aWVzTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldEZpZWxkKHRoaXMsNSxlfHxbXSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRW50aXR5UGVybWlzc2lvblJ1bGUucHJvdG90eXBlLmFkZENhcGFiaWxpdGllcz1mdW5jdGlvbihlLHQpe3JldHVybiByLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkKHRoaXMsNSxlLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVBlcm1pc3Npb25SdWxlLnByb3RvdHlwZS5jbGVhckNhcGFiaWxpdGllc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXRDYXBhYmlsaXRpZXNMaXN0KFtdKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXtmaWxlVHJhbnNtaXNzaW9uSWQ6KG89dC5nZXRGaWxlVHJhbnNtaXNzaW9uSWQoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnRvT2JqZWN0KGUsbyksZGF0YTp0LmdldERhdGFfYXNCNjQoKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bms7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZDt0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldEZpbGVUcmFuc21pc3Npb25JZChvKTticmVhaztjYXNlIDI6bz10LnJlYWRCeXRlcygpLGUuc2V0RGF0YShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7bnVsbCE9KG89ZS5nZXRGaWxlVHJhbnNtaXNzaW9uSWQoKSkmJnQud3JpdGVNZXNzYWdlKDEsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlciksKG89ZS5nZXREYXRhX2FzVTgoKSkubGVuZ3RoPjAmJnQud3JpdGVCeXRlcygyLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUuZ2V0RmlsZVRyYW5zbWlzc2lvbklkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZCwxKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsucHJvdG90eXBlLnNldEZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFdyYXBwZXJGaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS5jbGVhckZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZpbGVUcmFuc21pc3Npb25JZCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUuaGFzRmlsZVRyYW5zbWlzc2lvbklkPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDIsXCJcIil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnByb3RvdHlwZS5nZXREYXRhX2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5ieXRlc0FzQjY0KHRoaXMuZ2V0RGF0YSgpKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsucHJvdG90eXBlLmdldERhdGFfYXNVOD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuYnl0ZXNBc1U4KHRoaXMuZ2V0RGF0YSgpKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNCeXRlc0ZpZWxkKHRoaXMsMixlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17cmVnaXN0cmF0aW9uSWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLFwiXCIpLGZpbGVJZDpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsXCJcIil9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRTdHJpbmcoKTtlLnNldFJlZ2lzdHJhdGlvbklkKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZFN0cmluZygpLGUuc2V0RmlsZUlkKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcyxlKSxlLmdldFJlc3VsdEJ1ZmZlcigpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDsobz1lLmdldFJlZ2lzdHJhdGlvbklkKCkpLmxlbmd0aD4wJiZ0LndyaXRlU3RyaW5nKDEsbyksKG89ZS5nZXRGaWxlSWQoKSkubGVuZ3RoPjAmJnQud3JpdGVTdHJpbmcoMixvKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQucHJvdG90eXBlLmdldFJlZ2lzdHJhdGlvbklkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSxcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQucHJvdG90eXBlLnNldFJlZ2lzdHJhdGlvbklkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5wcm90b3R5cGUuZ2V0RmlsZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQucHJvdG90eXBlLnNldEZpbGVJZD1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM1N0cmluZ0ZpZWxkKHRoaXMsMixlKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbz17bWF4Q2h1bmtTaXplOnIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHQsMSwwKSxtYXhGaWxlU2l6ZTpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDIsMCl9O3JldHVybiBlJiYoby4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxvfSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXN3aXRjaCh0LmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgbz10LnJlYWRJbnQ2NCgpO2Uuc2V0TWF4Q2h1bmtTaXplKG8pO2JyZWFrO2Nhc2UgMjpvPXQucmVhZEludDY0KCksZS5zZXRNYXhGaWxlU2l6ZShvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3Muc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7MCE9PShvPWUuZ2V0TWF4Q2h1bmtTaXplKCkpJiZ0LndyaXRlSW50NjQoMSxvKSwwIT09KG89ZS5nZXRNYXhGaWxlU2l6ZSgpKSYmdC53cml0ZUludDY0KDIsbyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnByb3RvdHlwZS5nZXRNYXhDaHVua1NpemU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywxLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5wcm90b3R5cGUuc2V0TWF4Q2h1bmtTaXplPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0UHJvdG8zSW50RmllbGQodGhpcywxLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5wcm90b3R5cGUuZ2V0TWF4RmlsZVNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodGhpcywyLDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5wcm90b3R5cGUuc2V0TWF4RmlsZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZCh0aGlzLDIsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG89e307cmV0dXJuIGUmJihvLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLG99KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHIuQmluYXJ5UmVhZGVyKGUpLG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVxdWVzdDtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXQuZ2V0RmllbGROdW1iZXIoKSx0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7fSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvLG49e3N0YXR1czpyLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0LDEsMCkscmVnaXN0cmF0aW9uSWQ6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwyLFwiXCIpLHVwbG9hZFNldHRpbmdzOihvPXQuZ2V0VXBsb2FkU2V0dGluZ3MoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvblNldHRpbmdzLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEVudW0oKTtlLnNldFN0YXR1cyhvKTticmVhaztjYXNlIDI6bz10LnJlYWRTdHJpbmcoKSxlLnNldFJlZ2lzdHJhdGlvbklkKG8pO2JyZWFrO2Nhc2UgNDpvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncyx0LnJlYWRNZXNzYWdlKG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uU2V0dGluZ3MuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKSxlLnNldFVwbG9hZFNldHRpbmdzKG8pO2JyZWFrO2RlZmF1bHQ6dC5za2lwRmllbGQoKX1yZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsZSksZS5nZXRSZXN1bHRCdWZmZXIoKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMDswIT09KG89ZS5nZXRTdGF0dXMoKSkmJnQud3JpdGVFbnVtKDEsbyksKG89ZS5nZXRSZWdpc3RyYXRpb25JZCgpKS5sZW5ndGg+MCYmdC53cml0ZVN0cmluZygyLG8pLG51bGwhPShvPWUuZ2V0VXBsb2FkU2V0dGluZ3MoKSkmJnQud3JpdGVNZXNzYWdlKDQsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLmdldFJlZ2lzdHJhdGlvbklkPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMixcIlwiKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuc2V0UmVnaXN0cmF0aW9uSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRQcm90bzNTdHJpbmdGaWVsZCh0aGlzLDIsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0ZXJGaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLmdldFVwbG9hZFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25TZXR0aW5ncyw0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuc2V0VXBsb2FkU2V0dGluZ3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcyw0LGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLlJlZ2lzdGVyRmlsZVVwbG9hZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhclVwbG9hZFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0VXBsb2FkU2V0dGluZ3Modm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5SZWdpc3RlckZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuaGFzVXBsb2FkU2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsNCl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17Y2h1bms6KG89dC5nZXRDaHVuaygpKSYmcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsudG9PYmplY3QoZSxvKX07cmV0dXJuIGUmJihyLiRqc3BiTWVzc2FnZUluc3RhbmNlPXQpLHJ9KSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihvLHQpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bms7dC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRDaHVuayhvKX1lbHNlIHQuc2tpcEZpZWxkKCk7cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3QucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbztudWxsIT0obz1lLmdldENodW5rKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmsuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXF1ZXN0LnByb3RvdHlwZS5nZXRDaHVuaz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmssMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3QucHJvdG90eXBlLnNldENodW5rPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVxdWVzdC5wcm90b3R5cGUuY2xlYXJDaHVuaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldENodW5rKHZvaWQgMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlcXVlc3QucHJvdG90eXBlLmhhc0NodW5rPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXIuTWVzc2FnZS5nZXRGaWVsZCh0aGlzLDEpfSxyLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUJiYocHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS50b09iamVjdChlLHRoaXMpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBvPXtzdGF0dXM6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApfTtyZXR1cm4gZSYmKG8uJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCksb30pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByLkJpbmFyeVJlYWRlcihlKSxvPW5ldyBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcj1mdW5jdGlvbihlLHQpe2Zvcig7dC5uZXh0RmllbGQoKSYmIXQuaXNFbmRHcm91cCgpOylpZigxPT09dC5nZXRGaWVsZE51bWJlcigpKXt2YXIgbz10LnJlYWRFbnVtKCk7ZS5zZXRTdGF0dXMobyl9ZWxzZSB0LnNraXBGaWVsZCgpO3JldHVybiBlfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIuQmluYXJ5V3JpdGVyO3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVVwbG9hZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG87MCE9PShvPWUuZ2V0U3RhdHVzKCkpJiZ0LndyaXRlRW51bSgxLG8pfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVVcGxvYWRSZXNwb25zZS5wcm90b3R5cGUuZ2V0U3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0KHRoaXMsMSwwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVXBsb2FkUmVzcG9uc2UucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDEsZSl9LHIuTWVzc2FnZS5HRU5FUkFURV9UT19PQkpFQ1QmJihwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QudG9PYmplY3QoZSx0aGlzKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dmFyIG8scj17ZmlsZVRyYW5zbWlzc2lvbklkOihvPXQuZ2V0RmlsZVRyYW5zbWlzc2lvbklkKCkpJiZwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC50b09iamVjdChlLG8pfTtyZXR1cm4gZSYmKHIuJGpzcGJNZXNzYWdlSW5zdGFuY2U9dCkscn0pLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0O3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKG8sdCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspaWYoMT09PXQuZ2V0RmllbGROdW1iZXIoKSl7dmFyIG89bmV3IHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZVRyYW5zbWlzc2lvbklkO3QucmVhZE1lc3NhZ2Uobyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVUcmFuc21pc3Npb25JZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpLGUuc2V0RmlsZVRyYW5zbWlzc2lvbklkKG8pfWVsc2UgdC5za2lwRmllbGQoKTtyZXR1cm4gZX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5CaW5hcnlXcml0ZXI7cmV0dXJuIHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcj1mdW5jdGlvbihlLHQpe3ZhciBvO251bGwhPShvPWUuZ2V0RmlsZVRyYW5zbWlzc2lvbklkKCkpJiZ0LndyaXRlTWVzc2FnZSgxLG8scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QucHJvdG90eXBlLmdldEZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkKHRoaXMscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlVHJhbnNtaXNzaW9uSWQsMSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVxdWVzdC5wcm90b3R5cGUuc2V0RmlsZVRyYW5zbWlzc2lvbklkPWZ1bmN0aW9uKGUpe3JldHVybiByLk1lc3NhZ2Uuc2V0V3JhcHBlckZpZWxkKHRoaXMsMSxlKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXF1ZXN0LnByb3RvdHlwZS5jbGVhckZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldEZpbGVUcmFuc21pc3Npb25JZCh2b2lkIDApfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlcXVlc3QucHJvdG90eXBlLmhhc0ZpbGVUcmFuc21pc3Npb25JZD1mdW5jdGlvbigpe3JldHVybiBudWxsIT1yLk1lc3NhZ2UuZ2V0RmllbGQodGhpcywxKX0sci5NZXNzYWdlLkdFTkVSQVRFX1RPX09CSkVDVCYmKHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnRvT2JqZWN0KGUsdGhpcyl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbyxuPXtzdGF0dXM6ci5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQodCwxLDApLGNodW5rOihvPXQuZ2V0Q2h1bmsoKSkmJnByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLnRvT2JqZWN0KGUsbyl9O3JldHVybiBlJiYobi4kanNwYk1lc3NhZ2VJbnN0YW5jZT10KSxufSkscHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgci5CaW5hcnlSZWFkZXIoZSksbz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZTtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIobyx0KX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXI9ZnVuY3Rpb24oZSx0KXtmb3IoO3QubmV4dEZpZWxkKCkmJiF0LmlzRW5kR3JvdXAoKTspc3dpdGNoKHQuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBvPXQucmVhZEVudW0oKTtlLnNldFN0YXR1cyhvKTticmVhaztjYXNlIDI6bz1uZXcgcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlQ2h1bmssdC5yZWFkTWVzc2FnZShvLHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZUNodW5rLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlciksZS5zZXRDaHVuayhvKTticmVhaztkZWZhdWx0OnQuc2tpcEZpZWxkKCl9cmV0dXJuIGV9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBlPW5ldyByLkJpbmFyeVdyaXRlcjtyZXR1cm4gcHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLGUpLGUuZ2V0UmVzdWx0QnVmZmVyKCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz12b2lkIDA7MCE9PShvPWUuZ2V0U3RhdHVzKCkpJiZ0LndyaXRlRW51bSgxLG8pLG51bGwhPShvPWUuZ2V0Q2h1bmsoKSkmJnQud3JpdGVNZXNzYWdlKDIsbyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuay5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiByLk1lc3NhZ2UuZ2V0RmllbGRXaXRoRGVmYXVsdCh0aGlzLDEsMCl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gci5NZXNzYWdlLnNldFByb3RvM0VudW1GaWVsZCh0aGlzLDEsZSl9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuRmlsZURvd25sb2FkUmVzcG9uc2UucHJvdG90eXBlLmdldENodW5rPWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWVzc2FnZS5nZXRXcmFwcGVyRmllbGQodGhpcyxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVDaHVuaywyKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5wcm90b3R5cGUuc2V0Q2h1bms9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQodGhpcywyLGUpfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkZpbGVEb3dubG9hZFJlc3BvbnNlLnByb3RvdHlwZS5jbGVhckNodW5rPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Q2h1bmsodm9pZCAwKX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5GaWxlRG93bmxvYWRSZXNwb25zZS5wcm90b3R5cGUuaGFzQ2h1bms9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9ci5NZXNzYWdlLmdldEZpZWxkKHRoaXMsMil9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuQXRvbWljRGF0YVR5cGU9e0FUT01JQ19EQVRBX1RZUEVfVU5TUEVDSUZJRUQ6MCxBVE9NSUNfREFUQV9UWVBFX1RFWFQ6MSxBVE9NSUNfREFUQV9UWVBFX0RPVUJMRToyLEFUT01JQ19EQVRBX1RZUEVfREFURVRJTUU6MyxBVE9NSUNfREFUQV9UWVBFX0lOVEVHRVI6NCxBVE9NSUNfREFUQV9UWVBFX0JPT0xFQU46NX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5TcGVjaWFsVmFsdWU9e1NQRUNJQUxfVkFMVUVfVU5TUEVDSUZJRUQ6MCxTUEVDSUFMX1ZBTFVFX0VNUFRZX1NUUklORzoxfSxwcm90by5jYW9zZGIuZW50aXR5LnYxLkVudGl0eVJvbGU9e0VOVElUWV9ST0xFX1VOU1BFQ0lGSUVEOjAsRU5USVRZX1JPTEVfUkVDT1JEX1RZUEU6MSxFTlRJVFlfUk9MRV9SRUNPUkQ6MixFTlRJVFlfUk9MRV9QUk9QRVJUWTozLEVOVElUWV9ST0xFX0ZJTEU6NH0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5NZXNzYWdlQ29kZT17TUVTU0FHRV9DT0RFX1VOU1BFQ0lGSUVEOjAsTUVTU0FHRV9DT0RFX1VOS05PV046MSxNRVNTQUdFX0NPREVfRU5USVRZX0RPRVNfTk9UX0VYSVNUOjIsTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfTk9fUFJPUEVSVElFUzozLE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX0JFRU5fREVMRVRFRF9TVUNDRVNTRlVMTFk6NCxNRVNTQUdFX0NPREVfRU5USVRZX0hBU19VTlFVQUxJRklFRF9QUk9QRVJUSUVTOjUsTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfVU5RVUFMSUZJRURfUEFSRU5UUzo2LE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX05PX0lEOjcsTUVTU0FHRV9DT0RFX1JFUVVJUkVEX0JZX1BFUlNJU1RFTlRfRU5USVRZOjgsTUVTU0FHRV9DT0RFX1BST1BFUlRZX0hBU19OT19EQVRBX1RZUEU6OSxNRVNTQUdFX0NPREVfRU5USVRZX0hBU19OT19ERVNDUklQVElPTjoxMCxNRVNTQUdFX0NPREVfRU5USVRZX0hBU19OT19OQU1FOjExLE1FU1NBR0VfQ09ERV9PQkxJR0FUT1JZX1BST1BFUlRZX01JU1NJTkc6MTIsTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfTk9fUEFSRU5UUzoxMyxNRVNTQUdFX0NPREVfRklMRV9IQVNfTk9fVEFSR0VUX1BBVEg6MTQsTUVTU0FHRV9DT0RFX1RBUkdFVF9QQVRIX05PVF9BTExPV0VEOjE1LE1FU1NBR0VfQ09ERV9UQVJHRVRfUEFUSF9FWElTVFM6MTYsTUVTU0FHRV9DT0RFX1BST1BFUlRZX0hBU19OT19VTklUOjE3LE1FU1NBR0VfQ09ERV9DQU5OT1RfUEFSU0VfVkFMVUU6MTgsTUVTU0FHRV9DT0RFX0NIRUNLU1VNX1RFU1RfRkFJTEVEOjE5LE1FU1NBR0VfQ09ERV9TSVpFX1RFU1RfRkFJTEVEOjIwLE1FU1NBR0VfQ09ERV9DQU5OT1RfQ1JFQVRFX1BBUkVOVF9GT0xERVI6MjEsTUVTU0FHRV9DT0RFX0ZJTEVfSEFTX05PVF9CRUVOX1VQTE9BRUQ6MjIsTUVTU0FHRV9DT0RFX0NBTk5PVF9NT1ZFX0ZJTEVfVE9fVEFSR0VUX1BBVEg6MjMsTUVTU0FHRV9DT0RFX0NBTk5PVF9QQVJTRV9EQVRFVElNRV9WQUxVRToyNCxNRVNTQUdFX0NPREVfQ0FOTk9UX1BBUlNFX0RPVUJMRV9WQUxVRToyNSxNRVNTQUdFX0NPREVfQ0FOTk9UX1BBUlNFX0lOVF9WQUxVRToyNixNRVNTQUdFX0NPREVfQ0FOTk9UX1BBUlNFX0JPT0xfVkFMVUU6MjcsTUVTU0FHRV9DT0RFX0ZJTEVfTk9UX0ZPVU5EOjI4LE1FU1NBR0VfQ09ERV9XQVJOSU5HX09DQ1VSRUQ6MjksTUVTU0FHRV9DT0RFX0VOVElUWV9OQU1FX0lTX05PVF9VTklRVUU6MzAsTUVTU0FHRV9DT0RFX1FVRVJZX0VYQ0VQVElPTjozMSxNRVNTQUdFX0NPREVfVFJBTlNBQ1RJT05fUk9MTF9CQUNLOjMyLE1FU1NBR0VfQ09ERV9VTktOT1dOX1VOSVQ6MzQsTUVTU0FHRV9DT0RFX0FVVEhPUklaQVRJT05fRVJST1I6MzUsTUVTU0FHRV9DT0RFX1JFRkVSRU5DRV9JU19OT1RfQUxMT1dFRF9CWV9EQVRBX1RZUEU6MzYsTUVTU0FHRV9DT0RFX0VOVElUWV9OQU1FX0RVUExJQ0FURVM6MzcsTUVTU0FHRV9DT0RFX0RBVEFfVFlQRV9OQU1FX0RVUExJQ0FURVM6MzgsTUVTU0FHRV9DT0RFX0VOVElUWV9IQVNfTk9fTkFNRV9PUl9JRDozOSxNRVNTQUdFX0NPREVfQUZGSUxJQVRJT05fRVJST1I6NDAsTUVTU0FHRV9DT0RFX1FVRVJZX1BBUlNJTkdfRVJST1I6NDEsTUVTU0FHRV9DT0RFX05BTUVfUFJPUEVSVElFU19NVVNUX0JFX1RFWFQ6NDIsTUVTU0FHRV9DT0RFX1BBUkVOVF9EVVBMSUNBVEVTX1dBUk5JTkc6NDMsTUVTU0FHRV9DT0RFX1BBUkVOVF9EVVBMSUNBVEVTX0VSUk9SOjQ0LE1FU1NBR0VfQ09ERV9BVE9NSUNJVFlfRVJST1I6NDUsTUVTU0FHRV9DT0RFX05PX1NVQ0hfRU5USVRZX1JPTEU6NDYsTUVTU0FHRV9DT0RFX1JFUVVJUkVEX0JZX1VOUVVBTElGSUVEOjQ3LE1FU1NBR0VfQ09ERV9FTlRJVFlfSEFTX1VOUVVBTElGSUVEX1JFRkVSRU5DRTo0OCxNRVNTQUdFX0NPREVfUkVGRVJFTkNFRF9FTlRJVFlfRE9FU19OT1RfRVhJU1Q6NDksTUVTU0FHRV9DT0RFX1JFRkVSRU5DRV9OQU1FX0RVUExJQ0FURVM6NTAsTUVTU0FHRV9DT0RFX0RBVEFfVFlQRV9JTkhFUklUQU5DRV9BTUJJR1VPVVM6NTEsTUVTU0FHRV9DT0RFX0RBVEFfVFlQRV9ET0VTX05PVF9BQ0NFUFRfQ09MTEVDVElPTl9WQUxVRVM6NTIsTUVTU0FHRV9DT0RFX0NBTk5PVF9QQVJTRV9VTklUOjUzLE1FU1NBR0VfQ09ERV9BRERJVElPTkFMX1BST1BFUlRZOjU0LE1FU1NBR0VfQ09ERV9QUk9QRVJUWV9XSVRIX0RBVEFfVFlQRV9PVkVSUklERTo1NSxNRVNTQUdFX0NPREVfUFJPUEVSVFlfV0lUSF9ERVNDUklQVElPTl9PVkVSUklERTo1NixNRVNTQUdFX0NPREVfUFJPUEVSVFlfV0lUSF9OQU1FX09WRVJSSURFOjU3LE1FU1NBR0VfQ09ERV9JTlRFR0VSX1ZBTFVFX09VVF9PRl9SQU5HRTo1OCxNRVNTQUdFX0NPREVfSU5URUdSSVRZX1ZJT0xBVElPTjo1OX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5JbXBvcnRhbmNlPXtJTVBPUlRBTkNFX1VOU1BFQ0lGSUVEOjAsSU1QT1JUQU5DRV9PQkxJR0FUT1JZOjEsSU1QT1JUQU5DRV9SRUNPTU1FTkRFRDoyLElNUE9SVEFOQ0VfU1VHR0VTVEVEOjMsSU1QT1JUQU5DRV9GSVg6NH0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlBY2xQZXJtaXNzaW9uPXtFTlRJVFlfQUNMX1BFUk1JU1NJT05fVU5TUEVDSUZJRUQ6MCxFTlRJVFlfQUNMX1BFUk1JU1NJT05fRURJVF9BQ0w6MSxFTlRJVFlfQUNMX1BFUk1JU1NJT05fRURJVF9QUklPUklUWV9BQ0w6Mn0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZUNhcGFiaWxpdHk9e0VOVElUWV9QRVJNSVNTSU9OX1JVTEVfQ0FQQUJJTElUWV9VTlNQRUNJRklFRDowLEVOVElUWV9QRVJNSVNTSU9OX1JVTEVfQ0FQQUJJTElUWV9ERUxFVEU6MX0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5FbnRpdHlQZXJtaXNzaW9uPXtFTlRJVFlfUEVSTUlTU0lPTl9VTlNQRUNJRklFRDowLEVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX0VOVElUWToxLEVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX0FDTDoyLEVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX0hJU1RPUlk6MyxFTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9PV05FUjo0LEVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX0ZJTEU6NSxFTlRJVFlfUEVSTUlTU0lPTl9ERUxFVEU6NixFTlRJVFlfUEVSTUlTU0lPTl9FRElUX0FDTDo3LEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9ERVNDUklQVElPTjo4LEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9WQUxVRTo5LEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9ST0xFOjEwLEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9SRU1PVkVfUEFSRU5UOjExLEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9BRERfUEFSRU5UOjEyLEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9SRU1PVkVfUFJPUEVSVFk6MTMsRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0FERF9QUk9QRVJUWToxNCxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfTkFNRToxNSxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfREFUQV9UWVBFOjE2LEVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9SRU1PVkVfRklMRToxNyxFTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfQUREX0ZJTEU6MTgsRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX01PVkVfRklMRToxOSxFTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfUkVGRVJFTkNFOjIwLEVOVElUWV9QRVJNSVNTSU9OX1VTRV9BU19QUk9QRVJUWToyMSxFTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfUEFSRU5UOjIyLEVOVElUWV9QRVJNSVNTSU9OX1VTRV9BU19EQVRBX1RZUEU6MjMsRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX1FVRVJZX1RFTVBMQVRFX0RFRklOSVRJT046MjR9LHByb3RvLmNhb3NkYi5lbnRpdHkudjEuUmVnaXN0cmF0aW9uU3RhdHVzPXtSRUdJU1RSQVRJT05fU1RBVFVTX1VOU1BFQ0lGSUVEOjAsUkVHSVNUUkFUSU9OX1NUQVRVU19BQ0NFUFRFRDoxLFJFR0lTVFJBVElPTl9TVEFUVVNfUkVKRUNURUQ6Mn0scHJvdG8uY2Fvc2RiLmVudGl0eS52MS5UcmFuc21pc3Npb25TdGF0dXM9e1RSQU5TTUlTU0lPTl9TVEFUVVNfVU5TUEVDSUZJRUQ6MCxUUkFOU01JU1NJT05fU1RBVFVTX1NVQ0NFU1M6MSxUUkFOU01JU1NJT05fU1RBVFVTX0VSUk9SOjIsVFJBTlNNSVNTSU9OX1NUQVRVU19HT19PTjozfSxuLm9iamVjdC5leHRlbmQodCxwcm90by5jYW9zZGIuZW50aXR5LnYxKX0sMTk6ZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9LCRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGUsdCxvKXtlIGluc3RhbmNlb2YgU3RyaW5nJiYoZT1TdHJpbmcoZSkpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPTA7bjxyO24rKyl7dmFyIHM9ZVtuXTtpZih0LmNhbGwobyxzLG4sZSkpcmV0dXJue2k6bix2OnN9fXJldHVybntpOi0xLHY6dm9pZCAwfX0sJGpzY29tcC5BU1NVTUVfRVM1PSExLCRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITEsJGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMSwkanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITEsJGpzY29tcC5kZWZpbmVQcm9wZXJ0eT0kanNjb21wLkFTU1VNRV9FUzV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbyl7ZSE9QXJyYXkucHJvdG90eXBlJiZlIT1PYmplY3QucHJvdG90eXBlJiYoZVt0XT1vLnZhbHVlKX0sJGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09ZT9lOnZvaWQgMCE9PV9fd2VicGFja19yZXF1aXJlX18uZyYmbnVsbCE9X193ZWJwYWNrX3JlcXVpcmVfXy5nP19fd2VicGFja19yZXF1aXJlX18uZzplfSwkanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKSwkanNjb21wLnBvbHlmaWxsPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKHQpe2ZvcihvPSRqc2NvbXAuZ2xvYmFsLGU9ZS5zcGxpdChcIi5cIikscj0wO3I8ZS5sZW5ndGgtMTtyKyspe3ZhciBuPWVbcl07biBpbiBvfHwob1tuXT17fSksbz1vW25dfSh0PXQocj1vW2U9ZVtlLmxlbmd0aC0xXV0pKSE9ciYmbnVsbCE9dCYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShvLGUse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSwkanNjb21wLnBvbHlmaWxsKFwiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxlLHQpLml9fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbihlLHQsbyl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlICd0aGlzJyB2YWx1ZSBmb3IgU3RyaW5nLnByb3RvdHlwZS5cIitvK1wiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkXCIpO2lmKHQgaW5zdGFuY2VvZiBSZWdFeHApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuXCIrbytcIiBtdXN0IG5vdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTtyZXR1cm4gZStcIlwifSwkanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbz0kanNjb21wLmNoZWNrU3RyaW5nQXJncyh0aGlzLGUsXCJlbmRzV2l0aFwiKTtlKz1cIlwiLHZvaWQgMD09PXQmJih0PW8ubGVuZ3RoKSx0PU1hdGgubWF4KDAsTWF0aC5taW4oMHx0LG8ubGVuZ3RoKSk7Zm9yKHZhciByPWUubGVuZ3RoOzA8ciYmMDx0OylpZihvWy0tdF0hPWVbLS1yXSlyZXR1cm4hMTtyZXR1cm4gMD49cn19KSxcImVzNlwiLFwiZXMzXCIpLCRqc2NvbXAucG9seWZpbGwoXCJBcnJheS5wcm90b3R5cGUuZmluZFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxlLHQpLnZ9fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlLHQpe3ZhciBvPSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsZSxcInN0YXJ0c1dpdGhcIik7ZSs9XCJcIjt2YXIgcj1vLmxlbmd0aCxuPWUubGVuZ3RoO3Q9TWF0aC5tYXgoMCxNYXRoLm1pbigwfHQsby5sZW5ndGgpKTtmb3IodmFyIHM9MDtzPG4mJnQ8cjspaWYob1t0KytdIT1lW3MrK10pcmV0dXJuITE7cmV0dXJuIHM+PW59fSksXCJlczZcIixcImVzM1wiKSwkanNjb21wLnBvbHlmaWxsKFwiU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fGZ1bmN0aW9uKGUpe3ZhciB0PSRqc2NvbXAuY2hlY2tTdHJpbmdBcmdzKHRoaXMsbnVsbCxcInJlcGVhdFwiKTtpZigwPmV8fDEzNDIxNzcyNzk8ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgY291bnQgdmFsdWVcIik7ZXw9MDtmb3IodmFyIG89XCJcIjtlOykxJmUmJihvKz10KSwoZT4+Pj0xKSYmKHQrPXQpO3JldHVybiBvfX0pLFwiZXM2XCIsXCJlczNcIik7dmFyIENPTVBJTEVEPSEwLGdvb2c9Z29vZ3x8e307Z29vZy5nbG9iYWw9dGhpc3x8c2VsZixnb29nLmlzRGVmPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSxnb29nLmlzU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfSxnb29nLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGV9LGdvb2cuaXNOdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LGdvb2cuZXhwb3J0UGF0aF89ZnVuY3Rpb24oZSx0LG8pe2U9ZS5zcGxpdChcIi5cIiksbz1vfHxnb29nLmdsb2JhbCxlWzBdaW4gb3x8dm9pZCAwPT09by5leGVjU2NyaXB0fHxvLmV4ZWNTY3JpcHQoXCJ2YXIgXCIrZVswXSk7Zm9yKHZhciByO2UubGVuZ3RoJiYocj1lLnNoaWZ0KCkpOykhZS5sZW5ndGgmJmdvb2cuaXNEZWYodCk/b1tyXT10Om89b1tyXSYmb1tyXSE9PU9iamVjdC5wcm90b3R5cGVbcl0/b1tyXTpvW3JdPXt9fSxnb29nLmRlZmluZT1mdW5jdGlvbihlLHQpe2lmKCFDT01QSUxFRCl7dmFyIG89Z29vZy5nbG9iYWwuQ0xPU1VSRV9VTkNPTVBJTEVEX0RFRklORVMscj1nb29nLmdsb2JhbC5DTE9TVVJFX0RFRklORVM7byYmdm9pZCAwPT09by5ub2RlVHlwZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sZSk/dD1vW2VdOnImJnZvaWQgMD09PXIubm9kZVR5cGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGUpJiYodD1yW2VdKX1yZXR1cm4gdH0sZ29vZy5GRUFUVVJFU0VUX1lFQVI9MjAxMixnb29nLkRFQlVHPSEwLGdvb2cuTE9DQUxFPVwiZW5cIixnb29nLlRSVVNURURfU0lURT0hMCxnb29nLlNUUklDVF9NT0RFX0NPTVBBVElCTEU9ITEsZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERT1DT01QSUxFRCYmIWdvb2cuREVCVUcsZ29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HPSExLGdvb2cucHJvdmlkZT1mdW5jdGlvbihlKXtpZihnb29nLmlzSW5Nb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJnb29nLnByb3ZpZGUgY2Fubm90IGJlIHVzZWQgd2l0aGluIGEgbW9kdWxlLlwiKTtpZighQ09NUElMRUQmJmdvb2cuaXNQcm92aWRlZF8oZSkpdGhyb3cgRXJyb3IoJ05hbWVzcGFjZSBcIicrZSsnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtnb29nLmNvbnN0cnVjdE5hbWVzcGFjZV8oZSl9LGdvb2cuY29uc3RydWN0TmFtZXNwYWNlXz1mdW5jdGlvbihlLHQpe2lmKCFDT01QSUxFRCl7ZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXTtmb3IodmFyIG89ZTsobz1vLnN1YnN0cmluZygwLG8ubGFzdEluZGV4T2YoXCIuXCIpKSkmJiFnb29nLmdldE9iamVjdEJ5TmFtZShvKTspZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW29dPSEwfWdvb2cuZXhwb3J0UGF0aF8oZSx0KX0sZ29vZy5nZXRTY3JpcHROb25jZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZSE9Z29vZy5nbG9iYWw/Z29vZy5nZXRTY3JpcHROb25jZV8oZS5kb2N1bWVudCk6KG51bGw9PT1nb29nLmNzcE5vbmNlXyYmKGdvb2cuY3NwTm9uY2VfPWdvb2cuZ2V0U2NyaXB0Tm9uY2VfKGdvb2cuZ2xvYmFsLmRvY3VtZW50KSksZ29vZy5jc3BOb25jZV8pfSxnb29nLk5PTkNFX1BBVFRFUk5fPS9eW1xcdysvXy1dK1s9XXswLDJ9JC8sZ29vZy5jc3BOb25jZV89bnVsbCxnb29nLmdldFNjcmlwdE5vbmNlXz1mdW5jdGlvbihlKXtyZXR1cm4oZT1lLnF1ZXJ5U2VsZWN0b3ImJmUucXVlcnlTZWxlY3RvcihcInNjcmlwdFtub25jZV1cIikpJiYoZT1lLm5vbmNlfHxlLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpKSYmZ29vZy5OT05DRV9QQVRURVJOXy50ZXN0KGUpP2U6XCJcIn0sZ29vZy5WQUxJRF9NT0RVTEVfUkVfPS9eW2EtekEtWl8kXVthLXpBLVowLTkuXyRdKiQvLGdvb2cubW9kdWxlPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzU3RyaW5nKGUpfHwhZXx8LTE9PWUuc2VhcmNoKGdvb2cuVkFMSURfTU9EVUxFX1JFXykpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIG1vZHVsZSBpZGVudGlmaWVyXCIpO2lmKCFnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiTW9kdWxlIFwiK2UrXCIgaGFzIGJlZW4gbG9hZGVkIGluY29ycmVjdGx5LiBOb3RlLCBtb2R1bGVzIGNhbm5vdCBiZSBsb2FkZWQgYXMgbm9ybWFsIHNjcmlwdHMuIFRoZXkgcmVxdWlyZSBzb21lIGtpbmQgb2YgcHJlLXByb2Nlc3Npbmcgc3RlcC4gWW91J3JlIGxpa2VseSB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZSB2aWEgYSBzY3JpcHQgdGFnIG9yIGFzIGEgcGFydCBvZiBhIGNvbmNhdGVuYXRlZCBidW5kbGUgd2l0aG91dCByZXdyaXRpbmcgdGhlIG1vZHVsZS4gRm9yIG1vcmUgaW5mbyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L3dpa2kvZ29vZy5tb2R1bGU6LWFuLUVTNi1tb2R1bGUtbGlrZS1hbHRlcm5hdGl2ZS10by1nb29nLnByb3ZpZGUuXCIpO2lmKGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLm1vZHVsZSBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgbW9kdWxlLlwiKTtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lPWUsIUNPTVBJTEVEKXtpZihnb29nLmlzUHJvdmlkZWRfKGUpKXRocm93IEVycm9yKCdOYW1lc3BhY2UgXCInK2UrJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7ZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tlXX19LGdvb2cubW9kdWxlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5tb2R1bGUuZ2V0SW50ZXJuYWxfKGUpfSxnb29nLm1vZHVsZS5nZXRJbnRlcm5hbF89ZnVuY3Rpb24oZSl7aWYoIUNPTVBJTEVEKXtpZihlIGluIGdvb2cubG9hZGVkTW9kdWxlc18pcmV0dXJuIGdvb2cubG9hZGVkTW9kdWxlc19bZV0uZXhwb3J0cztpZighZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2VdKXJldHVybiBudWxsIT0oZT1nb29nLmdldE9iamVjdEJ5TmFtZShlKSk/ZTpudWxsfXJldHVybiBudWxsfSxnb29nLk1vZHVsZVR5cGU9e0VTNjpcImVzNlwiLEdPT0c6XCJnb29nXCJ9LGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfPW51bGwsZ29vZy5pc0luTW9kdWxlTG9hZGVyXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpfHxnb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfKCl9LGdvb2cuaXNJbkdvb2dNb2R1bGVMb2FkZXJfPWZ1bmN0aW9uKCl7cmV0dXJuISFnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8udHlwZT09Z29vZy5Nb2R1bGVUeXBlLkdPT0d9LGdvb2cuaXNJbkVzNk1vZHVsZUxvYWRlcl89ZnVuY3Rpb24oKXtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8udHlwZT09Z29vZy5Nb2R1bGVUeXBlLkVTNilyZXR1cm4hMDt2YXIgZT1nb29nLmdsb2JhbC4kanNjb21wO3JldHVybiEhZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5nZXRDdXJyZW50TW9kdWxlUGF0aCYmISFlLmdldEN1cnJlbnRNb2R1bGVQYXRoKCl9LGdvb2cubW9kdWxlLmRlY2xhcmVMZWdhY3lOYW1lc3BhY2U9ZnVuY3Rpb24oKXtpZighQ09NUElMRUQmJiFnb29nLmlzSW5Hb29nTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5tb2R1bGUuZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZSBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGdvb2cubW9kdWxlXCIpO2lmKCFDT01QSUxFRCYmIWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpdGhyb3cgRXJyb3IoXCJnb29nLm1vZHVsZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBnb29nLm1vZHVsZS5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlLlwiKTtnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5kZWNsYXJlTGVnYWN5TmFtZXNwYWNlPSEwfSxnb29nLmRlY2xhcmVNb2R1bGVJZD1mdW5jdGlvbihlKXtpZighQ09NUElMRUQpe2lmKCFnb29nLmlzSW5FczZNb2R1bGVMb2FkZXJfKCkpdGhyb3cgRXJyb3IoXCJnb29nLmRlY2xhcmVNb2R1bGVJZCBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gRVM2IG1vZHVsZVwiKTtpZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXyYmZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZSl0aHJvdyBFcnJvcihcImdvb2cuZGVjbGFyZU1vZHVsZUlkIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBtb2R1bGUuXCIpO2lmKGUgaW4gZ29vZy5sb2FkZWRNb2R1bGVzXyl0aHJvdyBFcnJvcignTW9kdWxlIHdpdGggbmFtZXNwYWNlIFwiJytlKydcIiBhbHJlYWR5IGV4aXN0cy4nKX1pZihnb29nLm1vZHVsZUxvYWRlclN0YXRlXylnb29nLm1vZHVsZUxvYWRlclN0YXRlXy5tb2R1bGVOYW1lPWU7ZWxzZXt2YXIgdD1nb29nLmdsb2JhbC4kanNjb21wO2lmKCF0fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmdldEN1cnJlbnRNb2R1bGVQYXRoKXRocm93IEVycm9yKCdNb2R1bGUgd2l0aCBuYW1lc3BhY2UgXCInK2UrJ1wiIGhhcyBiZWVuIGxvYWRlZCBpbmNvcnJlY3RseS4nKTt0PXQucmVxdWlyZSh0LmdldEN1cnJlbnRNb2R1bGVQYXRoKCkpLGdvb2cubG9hZGVkTW9kdWxlc19bZV09e2V4cG9ydHM6dCx0eXBlOmdvb2cuTW9kdWxlVHlwZS5FUzYsbW9kdWxlSWQ6ZX19fSxnb29nLnNldFRlc3RPbmx5PWZ1bmN0aW9uKGUpe2lmKGdvb2cuRElTQUxMT1dfVEVTVF9PTkxZX0NPREUpdGhyb3cgZT1lfHxcIlwiLEVycm9yKFwiSW1wb3J0aW5nIHRlc3Qtb25seSBjb2RlIGludG8gbm9uLWRlYnVnIGVudmlyb25tZW50XCIrKGU/XCI6IFwiK2U6XCIuXCIpKX0sZ29vZy5mb3J3YXJkRGVjbGFyZT1mdW5jdGlvbihlKXt9LENPTVBJTEVEfHwoZ29vZy5pc1Byb3ZpZGVkXz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiBnb29nLmxvYWRlZE1vZHVsZXNffHwhZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfW2VdJiZnb29nLmlzRGVmQW5kTm90TnVsbChnb29nLmdldE9iamVjdEJ5TmFtZShlKSl9LGdvb2cuaW1wbGljaXROYW1lc3BhY2VzXz17XCJnb29nLm1vZHVsZVwiOiEwfSksZ29vZy5nZXRPYmplY3RCeU5hbWU9ZnVuY3Rpb24oZSx0KXtlPWUuc3BsaXQoXCIuXCIpLHQ9dHx8Z29vZy5nbG9iYWw7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYodD10W2Vbb11dLCFnb29nLmlzRGVmQW5kTm90TnVsbCh0KSlyZXR1cm4gbnVsbDtyZXR1cm4gdH0sZ29vZy5nbG9iYWxpemU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdD10fHxnb29nLmdsb2JhbCxlKXRbb109ZVtvXX0sZ29vZy5hZGREZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIpeyFDT01QSUxFRCYmZ29vZy5ERVBFTkRFTkNJRVNfRU5BQkxFRCYmZ29vZy5kZWJ1Z0xvYWRlcl8uYWRkRGVwZW5kZW5jeShlLHQsbyxyKX0sZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSPSEwLGdvb2cubG9nVG9Db25zb2xlXz1mdW5jdGlvbihlKXtnb29nLmdsb2JhbC5jb25zb2xlJiZnb29nLmdsb2JhbC5jb25zb2xlLmVycm9yKGUpfSxnb29nLnJlcXVpcmU9ZnVuY3Rpb24oZSl7aWYoIUNPTVBJTEVEKXtpZihnb29nLkVOQUJMRV9ERUJVR19MT0FERVImJmdvb2cuZGVidWdMb2FkZXJfLnJlcXVlc3RlZChlKSxnb29nLmlzUHJvdmlkZWRfKGUpKXtpZihnb29nLmlzSW5Nb2R1bGVMb2FkZXJfKCkpcmV0dXJuIGdvb2cubW9kdWxlLmdldEludGVybmFsXyhlKX1lbHNlIGlmKGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUil7dmFyIHQ9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV87Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89bnVsbDt0cnl7Z29vZy5kZWJ1Z0xvYWRlcl8ubG9hZF8oZSl9ZmluYWxseXtnb29nLm1vZHVsZUxvYWRlclN0YXRlXz10fX1yZXR1cm4gbnVsbH19LGdvb2cucmVxdWlyZVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJue319LGdvb2cuYmFzZVBhdGg9XCJcIixnb29nLm51bGxGdW5jdGlvbj1mdW5jdGlvbigpe30sZ29vZy5hYnN0cmFjdE1ldGhvZD1mdW5jdGlvbigpe3Rocm93IEVycm9yKFwidW5pbXBsZW1lbnRlZCBhYnN0cmFjdCBtZXRob2RcIil9LGdvb2cuYWRkU2luZ2xldG9uR2V0dGVyPWZ1bmN0aW9uKGUpe2UuaW5zdGFuY2VfPXZvaWQgMCxlLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuaW5zdGFuY2VfP2UuaW5zdGFuY2VfOihnb29nLkRFQlVHJiYoZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zX1tnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfLmxlbmd0aF09ZSksZS5pbnN0YW5jZV89bmV3IGUpfX0sZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXz1bXSxnb29nLkxPQURfTU9EVUxFX1VTSU5HX0VWQUw9ITAsZ29vZy5TRUFMX01PRFVMRV9FWFBPUlRTPWdvb2cuREVCVUcsZ29vZy5sb2FkZWRNb2R1bGVzXz17fSxnb29nLkRFUEVOREVOQ0lFU19FTkFCTEVEPSFDT01QSUxFRCYmZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSLGdvb2cuVFJBTlNQSUxFPVwiZGV0ZWN0XCIsZ29vZy5BU1NVTUVfRVNfTU9EVUxFU19UUkFOU1BJTEVEPSExLGdvb2cuVFJBTlNQSUxFX1RPX0xBTkdVQUdFPVwiXCIsZ29vZy5UUkFOU1BJTEVSPVwidHJhbnNwaWxlLmpzXCIsZ29vZy5oYXNCYWRMZXRTY29waW5nPW51bGwsZ29vZy51c2VTYWZhcmkxMFdvcmthcm91bmQ9ZnVuY3Rpb24oKXtpZihudWxsPT1nb29nLmhhc0JhZExldFNjb3Bpbmcpe3RyeXt2YXIgYT0hZXZhbCgnXCJ1c2Ugc3RyaWN0XCI7bGV0IHggPSAxOyBmdW5jdGlvbiBmKCkgeyByZXR1cm4gdHlwZW9mIHg7IH07ZigpID09IFwibnVtYmVyXCI7Jyl9Y2F0Y2goZSl7YT0hMX1nb29nLmhhc0JhZExldFNjb3Bpbmc9YX1yZXR1cm4gZ29vZy5oYXNCYWRMZXRTY29waW5nfSxnb29nLndvcmthcm91bmRTYWZhcmkxMEV2YWxCdWc9ZnVuY3Rpb24oZSl7cmV0dXJuXCIoZnVuY3Rpb24oKXtcIitlK1wiXFxuO30pKCk7XFxuXCJ9LGdvb2cubG9hZE1vZHVsZT1mdW5jdGlvbihlKXt2YXIgdD1nb29nLm1vZHVsZUxvYWRlclN0YXRlXzt0cnl7aWYoZ29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89e21vZHVsZU5hbWU6XCJcIixkZWNsYXJlTGVnYWN5TmFtZXNwYWNlOiExLHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0d9LGdvb2cuaXNGdW5jdGlvbihlKSl2YXIgbz1lLmNhbGwodm9pZCAwLHt9KTtlbHNle2lmKCFnb29nLmlzU3RyaW5nKGUpKXRocm93IEVycm9yKFwiSW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvblwiKTtnb29nLnVzZVNhZmFyaTEwV29ya2Fyb3VuZCgpJiYoZT1nb29nLndvcmthcm91bmRTYWZhcmkxMEV2YWxCdWcoZSkpLG89Z29vZy5sb2FkTW9kdWxlRnJvbVNvdXJjZV8uY2FsbCh2b2lkIDAsZSl9dmFyIHI9Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZTtpZighZ29vZy5pc1N0cmluZyhyKXx8IXIpdGhyb3cgRXJyb3IoJ0ludmFsaWQgbW9kdWxlIG5hbWUgXCInK3IrJ1wiJyk7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8uZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZT9nb29nLmNvbnN0cnVjdE5hbWVzcGFjZV8ocixvKTpnb29nLlNFQUxfTU9EVUxFX0VYUE9SVFMmJk9iamVjdC5zZWFsJiZcIm9iamVjdFwiPT10eXBlb2YgbyYmbnVsbCE9byYmT2JqZWN0LnNlYWwobyksZ29vZy5sb2FkZWRNb2R1bGVzX1tyXT17ZXhwb3J0czpvLHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0csbW9kdWxlSWQ6Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV8ubW9kdWxlTmFtZX19ZmluYWxseXtnb29nLm1vZHVsZUxvYWRlclN0YXRlXz10fX0sZ29vZy5sb2FkTW9kdWxlRnJvbVNvdXJjZV89ZnVuY3Rpb24oYSl7cmV0dXJuIGV2YWwoYSkse319LGdvb2cubm9ybWFsaXplUGF0aF89ZnVuY3Rpb24oZSl7ZT1lLnNwbGl0KFwiL1wiKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOylcIi5cIj09ZVt0XT9lLnNwbGljZSh0LDEpOnQmJlwiLi5cIj09ZVt0XSYmZVt0LTFdJiZcIi4uXCIhPWVbdC0xXT9lLnNwbGljZSgtLXQsMik6dCsrO3JldHVybiBlLmpvaW4oXCIvXCIpfSxnb29nLmxvYWRGaWxlU3luY189ZnVuY3Rpb24oZSl7aWYoZ29vZy5nbG9iYWwuQ0xPU1VSRV9MT0FEX0ZJTEVfU1lOQylyZXR1cm4gZ29vZy5nbG9iYWwuQ0xPU1VSRV9MT0FEX0ZJTEVfU1lOQyhlKTt0cnl7dmFyIHQ9bmV3IGdvb2cuZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0O3JldHVybiB0Lm9wZW4oXCJnZXRcIixlLCExKSx0LnNlbmQoKSwwPT10LnN0YXR1c3x8MjAwPT10LnN0YXR1cz90LnJlc3BvbnNlVGV4dDpudWxsfWNhdGNoKGUpe3JldHVybiBudWxsfX0sZ29vZy50cmFuc3BpbGVfPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1nb29nLmdsb2JhbC4kanNjb21wO3J8fChnb29nLmdsb2JhbC4kanNjb21wPXI9e30pO3ZhciBuPXIudHJhbnNwaWxlO2lmKCFuKXt2YXIgcz1nb29nLmJhc2VQYXRoK2dvb2cuVFJBTlNQSUxFUixpPWdvb2cubG9hZEZpbGVTeW5jXyhzKTtpZihpKXtpZihmdW5jdGlvbigpeygwLGV2YWwpKGkrXCJcXG4vLyMgc291cmNlVVJMPVwiK3MpfS5jYWxsKGdvb2cuZ2xvYmFsKSxnb29nLmdsb2JhbC4kZ3d0RXhwb3J0JiZnb29nLmdsb2JhbC4kZ3d0RXhwb3J0LiRqc2NvbXAmJiFnb29nLmdsb2JhbC4kZ3d0RXhwb3J0LiRqc2NvbXAudHJhbnNwaWxlKXRocm93IEVycm9yKCdUaGUgdHJhbnNwaWxlciBkaWQgbm90IHByb3Blcmx5IGV4cG9ydCB0aGUgXCJ0cmFuc3BpbGVcIiBtZXRob2QuICRnd3RFeHBvcnQ6ICcrSlNPTi5zdHJpbmdpZnkoZ29vZy5nbG9iYWwuJGd3dEV4cG9ydCkpO2dvb2cuZ2xvYmFsLiRqc2NvbXAudHJhbnNwaWxlPWdvb2cuZ2xvYmFsLiRnd3RFeHBvcnQuJGpzY29tcC50cmFuc3BpbGUsbj0ocj1nb29nLmdsb2JhbC4kanNjb21wKS50cmFuc3BpbGV9fXJldHVybiBufHwobj1yLnRyYW5zcGlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmxvZ1RvQ29uc29sZV8odCtcIiByZXF1aXJlcyB0cmFuc3BpbGF0aW9uIGJ1dCBubyB0cmFuc3BpbGVyIHdhcyBmb3VuZC5cIiksZX0pLG4oZSx0LG8pfSxnb29nLnR5cGVPZj1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgZTtpZihcIm9iamVjdFwiPT10KXtpZighZSlyZXR1cm5cIm51bGxcIjtpZihlIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuXCJhcnJheVwiO2lmKGUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIHQ7dmFyIG89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO2lmKFwiW29iamVjdCBXaW5kb3ddXCI9PW8pcmV0dXJuXCJvYmplY3RcIjtpZihcIltvYmplY3QgQXJyYXldXCI9PW98fFwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aCYmdm9pZCAwIT09ZS5zcGxpY2UmJnZvaWQgMCE9PWUucHJvcGVydHlJc0VudW1lcmFibGUmJiFlLnByb3BlcnR5SXNFbnVtZXJhYmxlKFwic3BsaWNlXCIpKXJldHVyblwiYXJyYXlcIjtpZihcIltvYmplY3QgRnVuY3Rpb25dXCI9PW98fHZvaWQgMCE9PWUuY2FsbCYmdm9pZCAwIT09ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWUucHJvcGVydHlJc0VudW1lcmFibGUoXCJjYWxsXCIpKXJldHVyblwiZnVuY3Rpb25cIn1lbHNlIGlmKFwiZnVuY3Rpb25cIj09dCYmdm9pZCAwPT09ZS5jYWxsKXJldHVyblwib2JqZWN0XCI7cmV0dXJuIHR9LGdvb2cuaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sZ29vZy5pc0RlZkFuZE5vdE51bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWV9LGdvb2cuaXNBcnJheT1mdW5jdGlvbihlKXtyZXR1cm5cImFycmF5XCI9PWdvb2cudHlwZU9mKGUpfSxnb29nLmlzQXJyYXlMaWtlPWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cudHlwZU9mKGUpO3JldHVyblwiYXJyYXlcIj09dHx8XCJvYmplY3RcIj09dCYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RofSxnb29nLmlzRGF0ZUxpa2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaXNPYmplY3QoZSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZ2V0RnVsbFllYXJ9LGdvb2cuaXNGdW5jdGlvbj1mdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PWdvb2cudHlwZU9mKGUpfSxnb29nLmlzT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVyblwib2JqZWN0XCI9PXQmJm51bGwhPWV8fFwiZnVuY3Rpb25cIj09dH0sZ29vZy5nZXRVaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZ29vZy5VSURfUFJPUEVSVFlfXXx8KGVbZ29vZy5VSURfUFJPUEVSVFlfXT0rK2dvb2cudWlkQ291bnRlcl8pfSxnb29nLmhhc1VpZD1mdW5jdGlvbihlKXtyZXR1cm4hIWVbZ29vZy5VSURfUFJPUEVSVFlfXX0sZ29vZy5yZW1vdmVVaWQ9ZnVuY3Rpb24oZSl7bnVsbCE9PWUmJlwicmVtb3ZlQXR0cmlidXRlXCJpbiBlJiZlLnJlbW92ZUF0dHJpYnV0ZShnb29nLlVJRF9QUk9QRVJUWV8pO3RyeXtkZWxldGUgZVtnb29nLlVJRF9QUk9QRVJUWV9dfWNhdGNoKGUpe319LGdvb2cuVUlEX1BST1BFUlRZXz1cImNsb3N1cmVfdWlkX1wiKygxZTkqTWF0aC5yYW5kb20oKT4+PjApLGdvb2cudWlkQ291bnRlcl89MCxnb29nLmdldEhhc2hDb2RlPWdvb2cuZ2V0VWlkLGdvb2cucmVtb3ZlSGFzaENvZGU9Z29vZy5yZW1vdmVVaWQsZ29vZy5jbG9uZU9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD1nb29nLnR5cGVPZihlKTtpZihcIm9iamVjdFwiPT10fHxcImFycmF5XCI9PXQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2xvbmUpcmV0dXJuIGUuY2xvbmUoKTtmb3IodmFyIG8gaW4gdD1cImFycmF5XCI9PXQ/W106e30sZSl0W29dPWdvb2cuY2xvbmVPYmplY3QoZVtvXSk7cmV0dXJuIHR9cmV0dXJuIGV9LGdvb2cuYmluZE5hdGl2ZV89ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBlLmNhbGwuYXBwbHkoZS5iaW5kLGFyZ3VtZW50cyl9LGdvb2cuYmluZEpzXz1mdW5jdGlvbihlLHQsbyl7aWYoIWUpdGhyb3cgRXJyb3IoKTtpZigyPGFyZ3VtZW50cy5sZW5ndGgpe3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShvLHIpLGUuYXBwbHkodCxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX0sZ29vZy5iaW5kPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQmJi0xIT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpLmluZGV4T2YoXCJuYXRpdmUgY29kZVwiKT9nb29nLmJpbmQ9Z29vZy5iaW5kTmF0aXZlXzpnb29nLmJpbmQ9Z29vZy5iaW5kSnNfLGdvb2cuYmluZC5hcHBseShudWxsLGFyZ3VtZW50cyl9LGdvb2cucGFydGlhbD1mdW5jdGlvbihlLHQpe3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1vLnNsaWNlKCk7cmV0dXJuIHQucHVzaC5hcHBseSh0LGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLHQpfX0sZ29vZy5taXhpbj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbyBpbiB0KWVbb109dFtvXX0sZ29vZy5ub3c9Z29vZy5UUlVTVEVEX1NJVEUmJkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sZ29vZy5nbG9iYWxFdmFsPWZ1bmN0aW9uKGUpe2lmKGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQpZ29vZy5nbG9iYWwuZXhlY1NjcmlwdChlLFwiSmF2YVNjcmlwdFwiKTtlbHNle2lmKCFnb29nLmdsb2JhbC5ldmFsKXRocm93IEVycm9yKFwiZ29vZy5nbG9iYWxFdmFsIG5vdCBhdmFpbGFibGVcIik7aWYobnVsbD09Z29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXyl7dHJ5e2dvb2cuZ2xvYmFsLmV2YWwoXCJ2YXIgX2V2YWxUZXN0XyA9IDE7XCIpfWNhdGNoKGUpe31pZih2b2lkIDAhPT1nb29nLmdsb2JhbC5fZXZhbFRlc3RfKXt0cnl7ZGVsZXRlIGdvb2cuZ2xvYmFsLl9ldmFsVGVzdF99Y2F0Y2goZSl7fWdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc189ITB9ZWxzZSBnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfPSExfWlmKGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pZ29vZy5nbG9iYWwuZXZhbChlKTtlbHNle3ZhciB0PWdvb2cuZ2xvYmFsLmRvY3VtZW50LG89dC5jcmVhdGVFbGVtZW50KFwiU0NSSVBUXCIpO28udHlwZT1cInRleHQvamF2YXNjcmlwdFwiLG8uZGVmZXI9ITEsby5hcHBlbmRDaGlsZCh0LmNyZWF0ZVRleHROb2RlKGUpKSx0LmhlYWQuYXBwZW5kQ2hpbGQobyksdC5oZWFkLnJlbW92ZUNoaWxkKG8pfX19LGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc189bnVsbCxnb29nLmdldENzc05hbWU9ZnVuY3Rpb24oZSx0KXtpZihcIi5cIj09U3RyaW5nKGUpLmNoYXJBdCgwKSl0aHJvdyBFcnJvcignY2xhc3NOYW1lIHBhc3NlZCBpbiBnb29nLmdldENzc05hbWUgbXVzdCBub3Qgc3RhcnQgd2l0aCBcIi5cIi4gWW91IHBhc3NlZDogJytlKTt2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5jc3NOYW1lTWFwcGluZ19bZV18fGV9LHI9ZnVuY3Rpb24oZSl7ZT1lLnNwbGl0KFwiLVwiKTtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChvKGVbcl0pKTtyZXR1cm4gdC5qb2luKFwiLVwiKX07cmV0dXJuIHI9Z29vZy5jc3NOYW1lTWFwcGluZ18/XCJCWV9XSE9MRVwiPT1nb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfP286cjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZT10P2UrXCItXCIrcih0KTpyKGUpLGdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQX0ZOP2dvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQX0ZOKGUpOmV9LGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmc9ZnVuY3Rpb24oZSx0KXtnb29nLmNzc05hbWVNYXBwaW5nXz1lLGdvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV89dH0sIUNPTVBJTEVEJiZnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkcmJihnb29nLmNzc05hbWVNYXBwaW5nXz1nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkcpLGdvb2cuZ2V0TXNnPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbyYmby5odG1sJiYoZT1lLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikpLHQmJihlPWUucmVwbGFjZSgvXFx7XFwkKFtefV0rKX0vZywoZnVuY3Rpb24oZSxvKXtyZXR1cm4gbnVsbCE9dCYmbyBpbiB0P3Rbb106ZX0pKSksZX0sZ29vZy5nZXRNc2dXaXRoRmFsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0sZ29vZy5leHBvcnRTeW1ib2w9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuZXhwb3J0UGF0aF8oZSx0LG8pfSxnb29nLmV4cG9ydFByb3BlcnR5PWZ1bmN0aW9uKGUsdCxvKXtlW3RdPW99LGdvb2cuaW5oZXJpdHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKCl7fW8ucHJvdG90eXBlPXQucHJvdG90eXBlLGUuc3VwZXJDbGFzc189dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IG8sZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLmJhc2U9ZnVuY3Rpb24oZSxvLHIpe2Zvcih2YXIgbj1BcnJheShhcmd1bWVudHMubGVuZ3RoLTIpLHM9MjtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKW5bcy0yXT1hcmd1bWVudHNbc107cmV0dXJuIHQucHJvdG90eXBlW29dLmFwcGx5KGUsbil9fSxnb29nLmJhc2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO2lmKGdvb2cuU1RSSUNUX01PREVfQ09NUEFUSUJMRXx8Z29vZy5ERUJVRyYmIXIpdGhyb3cgRXJyb3IoXCJhcmd1bWVudHMuY2FsbGVyIG5vdCBkZWZpbmVkLiAgZ29vZy5iYXNlKCkgY2Fubm90IGJlIHVzZWQgd2l0aCBzdHJpY3QgbW9kZSBjb2RlLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLUNcIik7aWYodm9pZCAwIT09ci5zdXBlckNsYXNzXyl7Zm9yKHZhciBuPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSkscz0xO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspbltzLTFdPWFyZ3VtZW50c1tzXTtyZXR1cm4gci5zdXBlckNsYXNzXy5jb25zdHJ1Y3Rvci5hcHBseShlLG4pfWlmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiZcInN5bWJvbFwiIT10eXBlb2YgdCl0aHJvdyBFcnJvcihcIm1ldGhvZCBuYW1lcyBwcm92aWRlZCB0byBnb29nLmJhc2UgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbFwiKTtmb3Iobj1BcnJheShhcmd1bWVudHMubGVuZ3RoLTIpLHM9MjtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKW5bcy0yXT1hcmd1bWVudHNbc107cz0hMTtmb3IodmFyIGk9ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7aTtpPU9iamVjdC5nZXRQcm90b3R5cGVPZihpKSlpZihpW3RdPT09cilzPSEwO2Vsc2UgaWYocylyZXR1cm4gaVt0XS5hcHBseShlLG4pO2lmKGVbdF09PT1yKXJldHVybiBlLmNvbnN0cnVjdG9yLnByb3RvdHlwZVt0XS5hcHBseShlLG4pO3Rocm93IEVycm9yKFwiZ29vZy5iYXNlIGNhbGxlZCBmcm9tIGEgbWV0aG9kIG9mIG9uZSBuYW1lIHRvIGEgbWV0aG9kIG9mIGEgZGlmZmVyZW50IG5hbWVcIil9LGdvb2cuc2NvcGU9ZnVuY3Rpb24oZSl7aWYoZ29vZy5pc0luTW9kdWxlTG9hZGVyXygpKXRocm93IEVycm9yKFwiZ29vZy5zY29wZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGhpbiBhIG1vZHVsZS5cIik7ZS5jYWxsKGdvb2cuZ2xvYmFsKX0sQ09NUElMRUR8fChnb29nLmdsb2JhbC5DT01QSUxFRD1DT01QSUxFRCksZ29vZy5kZWZpbmVDbGFzcz1mdW5jdGlvbihlLHQpe3ZhciBvPXQuY29uc3RydWN0b3Iscj10LnN0YXRpY3M7cmV0dXJuIG8mJm8hPU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3J8fChvPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoXCJjYW5ub3QgaW5zdGFudGlhdGUgYW4gaW50ZXJmYWNlIChubyBjb25zdHJ1Y3RvciBkZWZpbmVkKS5cIil9KSxvPWdvb2cuZGVmaW5lQ2xhc3MuY3JlYXRlU2VhbGluZ0NvbnN0cnVjdG9yXyhvLGUpLGUmJmdvb2cuaW5oZXJpdHMobyxlKSxkZWxldGUgdC5jb25zdHJ1Y3RvcixkZWxldGUgdC5zdGF0aWNzLGdvb2cuZGVmaW5lQ2xhc3MuYXBwbHlQcm9wZXJ0aWVzXyhvLnByb3RvdHlwZSx0KSxudWxsIT1yJiYociBpbnN0YW5jZW9mIEZ1bmN0aW9uP3Iobyk6Z29vZy5kZWZpbmVDbGFzcy5hcHBseVByb3BlcnRpZXNfKG8scikpLG99LGdvb2cuZGVmaW5lQ2xhc3MuU0VBTF9DTEFTU19JTlNUQU5DRVM9Z29vZy5ERUJVRyxnb29nLmRlZmluZUNsYXNzLmNyZWF0ZVNlYWxpbmdDb25zdHJ1Y3Rvcl89ZnVuY3Rpb24oZSx0KXtpZighZ29vZy5kZWZpbmVDbGFzcy5TRUFMX0NMQVNTX0lOU1RBTkNFUylyZXR1cm4gZTt2YXIgbz0hZ29vZy5kZWZpbmVDbGFzcy5pc1Vuc2VhbGFibGVfKHQpLHI9ZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdFtnb29nLlVJRF9QUk9QRVJUWV9dPXRbZ29vZy5VSURfUFJPUEVSVFlfXSx0aGlzLmNvbnN0cnVjdG9yPT09ciYmbyYmT2JqZWN0LnNlYWwgaW5zdGFuY2VvZiBGdW5jdGlvbiYmT2JqZWN0LnNlYWwodCksdH07cmV0dXJuIHJ9LGdvb2cuZGVmaW5lQ2xhc3MuaXNVbnNlYWxhYmxlXz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5wcm90b3R5cGUmJmUucHJvdG90eXBlW2dvb2cuVU5TRUFMQUJMRV9DT05TVFJVQ1RPUl9QUk9QRVJUWV9dfSxnb29nLmRlZmluZUNsYXNzLk9CSkVDVF9QUk9UT1RZUEVfRklFTERTXz1cImNvbnN0cnVjdG9yIGhhc093blByb3BlcnR5IGlzUHJvdG90eXBlT2YgcHJvcGVydHlJc0VudW1lcmFibGUgdG9Mb2NhbGVTdHJpbmcgdG9TdHJpbmcgdmFsdWVPZlwiLnNwbGl0KFwiIFwiKSxnb29nLmRlZmluZUNsYXNzLmFwcGx5UHJvcGVydGllc189ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7Zm9yKHZhciByPTA7cjxnb29nLmRlZmluZUNsYXNzLk9CSkVDVF9QUk9UT1RZUEVfRklFTERTXy5sZW5ndGg7cisrKW89Z29vZy5kZWZpbmVDbGFzcy5PQkpFQ1RfUFJPVE9UWVBFX0ZJRUxEU19bcl0sT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pfSxnb29nLnRhZ1Vuc2VhbGFibGVDbGFzcz1mdW5jdGlvbihlKXshQ09NUElMRUQmJmdvb2cuZGVmaW5lQ2xhc3MuU0VBTF9DTEFTU19JTlNUQU5DRVMmJihlLnByb3RvdHlwZVtnb29nLlVOU0VBTEFCTEVfQ09OU1RSVUNUT1JfUFJPUEVSVFlfXT0hMCl9LGdvb2cuVU5TRUFMQUJMRV9DT05TVFJVQ1RPUl9QUk9QRVJUWV89XCJnb29nX2RlZmluZUNsYXNzX2xlZ2FjeV91bnNlYWxhYmxlXCIsIUNPTVBJTEVEJiZnb29nLkRFUEVOREVOQ0lFU19FTkFCTEVEJiYoZ29vZy5pbkh0bWxEb2N1bWVudF89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gbnVsbCE9ZSYmXCJ3cml0ZVwiaW4gZX0sZ29vZy5pc0RvY3VtZW50TG9hZGluZ189ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gZS5hdHRhY2hFdmVudD9cImNvbXBsZXRlXCIhPWUucmVhZHlTdGF0ZTpcImxvYWRpbmdcIj09ZS5yZWFkeVN0YXRlfSxnb29nLmZpbmRCYXNlUGF0aF89ZnVuY3Rpb24oKXtpZihnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIKSYmZ29vZy5pc1N0cmluZyhnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSCkpZ29vZy5iYXNlUGF0aD1nb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSDtlbHNlIGlmKGdvb2cuaW5IdG1sRG9jdW1lbnRfKCkpe3ZhciBlPWdvb2cuZ2xvYmFsLmRvY3VtZW50LHQ9ZS5jdXJyZW50U2NyaXB0O2Zvcih0PShlPXQ/W3RdOmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJTQ1JJUFRcIikpLmxlbmd0aC0xOzA8PXQ7LS10KXt2YXIgbz1lW3RdLnNyYyxyPW8ubGFzdEluZGV4T2YoXCI/XCIpO2lmKHI9LTE9PXI/by5sZW5ndGg6cixcImJhc2UuanNcIj09by5zdWJzdHIoci03LDcpKXtnb29nLmJhc2VQYXRoPW8uc3Vic3RyKDAsci03KTticmVha319fX0sZ29vZy5maW5kQmFzZVBhdGhfKCksZ29vZy5UcmFuc3BpbGVyPWZ1bmN0aW9uKCl7dGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fPW51bGwsdGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0Xz1nb29nLlRSQU5TUElMRV9UT19MQU5HVUFHRX0sZ29vZy5UcmFuc3BpbGVyLnByb3RvdHlwZS5jcmVhdGVSZXF1aXJlc1RyYW5zcGlsYXRpb25fPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0LG8pe2U/ZFt0XT0hMDpvKCk/KGM9dCxkW3RdPSExKTplPWRbdF09ITB9ZnVuY3Rpb24gYihhKXt0cnl7cmV0dXJuISFldmFsKGEpfWNhdGNoKGUpe3JldHVybiExfX12YXIgYz1cImVzM1wiLGQ9e2VzMzohMX0sZT0hMSxmPWdvb2cuZ2xvYmFsLm5hdmlnYXRvciYmZ29vZy5nbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudD9nb29nLmdsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50OlwiXCI7cmV0dXJuIGEoXCJlczVcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYihcIlsxLF0ubGVuZ3RoPT0xXCIpfSkpLGEoXCJlczZcIiwoZnVuY3Rpb24oKXtyZXR1cm4hZi5tYXRjaCgvRWRnZVxcLyhcXGQrKShcXC5cXGQpKi9pKSYmYignKCgpPT57XCJ1c2Ugc3RyaWN0XCI7Y2xhc3MgWHtjb25zdHJ1Y3Rvcigpe2lmKG5ldy50YXJnZXQhPVN0cmluZyl0aHJvdyAxO3RoaXMueD00Mn19bGV0IHE9UmVmbGVjdC5jb25zdHJ1Y3QoWCxbXSxTdHJpbmcpO2lmKHEueCE9NDJ8fCEocSBpbnN0YW5jZW9mIFN0cmluZykpdGhyb3cgMTtmb3IoY29uc3QgYSBvZlsyLDNdKXtpZihhPT0yKWNvbnRpbnVlO2Z1bmN0aW9uIGYoej17YX0pe2xldCBhPTA7cmV0dXJuIHouYX17ZnVuY3Rpb24gZigpe3JldHVybiAwO319cmV0dXJuIGYoKT09M319KSgpJyl9KSksYShcImVzN1wiLChmdW5jdGlvbigpe3JldHVybiBiKFwiMiAqKiAyID09IDRcIil9KSksYShcImVzOFwiLChmdW5jdGlvbigpe3JldHVybiBiKFwiYXN5bmMgKCkgPT4gMSwgdHJ1ZVwiKX0pKSxhKFwiZXM5XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGIoXCIoey4uLnJlc3R9ID0ge30pLCB0cnVlXCIpfSkpLGEoXCJlc19uZXh0XCIsKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkse3RhcmdldDpjLG1hcDpkfX0sZ29vZy5UcmFuc3BpbGVyLnByb3RvdHlwZS5uZWVkc1RyYW5zcGlsZT1mdW5jdGlvbihlLHQpe2lmKFwiYWx3YXlzXCI9PWdvb2cuVFJBTlNQSUxFKXJldHVybiEwO2lmKFwibmV2ZXJcIj09Z29vZy5UUkFOU1BJTEUpcmV0dXJuITE7aWYoIXRoaXMucmVxdWlyZXNUcmFuc3BpbGF0aW9uXyl7dmFyIG89dGhpcy5jcmVhdGVSZXF1aXJlc1RyYW5zcGlsYXRpb25fKCk7dGhpcy5yZXF1aXJlc1RyYW5zcGlsYXRpb25fPW8ubWFwLHRoaXMudHJhbnNwaWxhdGlvblRhcmdldF89dGhpcy50cmFuc3BpbGF0aW9uVGFyZ2V0X3x8by50YXJnZXR9aWYoZSBpbiB0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl8pcmV0dXJuISF0aGlzLnJlcXVpcmVzVHJhbnNwaWxhdGlvbl9bZV18fCEoIWdvb2cuaW5IdG1sRG9jdW1lbnRfKCl8fFwiZXM2XCIhPXR8fFwibm9Nb2R1bGVcImluIGdvb2cuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpO3Rocm93IEVycm9yKFwiVW5rbm93biBsYW5ndWFnZSBtb2RlOiBcIitlKX0sZ29vZy5UcmFuc3BpbGVyLnByb3RvdHlwZS50cmFuc3BpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy50cmFuc3BpbGVfKGUsdCx0aGlzLnRyYW5zcGlsYXRpb25UYXJnZXRfKX0sZ29vZy50cmFuc3BpbGVyXz1uZXcgZ29vZy5UcmFuc3BpbGVyLGdvb2cucHJvdGVjdFNjcmlwdFRhZ189ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPFxcLyhTQ1JJUFQpL2dpLFwiXFxcXHgzYy8kMVwiKX0sZ29vZy5EZWJ1Z0xvYWRlcl89ZnVuY3Rpb24oKXt0aGlzLmRlcGVuZGVuY2llc189e30sdGhpcy5pZFRvUGF0aF89e30sdGhpcy53cml0dGVuXz17fSx0aGlzLmxvYWRpbmdEZXBzXz1bXSx0aGlzLmRlcHNUb0xvYWRfPVtdLHRoaXMucGF1c2VkXz0hMSx0aGlzLmZhY3RvcnlfPW5ldyBnb29nLkRlcGVuZGVuY3lGYWN0b3J5KGdvb2cudHJhbnNwaWxlcl8pLHRoaXMuZGVmZXJyZWRDYWxsYmFja3NfPXt9LHRoaXMuZGVmZXJyZWRRdWV1ZV89W119LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5ib290c3RyYXA9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKCl7ciYmKGdvb2cuZ2xvYmFsLnNldFRpbWVvdXQociwwKSxyPW51bGwpfXZhciByPXQ7aWYoZS5sZW5ndGgpe3Q9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBzPXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhlW25dKTtpZighcyl0aHJvdyBFcnJvcihcIlVucmVnb25pemVkIG5hbWVzcGFjZTogXCIrZVtuXSk7dC5wdXNoKHRoaXMuZGVwZW5kZW5jaWVzX1tzXSl9cz1nb29nLnJlcXVpcmU7dmFyIGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXMoZVtuXSksdFtuXS5vbkxvYWQoKGZ1bmN0aW9uKCl7KytpPT1lLmxlbmd0aCYmbygpfSkpfWVsc2UgbygpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZENsb3N1cmVEZXBzPWZ1bmN0aW9uKCl7dGhpcy5kZXBzVG9Mb2FkXy5wdXNoKHRoaXMuZmFjdG9yeV8uY3JlYXRlRGVwZW5kZW5jeShnb29nLm5vcm1hbGl6ZVBhdGhfKGdvb2cuYmFzZVBhdGgrXCJkZXBzLmpzXCIpLFwiZGVwcy5qc1wiLFtdLFtdLHt9LCExKSksdGhpcy5sb2FkRGVwc18oKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLnJlcXVlc3RlZD1mdW5jdGlvbihlLHQpeyhlPXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhlKSkmJih0fHx0aGlzLmFyZURlcHNMb2FkZWRfKHRoaXMuZGVwZW5kZW5jaWVzX1tlXS5yZXF1aXJlcykpJiYodD10aGlzLmRlZmVycmVkQ2FsbGJhY2tzX1tlXSkmJihkZWxldGUgdGhpcy5kZWZlcnJlZENhbGxiYWNrc19bZV0sdCgpKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLnNldERlcGVuZGVuY3lGYWN0b3J5PWZ1bmN0aW9uKGUpe3RoaXMuZmFjdG9yeV89ZX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRfPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldFBhdGhGcm9tRGVwc18oZSkpdGhyb3cgZT1cImdvb2cucmVxdWlyZSBjb3VsZCBub3QgZmluZDogXCIrZSxnb29nLmxvZ1RvQ29uc29sZV8oZSksRXJyb3IoZSk7dmFyIHQ9dGhpcyxvPVtdLHI9ZnVuY3Rpb24oZSl7dmFyIG49dC5nZXRQYXRoRnJvbURlcHNfKGUpO2lmKCFuKXRocm93IEVycm9yKFwiQmFkIGRlcGVuZGVuY3kgcGF0aCBvciBzeW1ib2w6IFwiK2UpO2lmKCF0LndyaXR0ZW5fW25dKXtmb3IodC53cml0dGVuX1tuXT0hMCxlPXQuZGVwZW5kZW5jaWVzX1tuXSxuPTA7bjxlLnJlcXVpcmVzLmxlbmd0aDtuKyspZ29vZy5pc1Byb3ZpZGVkXyhlLnJlcXVpcmVzW25dKXx8cihlLnJlcXVpcmVzW25dKTtvLnB1c2goZSl9fTtyKGUpLGU9ISF0aGlzLmRlcHNUb0xvYWRfLmxlbmd0aCx0aGlzLmRlcHNUb0xvYWRfPXRoaXMuZGVwc1RvTG9hZF8uY29uY2F0KG8pLHRoaXMucGF1c2VkX3x8ZXx8dGhpcy5sb2FkRGVwc18oKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWREZXBzXz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9dGhpcy5wYXVzZWRfO3RoaXMuZGVwc1RvTG9hZF8ubGVuZ3RoJiYhdDspIWZ1bmN0aW9uKCl7dmFyIG89ITEscj1lLmRlcHNUb0xvYWRfLnNoaWZ0KCksbj0hMTtlLmxvYWRpbmdfKHIpO3ZhciBzPXtwYXVzZTpmdW5jdGlvbigpe2lmKG8pdGhyb3cgRXJyb3IoXCJDYW5ub3QgY2FsbCBwYXVzZSBhZnRlciB0aGUgY2FsbCB0byBsb2FkLlwiKTt0PSEwfSxyZXN1bWU6ZnVuY3Rpb24oKXtvP2UucmVzdW1lXygpOnQ9ITF9LGxvYWRlZDpmdW5jdGlvbigpe2lmKG4pdGhyb3cgRXJyb3IoXCJEb3VibGUgY2FsbCB0byBsb2FkZWQuXCIpO249ITAsZS5sb2FkZWRfKHIpfSxwZW5kaW5nOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG89MDtvPGUubG9hZGluZ0RlcHNfLmxlbmd0aDtvKyspdC5wdXNoKGUubG9hZGluZ0RlcHNfW29dKTtyZXR1cm4gdH0sc2V0TW9kdWxlU3RhdGU6ZnVuY3Rpb24oZSl7Z29vZy5tb2R1bGVMb2FkZXJTdGF0ZV89e3R5cGU6ZSxtb2R1bGVOYW1lOlwiXCIsZGVjbGFyZUxlZ2FjeU5hbWVzcGFjZTohMX19LHJlZ2lzdGVyRXM2TW9kdWxlRXhwb3J0czpmdW5jdGlvbihlLHQsbyl7byYmKGdvb2cubG9hZGVkTW9kdWxlc19bb109e2V4cG9ydHM6dCx0eXBlOmdvb2cuTW9kdWxlVHlwZS5FUzYsbW9kdWxlSWQ6b3x8XCJcIn0pfSxyZWdpc3Rlckdvb2dNb2R1bGVFeHBvcnRzOmZ1bmN0aW9uKGUsdCl7Z29vZy5sb2FkZWRNb2R1bGVzX1tlXT17ZXhwb3J0czp0LHR5cGU6Z29vZy5Nb2R1bGVUeXBlLkdPT0csbW9kdWxlSWQ6ZX19LGNsZWFyTW9kdWxlU3RhdGU6ZnVuY3Rpb24oKXtnb29nLm1vZHVsZUxvYWRlclN0YXRlXz1udWxsfSxkZWZlcjpmdW5jdGlvbih0KXtpZihvKXRocm93IEVycm9yKFwiQ2Fubm90IHJlZ2lzdGVyIHdpdGggZGVmZXIgYWZ0ZXIgdGhlIGNhbGwgdG8gbG9hZC5cIik7ZS5kZWZlcl8ocix0KX0sYXJlRGVwc0xvYWRlZDpmdW5jdGlvbigpe3JldHVybiBlLmFyZURlcHNMb2FkZWRfKHIucmVxdWlyZXMpfX07dHJ5e3IubG9hZChzKX1maW5hbGx5e289ITB9fSgpO3QmJnRoaXMucGF1c2VfKCl9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5wYXVzZV89ZnVuY3Rpb24oKXt0aGlzLnBhdXNlZF89ITB9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5yZXN1bWVfPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWRfJiYodGhpcy5wYXVzZWRfPSExLHRoaXMubG9hZERlcHNfKCkpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUubG9hZGluZ189ZnVuY3Rpb24oZSl7dGhpcy5sb2FkaW5nRGVwc18ucHVzaChlKX0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmxvYWRlZF89ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLmxvYWRpbmdEZXBzXy5sZW5ndGg7dCsrKWlmKHRoaXMubG9hZGluZ0RlcHNfW3RdPT1lKXt0aGlzLmxvYWRpbmdEZXBzXy5zcGxpY2UodCwxKTticmVha31mb3IodD0wO3Q8dGhpcy5kZWZlcnJlZFF1ZXVlXy5sZW5ndGg7dCsrKWlmKHRoaXMuZGVmZXJyZWRRdWV1ZV9bdF09PWUucGF0aCl7dGhpcy5kZWZlcnJlZFF1ZXVlXy5zcGxpY2UodCwxKTticmVha31pZih0aGlzLmxvYWRpbmdEZXBzXy5sZW5ndGg9PXRoaXMuZGVmZXJyZWRRdWV1ZV8ubGVuZ3RoJiYhdGhpcy5kZXBzVG9Mb2FkXy5sZW5ndGgpZm9yKDt0aGlzLmRlZmVycmVkUXVldWVfLmxlbmd0aDspdGhpcy5yZXF1ZXN0ZWQodGhpcy5kZWZlcnJlZFF1ZXVlXy5zaGlmdCgpLCEwKTtlLmxvYWRlZCgpfSxnb29nLkRlYnVnTG9hZGVyXy5wcm90b3R5cGUuYXJlRGVwc0xvYWRlZF89ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBvPXRoaXMuZ2V0UGF0aEZyb21EZXBzXyhlW3RdKTtpZighb3x8IShvIGluIHRoaXMuZGVmZXJyZWRDYWxsYmFja3NfKSYmIWdvb2cuaXNQcm92aWRlZF8oZVt0XSkpcmV0dXJuITF9cmV0dXJuITB9LGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5nZXRQYXRoRnJvbURlcHNfPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMuaWRUb1BhdGhfP3RoaXMuaWRUb1BhdGhfW2VdOmUgaW4gdGhpcy5kZXBlbmRlbmNpZXNfP2U6bnVsbH0sZ29vZy5EZWJ1Z0xvYWRlcl8ucHJvdG90eXBlLmRlZmVyXz1mdW5jdGlvbihlLHQpe3RoaXMuZGVmZXJyZWRDYWxsYmFja3NfW2UucGF0aF09dCx0aGlzLmRlZmVycmVkUXVldWVfLnB1c2goZS5wYXRoKX0sZ29vZy5Mb2FkQ29udHJvbGxlcj1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5wZW5kaW5nPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5yZWdpc3RlckVzNk1vZHVsZUV4cG9ydHM9ZnVuY3Rpb24oZSx0LG8pe30sZ29vZy5Mb2FkQ29udHJvbGxlci5wcm90b3R5cGUuc2V0TW9kdWxlU3RhdGU9ZnVuY3Rpb24oZSl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5jbGVhck1vZHVsZVN0YXRlPWZ1bmN0aW9uKCl7fSxnb29nLkxvYWRDb250cm9sbGVyLnByb3RvdHlwZS5kZWZlcj1mdW5jdGlvbihlKXt9LGdvb2cuTG9hZENvbnRyb2xsZXIucHJvdG90eXBlLmFyZURlcHNMb2FkZWQ9ZnVuY3Rpb24oKXt9LGdvb2cuRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe3RoaXMucGF0aD1lLHRoaXMucmVsYXRpdmVQYXRoPXQsdGhpcy5wcm92aWRlcz1vLHRoaXMucmVxdWlyZXM9cix0aGlzLmxvYWRGbGFncz1uLHRoaXMubG9hZGVkXz0hMSx0aGlzLmxvYWRDYWxsYmFja3NfPVtdfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmdldFBhdGhOYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXRoLHQ9ZS5pbmRleE9mKFwiOi8vXCIpO3JldHVybiAwPD10JiYwPD0odD0oZT1lLnN1YnN0cmluZyh0KzMpKS5pbmRleE9mKFwiL1wiKSkmJihlPWUuc3Vic3RyaW5nKHQrMSkpLGV9LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUub25Mb2FkPWZ1bmN0aW9uKGUpe3RoaXMubG9hZGVkXz9lKCk6dGhpcy5sb2FkQ2FsbGJhY2tzXy5wdXNoKGUpfSxnb29nLkRlcGVuZGVuY3kucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3RoaXMubG9hZGVkXz0hMDt2YXIgZT10aGlzLmxvYWRDYWxsYmFja3NfO3RoaXMubG9hZENhbGxiYWNrc189W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfSxnb29nLkRlcGVuZGVuY3kuZGVmZXJfPSExLGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF89e30sZ29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzIpO3JldHVybiBnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW3RdPWUsdH0sZ29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja189ZnVuY3Rpb24oZSl7ZGVsZXRlIGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja01hcF9bZV19LGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja189ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrTWFwXykpdGhyb3cgRXJyb3IoXCJDYWxsYmFjayBrZXkgXCIrZStcIiBkb2VzIG5vdCBleGlzdCAod2FzIGJhc2UuanMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlPykuXCIpO2Zvcih2YXIgbz1nb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tNYXBfW2VdLHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspci5wdXNoKGFyZ3VtZW50c1tuXSk7by5hcHBseSh2b2lkIDAscil9LGdvb2cuRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKHRoaXMucGF0aCk/ZS5sb2FkZWQoKTplLnBhdXNlKCk7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgdD1nb29nLmdsb2JhbC5kb2N1bWVudDtpZihcImNvbXBsZXRlXCI9PXQucmVhZHlTdGF0ZSYmIWdvb2cuRU5BQkxFX0NIUk9NRV9BUFBfU0FGRV9TQ1JJUFRfTE9BRElORyl7aWYoL1xcYmRlcHMuanMkLy50ZXN0KHRoaXMucGF0aCkpcmV0dXJuIHZvaWQgZS5sb2FkZWQoKTt0aHJvdyBFcnJvcignQ2Fubm90IHdyaXRlIFwiJyt0aGlzLnBhdGgrJ1wiIGFmdGVyIGRvY3VtZW50IGxvYWQnKX1pZighZ29vZy5FTkFCTEVfQ0hST01FX0FQUF9TQUZFX1NDUklQVF9MT0FESU5HJiZnb29nLmlzRG9jdW1lbnRMb2FkaW5nXygpKXt2YXIgbz1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKHQpe2dvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8mJlwiY29tcGxldGVcIiE9dC5yZWFkeVN0YXRlfHwoZ29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18obyksZS5sb2FkZWQoKSl9KSkscj0hZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmZ29vZy5nZXRTY3JpcHROb25jZSgpPycgbm9uY2U9XCInK2dvb2cuZ2V0U2NyaXB0Tm9uY2UoKSsnXCInOlwiXCI7cj0nPHNjcmlwdCBzcmM9XCInK3RoaXMucGF0aCsnXCIgJysoZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXz9cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiOlwib25sb2FkXCIpK1wiPVxcXCJnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKCdcIitvKydcXCcsIHRoaXMpXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiICcrKGdvb2cuRGVwZW5kZW5jeS5kZWZlcl8/XCJkZWZlclwiOlwiXCIpK3IrXCI+PFxcL3NjcmlwdD5cIix0LndyaXRlKGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZUhUTUwocik6cil9ZWxzZXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5kZWZlcj1nb29nLkRlcGVuZGVuY3kuZGVmZXJfLG4uYXN5bmM9ITEsbi50eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIsKHI9Z29vZy5nZXRTY3JpcHROb25jZSgpKSYmbi5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLHIpLGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV8/KGUucGF1c2UoKSxuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1wibG9hZGVkXCIhPW4ucmVhZHlTdGF0ZSYmXCJjb21wbGV0ZVwiIT1uLnJlYWR5U3RhdGV8fChlLmxvYWRlZCgpLGUucmVzdW1lKCkpfSk6bi5vbmxvYWQ9ZnVuY3Rpb24oKXtuLm9ubG9hZD1udWxsLGUubG9hZGVkKCl9LG4uc3JjPWdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfP2dvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfLmNyZWF0ZVNjcmlwdFVSTCh0aGlzLnBhdGgpOnRoaXMucGF0aCx0LmhlYWQuYXBwZW5kQ2hpbGQobil9fWVsc2UgZ29vZy5sb2dUb0NvbnNvbGVfKFwiQ2Fubm90IHVzZSBkZWZhdWx0IGRlYnVnIGxvYWRlciBvdXRzaWRlIG9mIEhUTUwgZG9jdW1lbnRzLlwiKSxcImRlcHMuanNcIj09dGhpcy5yZWxhdGl2ZVBhdGg/KGdvb2cubG9nVG9Db25zb2xlXyhcIkNvbnNpZGVyIHNldHRpbmcgQ0xPU1VSRV9JTVBPUlRfU0NSSVBUIGJlZm9yZSBsb2FkaW5nIGJhc2UuanMsIG9yIHNldHRpbmcgQ0xPU1VSRV9OT19ERVBTIHRvIHRydWUuXCIpLGUubG9hZGVkKCkpOmUucGF1c2UoKX0sZ29vZy5FczZNb2R1bGVEZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIsbil7Z29vZy5EZXBlbmRlbmN5LmNhbGwodGhpcyxlLHQsbyxyLG4pfSxnb29nLmluaGVyaXRzKGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeSxnb29nLkRlcGVuZGVuY3kpLGdvb2cuRXM2TW9kdWxlRGVwZW5kZW5jeS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtpZihnb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQpZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUKHRoaXMucGF0aCk/ZS5sb2FkZWQoKTplLnBhdXNlKCk7ZWxzZSBpZihnb29nLmluSHRtbERvY3VtZW50XygpKXt2YXIgdD1nb29nLmdsb2JhbC5kb2N1bWVudCxvPXRoaXM7aWYoZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSl7dmFyIHI9ZnVuY3Rpb24oZSxvKXtlPW8/JzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luPicrbytcIjxcXC9zY3JpcHQ+XCI6JzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luIHNyYz1cIicrZSsnXCI+PFxcL3NjcmlwdD4nLHQud3JpdGUoZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlSFRNTChlKTplKX07Z29vZy5EZXBlbmRlbmN5LmRlZmVyXz0hMH1lbHNlIHI9ZnVuY3Rpb24oZSxvKXt2YXIgcj10LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7ci5kZWZlcj0hMCxyLmFzeW5jPSExLHIudHlwZT1cIm1vZHVsZVwiLHIuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwhMCk7dmFyIG49Z29vZy5nZXRTY3JpcHROb25jZSgpO24mJnIuc2V0QXR0cmlidXRlKFwibm9uY2VcIixuKSxvP3IudGV4dENvbnRlbnQ9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlU2NyaXB0KG8pOm86ci5zcmM9Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8/Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV8uY3JlYXRlU2NyaXB0VVJMKGUpOmUsdC5oZWFkLmFwcGVuZENoaWxkKHIpfTt2YXIgbj1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKCl7Z29vZy5EZXBlbmRlbmN5LnVucmVnaXN0ZXJDYWxsYmFja18obiksZS5zZXRNb2R1bGVTdGF0ZShnb29nLk1vZHVsZVR5cGUuRVM2KX0pKTtyKHZvaWQgMCwnZ29vZy5EZXBlbmRlbmN5LmNhbGxiYWNrXyhcIicrbisnXCIpJykscih0aGlzLnBhdGgsdm9pZCAwKTt2YXIgcz1nb29nLkRlcGVuZGVuY3kucmVnaXN0ZXJDYWxsYmFja18oKGZ1bmN0aW9uKHQpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKHMpLGUucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzKG8ucGF0aCx0LGdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWUpfSkpO3Iodm9pZCAwLCdpbXBvcnQgKiBhcyBtIGZyb20gXCInK3RoaXMucGF0aCsnXCI7IGdvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK3MrJ1wiLCBtKScpO3ZhciBpPWdvb2cuRGVwZW5kZW5jeS5yZWdpc3RlckNhbGxiYWNrXygoZnVuY3Rpb24oKXtnb29nLkRlcGVuZGVuY3kudW5yZWdpc3RlckNhbGxiYWNrXyhpKSxlLmNsZWFyTW9kdWxlU3RhdGUoKSxlLmxvYWRlZCgpfSkpO3Iodm9pZCAwLCdnb29nLkRlcGVuZGVuY3kuY2FsbGJhY2tfKFwiJytpKydcIiknKX1lbHNlIGdvb2cubG9nVG9Db25zb2xlXyhcIkNhbm5vdCB1c2UgZGVmYXVsdCBkZWJ1ZyBsb2FkZXIgb3V0c2lkZSBvZiBIVE1MIGRvY3VtZW50cy5cIiksZS5wYXVzZSgpfSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe2dvb2cuRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKSx0aGlzLmNvbnRlbnRzXz1udWxsLHRoaXMubGF6eUZldGNoXz0hZ29vZy5pbkh0bWxEb2N1bWVudF8oKXx8IShcIm5vTW9kdWxlXCJpbiBnb29nLmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKX0sZ29vZy5pbmhlcml0cyhnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSxnb29nLkRlcGVuZGVuY3kpLGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyLmNvbnRlbnRzXz1nb29nLmxvYWRGaWxlU3luY18oci5wYXRoKSxyLmNvbnRlbnRzXyYmKHIuY29udGVudHNfPXIudHJhbnNmb3JtKHIuY29udGVudHNfKSxyLmNvbnRlbnRzXyYmKHIuY29udGVudHNfKz1cIlxcbi8vIyBzb3VyY2VVUkw9XCIrci5wYXRoKSl9ZnVuY3Rpb24gbygpe2lmKHIubGF6eUZldGNoXyYmdCgpLHIuY29udGVudHNfKXtuJiZlLnNldE1vZHVsZVN0YXRlKGdvb2cuTW9kdWxlVHlwZS5FUzYpO3RyeXt2YXIgbz1yLmNvbnRlbnRzXztpZihyLmNvbnRlbnRzXz1udWxsLGdvb2cuZ2xvYmFsRXZhbChvKSxuKXZhciBzPWdvb2cubW9kdWxlTG9hZGVyU3RhdGVfLm1vZHVsZU5hbWV9ZmluYWxseXtuJiZlLmNsZWFyTW9kdWxlU3RhdGUoKX1uJiZnb29nLmdsb2JhbC4kanNjb21wLnJlcXVpcmUuZW5zdXJlKFtyLmdldFBhdGhOYW1lKCldLChmdW5jdGlvbigpe2UucmVnaXN0ZXJFczZNb2R1bGVFeHBvcnRzKHIucGF0aCxnb29nLmdsb2JhbC4kanNjb21wLnJlcXVpcmUoci5nZXRQYXRoTmFtZSgpKSxzKX0pKSxlLmxvYWRlZCgpfX12YXIgcj10aGlzO2lmKGdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCl0KCksdGhpcy5jb250ZW50c18mJmdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVChcIlwiLHRoaXMuY29udGVudHNfKT8odGhpcy5jb250ZW50c189bnVsbCxlLmxvYWRlZCgpKTplLnBhdXNlKCk7ZWxzZXt2YXIgbj10aGlzLmxvYWRGbGFncy5tb2R1bGU9PWdvb2cuTW9kdWxlVHlwZS5FUzY7dGhpcy5sYXp5RmV0Y2hffHx0KCk7dmFyIHM9MTxlLnBlbmRpbmcoKS5sZW5ndGgsaT1zJiZnb29nLkRlYnVnTG9hZGVyXy5JU19PTERfSUVfO2lmKHM9Z29vZy5EZXBlbmRlbmN5LmRlZmVyXyYmKHN8fGdvb2cuaXNEb2N1bWVudExvYWRpbmdfKCkpLGl8fHMpZS5kZWZlcigoZnVuY3Rpb24oKXtvKCl9KSk7ZWxzZXt2YXIgYT1nb29nLmdsb2JhbC5kb2N1bWVudDtpZihpPWdvb2cuaW5IdG1sRG9jdW1lbnRfKCkmJlwiQWN0aXZlWE9iamVjdFwiaW4gZ29vZy5nbG9iYWwsbiYmZ29vZy5pbkh0bWxEb2N1bWVudF8oKSYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKSYmIWkpe2dvb2cuRGVwZW5kZW5jeS5kZWZlcl89ITAsZS5wYXVzZSgpO3ZhciBnPWEub25yZWFkeXN0YXRlY2hhbmdlO2Eub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7XCJpbnRlcmFjdGl2ZVwiPT1hLnJlYWR5U3RhdGUmJihhLm9ucmVhZHlzdGF0ZWNoYW5nZT1nLG8oKSxlLnJlc3VtZSgpKSxnb29nLmlzRnVuY3Rpb24oZykmJmcuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWVsc2UhZ29vZy5EZWJ1Z0xvYWRlcl8uSVNfT0xEX0lFXyYmZ29vZy5pbkh0bWxEb2N1bWVudF8oKSYmZ29vZy5pc0RvY3VtZW50TG9hZGluZ18oKT9mdW5jdGlvbigpe3ZhciBlPWdvb2cuZ2xvYmFsLmRvY3VtZW50LHQ9Z29vZy5EZXBlbmRlbmN5LnJlZ2lzdGVyQ2FsbGJhY2tfKChmdW5jdGlvbigpe2dvb2cuRGVwZW5kZW5jeS51bnJlZ2lzdGVyQ2FsbGJhY2tfKHQpLG8oKX0pKSxyPSc8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4nK2dvb2cucHJvdGVjdFNjcmlwdFRhZ18oJ2dvb2cuRGVwZW5kZW5jeS5jYWxsYmFja18oXCInK3QrJ1wiKTsnKStcIjxcXC9zY3JpcHQ+XCI7ZS53cml0ZShnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXz9nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZXy5jcmVhdGVIVE1MKHIpOnIpfSgpOm8oKX19fSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe30sZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4scyl7Z29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kuY2FsbCh0aGlzLGUsdCxvLHIsbiksdGhpcy50cmFuc3BpbGVyPXN9LGdvb2cuaW5oZXJpdHMoZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeSxnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeSksZ29vZy5UcmFuc3BpbGVkRGVwZW5kZW5jeS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zcGlsZXIudHJhbnNwaWxlKGUsdGhpcy5nZXRQYXRoTmFtZSgpKX0sZ29vZy5QcmVUcmFuc3BpbGVkRXM2TW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4pe2dvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5LmNhbGwodGhpcyxlLHQsbyxyLG4pfSxnb29nLmluaGVyaXRzKGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3ksZ29vZy5UcmFuc2Zvcm1lZERlcGVuZGVuY3kpLGdvb2cuUHJlVHJhbnNwaWxlZEVzNk1vZHVsZURlcGVuZGVuY3kucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZ29vZy5Hb29nTW9kdWxlRGVwZW5kZW5jeT1mdW5jdGlvbihlLHQsbyxyLG4scyxpKXtnb29nLlRyYW5zZm9ybWVkRGVwZW5kZW5jeS5jYWxsKHRoaXMsZSx0LG8scixuKSx0aGlzLm5lZWRzVHJhbnNwaWxlXz1zLHRoaXMudHJhbnNwaWxlcl89aX0sZ29vZy5pbmhlcml0cyhnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5LGdvb2cuVHJhbnNmb3JtZWREZXBlbmRlbmN5KSxnb29nLkdvb2dNb2R1bGVEZXBlbmRlbmN5LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVlZHNUcmFuc3BpbGVfJiYoZT10aGlzLnRyYW5zcGlsZXJfLnRyYW5zcGlsZShlLHRoaXMuZ2V0UGF0aE5hbWUoKSkpLGdvb2cuTE9BRF9NT0RVTEVfVVNJTkdfRVZBTCYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC5KU09OKT9cImdvb2cubG9hZE1vZHVsZShcIitnb29nLmdsb2JhbC5KU09OLnN0cmluZ2lmeShlK1wiXFxuLy8jIHNvdXJjZVVSTD1cIit0aGlzLnBhdGgrXCJcXG5cIikrXCIpO1wiOidnb29nLmxvYWRNb2R1bGUoZnVuY3Rpb24oZXhwb3J0cykge1widXNlIHN0cmljdFwiOycrZStcIlxcbjtyZXR1cm4gZXhwb3J0c30pO1xcbi8vIyBzb3VyY2VVUkw9XCIrdGhpcy5wYXRoK1wiXFxuXCJ9LGdvb2cuRGVidWdMb2FkZXJfLklTX09MRF9JRV89IShnb29nLmdsb2JhbC5hdG9ifHwhZ29vZy5nbG9iYWwuZG9jdW1lbnR8fCFnb29nLmdsb2JhbC5kb2N1bWVudC5hbGwpLGdvb2cuRGVidWdMb2FkZXJfLnByb3RvdHlwZS5hZGREZXBlbmRlbmN5PWZ1bmN0aW9uKGUsdCxvLHIpe3Q9dHx8W10sZT1lLnJlcGxhY2UoL1xcXFwvZyxcIi9cIik7dmFyIG49Z29vZy5ub3JtYWxpemVQYXRoXyhnb29nLmJhc2VQYXRoK2UpO2ZvcihyJiZcImJvb2xlYW5cIiE9dHlwZW9mIHJ8fChyPXI/e21vZHVsZTpnb29nLk1vZHVsZVR5cGUuR09PR306e30pLG89dGhpcy5mYWN0b3J5Xy5jcmVhdGVEZXBlbmRlbmN5KG4sZSx0LG8scixnb29nLnRyYW5zcGlsZXJfLm5lZWRzVHJhbnNwaWxlKHIubGFuZ3x8XCJlczNcIixyLm1vZHVsZSkpLHRoaXMuZGVwZW5kZW5jaWVzX1tuXT1vLG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmlkVG9QYXRoX1t0W29dXT1uO3RoaXMuaWRUb1BhdGhfW2VdPW59LGdvb2cuRGVwZW5kZW5jeUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dGhpcy50cmFuc3BpbGVyPWV9LGdvb2cuRGVwZW5kZW5jeUZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURlcGVuZGVuY3k9ZnVuY3Rpb24oZSx0LG8scixuLHMpe3JldHVybiBuLm1vZHVsZT09Z29vZy5Nb2R1bGVUeXBlLkdPT0c/bmV3IGdvb2cuR29vZ01vZHVsZURlcGVuZGVuY3koZSx0LG8scixuLHMsdGhpcy50cmFuc3BpbGVyKTpzP25ldyBnb29nLlRyYW5zcGlsZWREZXBlbmRlbmN5KGUsdCxvLHIsbix0aGlzLnRyYW5zcGlsZXIpOm4ubW9kdWxlPT1nb29nLk1vZHVsZVR5cGUuRVM2P1wibmV2ZXJcIj09Z29vZy5UUkFOU1BJTEUmJmdvb2cuQVNTVU1FX0VTX01PRFVMRVNfVFJBTlNQSUxFRD9uZXcgZ29vZy5QcmVUcmFuc3BpbGVkRXM2TW9kdWxlRGVwZW5kZW5jeShlLHQsbyxyLG4pOm5ldyBnb29nLkVzNk1vZHVsZURlcGVuZGVuY3koZSx0LG8scixuKTpuZXcgZ29vZy5EZXBlbmRlbmN5KGUsdCxvLHIsbil9LGdvb2cuZGVidWdMb2FkZXJfPW5ldyBnb29nLkRlYnVnTG9hZGVyXyxnb29nLmxvYWRDbG9zdXJlRGVwcz1mdW5jdGlvbigpe2dvb2cuZGVidWdMb2FkZXJfLmxvYWRDbG9zdXJlRGVwcygpfSxnb29nLnNldERlcGVuZGVuY3lGYWN0b3J5PWZ1bmN0aW9uKGUpe2dvb2cuZGVidWdMb2FkZXJfLnNldERlcGVuZGVuY3lGYWN0b3J5KGUpfSxnb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFN8fGdvb2cuZGVidWdMb2FkZXJfLmxvYWRDbG9zdXJlRGVwcygpLGdvb2cuYm9vdHN0cmFwPWZ1bmN0aW9uKGUsdCl7Z29vZy5kZWJ1Z0xvYWRlcl8uYm9vdHN0cmFwKGUsdCl9KSxnb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUU9XCJcIixnb29nLmlkZW50aXR5Xz1mdW5jdGlvbihlKXtyZXR1cm4gZX0sZ29vZy5jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3k9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbDtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgVHJ1c3RlZFR5cGVzfHwhVHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSlyZXR1cm4gdDt0cnl7dD1UcnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KGUse2NyZWF0ZUhUTUw6Z29vZy5pZGVudGl0eV8sY3JlYXRlU2NyaXB0Omdvb2cuaWRlbnRpdHlfLGNyZWF0ZVNjcmlwdFVSTDpnb29nLmlkZW50aXR5XyxjcmVhdGVVUkw6Z29vZy5pZGVudGl0eV99KX1jYXRjaChlKXtnb29nLmxvZ1RvQ29uc29sZV8oZS5tZXNzYWdlKX1yZXR1cm4gdH0sZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV89Z29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FP2dvb2cuY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KGdvb2cuVFJVU1RFRF9UWVBFU19QT0xJQ1lfTkFNRStcIiNiYXNlXCIpOm51bGwsZ29vZy5vYmplY3Q9e30sZ29vZy5vYmplY3QuaXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPWUmJnQhPXR9LGdvb2cub2JqZWN0LmZvckVhY2g9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgciBpbiBlKXQuY2FsbChvLGVbcl0scixlKX0sZ29vZy5vYmplY3QuZmlsdGVyPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcixuPXt9O2ZvcihyIGluIGUpdC5jYWxsKG8sZVtyXSxyLGUpJiYobltyXT1lW3JdKTtyZXR1cm4gbn0sZ29vZy5vYmplY3QubWFwPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcixuPXt9O2ZvcihyIGluIGUpbltyXT10LmNhbGwobyxlW3JdLHIsZSk7cmV0dXJuIG59LGdvb2cub2JqZWN0LnNvbWU9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgciBpbiBlKWlmKHQuY2FsbChvLGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX0sZ29vZy5vYmplY3QuZXZlcnk9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgciBpbiBlKWlmKCF0LmNhbGwobyxlW3JdLHIsZSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cub2JqZWN0LmdldENvdW50PWZ1bmN0aW9uKGUpe3ZhciB0LG89MDtmb3IodCBpbiBlKW8rKztyZXR1cm4gb30sZ29vZy5vYmplY3QuZ2V0QW55S2V5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiB0fSxnb29nLm9iamVjdC5nZXRBbnlWYWx1ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlyZXR1cm4gZVt0XX0sZ29vZy5vYmplY3QuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5vYmplY3QuY29udGFpbnNWYWx1ZShlLHQpfSxnb29nLm9iamVjdC5nZXRWYWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQsbz1bXSxyPTA7Zm9yKHQgaW4gZSlvW3IrK109ZVt0XTtyZXR1cm4gb30sZ29vZy5vYmplY3QuZ2V0S2V5cz1mdW5jdGlvbihlKXt2YXIgdCxvPVtdLHI9MDtmb3IodCBpbiBlKW9bcisrXT10O3JldHVybiBvfSxnb29nLm9iamVjdC5nZXRWYWx1ZUJ5S2V5cz1mdW5jdGlvbihlLHQpe3ZhciBvPWdvb2cuaXNBcnJheUxpa2UodCkscj1vP3Q6YXJndW1lbnRzO2ZvcihvPW8/MDoxO288ci5sZW5ndGg7bysrKXtpZihudWxsPT1lKXJldHVybjtlPWVbcltvXV19cmV0dXJuIGV9LGdvb2cub2JqZWN0LmNvbnRhaW5zS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPT1lJiZ0IGluIGV9LGdvb2cub2JqZWN0LmNvbnRhaW5zVmFsdWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gZSlpZihlW29dPT10KXJldHVybiEwO3JldHVybiExfSxnb29nLm9iamVjdC5maW5kS2V5PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHIgaW4gZSlpZih0LmNhbGwobyxlW3JdLHIsZSkpcmV0dXJuIHJ9LGdvb2cub2JqZWN0LmZpbmRWYWx1ZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuKHQ9Z29vZy5vYmplY3QuZmluZEtleShlLHQsbykpJiZlW3RdfSxnb29nLm9iamVjdC5pc0VtcHR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnb29nLm9iamVjdC5jbGVhcj1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlkZWxldGUgZVt0XX0sZ29vZy5vYmplY3QucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG87cmV0dXJuKG89dCBpbiBlKSYmZGVsZXRlIGVbdF0sb30sZ29vZy5vYmplY3QuYWRkPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsIT09ZSYmdCBpbiBlKXRocm93IEVycm9yKCdUaGUgb2JqZWN0IGFscmVhZHkgY29udGFpbnMgdGhlIGtleSBcIicrdCsnXCInKTtnb29nLm9iamVjdC5zZXQoZSx0LG8pfSxnb29nLm9iamVjdC5nZXQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsIT09ZSYmdCBpbiBlP2VbdF06b30sZ29vZy5vYmplY3Quc2V0PWZ1bmN0aW9uKGUsdCxvKXtlW3RdPW99LGdvb2cub2JqZWN0LnNldElmVW5kZWZpbmVkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdCBpbiBlP2VbdF06ZVt0XT1vfSxnb29nLm9iamVjdC5zZXRXaXRoUmV0dXJuVmFsdWVJZk5vdFNldD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQgaW4gZT9lW3RdOihvPW8oKSxlW3RdPW8pfSxnb29nLm9iamVjdC5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gZSlpZighKG8gaW4gdCl8fGVbb10hPT10W29dKXJldHVybiExO2Zvcih2YXIgciBpbiB0KWlmKCEociBpbiBlKSlyZXR1cm4hMTtyZXR1cm4hMH0sZ29vZy5vYmplY3QuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIHQsbz17fTtmb3IodCBpbiBlKW9bdF09ZVt0XTtyZXR1cm4gb30sZ29vZy5vYmplY3QudW5zYWZlQ2xvbmU9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy50eXBlT2YoZSk7aWYoXCJvYmplY3RcIj09dHx8XCJhcnJheVwiPT10KXtpZihnb29nLmlzRnVuY3Rpb24oZS5jbG9uZSkpcmV0dXJuIGUuY2xvbmUoKTtmb3IodmFyIG8gaW4gdD1cImFycmF5XCI9PXQ/W106e30sZSl0W29dPWdvb2cub2JqZWN0LnVuc2FmZUNsb25lKGVbb10pO3JldHVybiB0fXJldHVybiBlfSxnb29nLm9iamVjdC50cmFuc3Bvc2U9ZnVuY3Rpb24oZSl7dmFyIHQsbz17fTtmb3IodCBpbiBlKW9bZVt0XV09dDtyZXR1cm4gb30sZ29vZy5vYmplY3QuUFJPVE9UWVBFX0ZJRUxEU189XCJjb25zdHJ1Y3RvciBoYXNPd25Qcm9wZXJ0eSBpc1Byb3RvdHlwZU9mIHByb3BlcnR5SXNFbnVtZXJhYmxlIHRvTG9jYWxlU3RyaW5nIHRvU3RyaW5nIHZhbHVlT2ZcIi5zcGxpdChcIiBcIiksZ29vZy5vYmplY3QuZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvLHIsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe2ZvcihvIGluIHI9YXJndW1lbnRzW25dKWVbb109cltvXTtmb3IodmFyIHM9MDtzPGdvb2cub2JqZWN0LlBST1RPVFlQRV9GSUVMRFNfLmxlbmd0aDtzKyspbz1nb29nLm9iamVjdC5QUk9UT1RZUEVfRklFTERTX1tzXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixvKSYmKGVbb109cltvXSl9fSxnb29nLm9iamVjdC5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDtpZigxPT10JiZnb29nLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gZ29vZy5vYmplY3QuY3JlYXRlLmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTtpZih0JTIpdGhyb3cgRXJyb3IoXCJVbmV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtmb3IodmFyIG89e30scj0wO3I8dDtyKz0yKW9bYXJndW1lbnRzW3JdXT1hcmd1bWVudHNbcisxXTtyZXR1cm4gb30sZ29vZy5vYmplY3QuY3JlYXRlU2V0PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMT09dCYmZ29vZy5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIGdvb2cub2JqZWN0LmNyZWF0ZVNldC5hcHBseShudWxsLGFyZ3VtZW50c1swXSk7Zm9yKHZhciBvPXt9LHI9MDtyPHQ7cisrKW9bYXJndW1lbnRzW3JdXT0hMDtyZXR1cm4gb30sZ29vZy5vYmplY3QuY3JlYXRlSW1tdXRhYmxlVmlldz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBPYmplY3QuaXNGcm96ZW4mJiFPYmplY3QuaXNGcm96ZW4oZSkmJih0PU9iamVjdC5jcmVhdGUoZSksT2JqZWN0LmZyZWV6ZSh0KSksdH0sZ29vZy5vYmplY3QuaXNJbW11dGFibGVWaWV3PWZ1bmN0aW9uKGUpe3JldHVybiEhT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oZSl9LGdvb2cub2JqZWN0LmdldEFsbFByb3BlcnR5TmFtZXM9ZnVuY3Rpb24oZSx0LG8pe2lmKCFlKXJldHVybltdO2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8IU9iamVjdC5nZXRQcm90b3R5cGVPZilyZXR1cm4gZ29vZy5vYmplY3QuZ2V0S2V5cyhlKTtmb3IodmFyIHI9e307ZSYmKGUhPT1PYmplY3QucHJvdG90eXBlfHx0KSYmKGUhPT1GdW5jdGlvbi5wcm90b3R5cGV8fG8pOyl7Zm9yKHZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLHM9MDtzPG4ubGVuZ3RoO3MrKylyW25bc11dPSEwO2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfXJldHVybiBnb29nLm9iamVjdC5nZXRLZXlzKHIpfSxnb29nLm9iamVjdC5nZXRTdXBlckNsYXNzPWZ1bmN0aW9uKGUpe3JldHVybihlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSkpJiZlLmNvbnN0cnVjdG9yfSxnb29nLmRlYnVnPXt9LGdvb2cuZGVidWcuRXJyb3I9ZnVuY3Rpb24oZSl7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxnb29nLmRlYnVnLkVycm9yKTtlbHNle3ZhciB0PUVycm9yKCkuc3RhY2s7dCYmKHRoaXMuc3RhY2s9dCl9ZSYmKHRoaXMubWVzc2FnZT1TdHJpbmcoZSkpLHRoaXMucmVwb3J0RXJyb3JUb1NlcnZlcj0hMH0sZ29vZy5pbmhlcml0cyhnb29nLmRlYnVnLkVycm9yLEVycm9yKSxnb29nLmRlYnVnLkVycm9yLnByb3RvdHlwZS5uYW1lPVwiQ3VzdG9tRXJyb3JcIixnb29nLmRvbT17fSxnb29nLmRvbS5Ob2RlVHlwZT17RUxFTUVOVDoxLEFUVFJJQlVURToyLFRFWFQ6MyxDREFUQV9TRUNUSU9OOjQsRU5USVRZX1JFRkVSRU5DRTo1LEVOVElUWTo2LFBST0NFU1NJTkdfSU5TVFJVQ1RJT046NyxDT01NRU5UOjgsRE9DVU1FTlQ6OSxET0NVTUVOVF9UWVBFOjEwLERPQ1VNRU5UX0ZSQUdNRU5UOjExLE5PVEFUSU9OOjEyfSxnb29nLmFzc2VydHM9e30sZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTPWdvb2cuREVCVUcsZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKGUsdCl7Z29vZy5kZWJ1Zy5FcnJvci5jYWxsKHRoaXMsZ29vZy5hc3NlcnRzLnN1YnNfKGUsdCkpLHRoaXMubWVzc2FnZVBhdHRlcm49ZX0sZ29vZy5pbmhlcml0cyhnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IsZ29vZy5kZWJ1Zy5FcnJvciksZ29vZy5hc3NlcnRzLkFzc2VydGlvbkVycm9yLnByb3RvdHlwZS5uYW1lPVwiQXNzZXJ0aW9uRXJyb3JcIixnb29nLmFzc2VydHMuREVGQVVMVF9FUlJPUl9IQU5ETEVSPWZ1bmN0aW9uKGUpe3Rocm93IGV9LGdvb2cuYXNzZXJ0cy5lcnJvckhhbmRsZXJfPWdvb2cuYXNzZXJ0cy5ERUZBVUxUX0VSUk9SX0hBTkRMRVIsZ29vZy5hc3NlcnRzLnN1YnNfPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVwiXCIscj0oZT1lLnNwbGl0KFwiJXNcIikpLmxlbmd0aC0xLG49MDtuPHI7bisrKW8rPWVbbl0rKG48dC5sZW5ndGg/dFtuXTpcIiVzXCIpO3JldHVybiBvK2Vbcl19LGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfPWZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPVwiQXNzZXJ0aW9uIGZhaWxlZFwiO2lmKG8pe24rPVwiOiBcIitvO3ZhciBzPXJ9ZWxzZSBlJiYobis9XCI6IFwiK2Uscz10KTtlPW5ldyBnb29nLmFzc2VydHMuQXNzZXJ0aW9uRXJyb3IoXCJcIituLHN8fFtdKSxnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXyhlKX0sZ29vZy5hc3NlcnRzLnNldEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJihnb29nLmFzc2VydHMuZXJyb3JIYW5kbGVyXz1lKX0sZ29vZy5hc3NlcnRzLmFzc2VydD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWUmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiXCIsbnVsbCx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEV4aXN0cz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmbnVsbD09ZSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCB0byBleGlzdDogJXMuXCIsW2VdLHQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxlfSxnb29nLmFzc2VydHMuZmFpbD1mdW5jdGlvbihlLHQpe2dvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmZ29vZy5hc3NlcnRzLmVycm9ySGFuZGxlcl8obmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIkZhaWx1cmVcIisoZT9cIjogXCIrZTpcIlwiKSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpKX0sZ29vZy5hc3NlcnRzLmFzc2VydE51bWJlcj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNOdW1iZXIoZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgbnVtYmVyIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNTdHJpbmcoZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgc3RyaW5nIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0Z1bmN0aW9uKGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGZ1bmN0aW9uIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydE9iamVjdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyYmIWdvb2cuaXNPYmplY3QoZSkmJmdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEFycmF5PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLkVOQUJMRV9BU1NFUlRTJiYhZ29vZy5pc0FycmF5KGUpJiZnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGFycmF5IGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEJvb2xlYW49ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMmJiFnb29nLmlzQm9vbGVhbihlKSYmZ29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCBib29sZWFuIGJ1dCBnb3QgJXM6ICVzLlwiLFtnb29nLnR5cGVPZihlKSxlXSx0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSksZX0sZ29vZy5hc3NlcnRzLmFzc2VydEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fGdvb2cuaXNPYmplY3QoZSkmJmUubm9kZVR5cGU9PWdvb2cuZG9tLk5vZGVUeXBlLkVMRU1FTlR8fGdvb2cuYXNzZXJ0cy5kb0Fzc2VydEZhaWx1cmVfKFwiRXhwZWN0ZWQgRWxlbWVudCBidXQgZ290ICVzOiAlcy5cIixbZ29vZy50eXBlT2YoZSksZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fGUgaW5zdGFuY2VvZiB0fHxnb29nLmFzc2VydHMuZG9Bc3NlcnRGYWlsdXJlXyhcIkV4cGVjdGVkIGluc3RhbmNlb2YgJXMgYnV0IGdvdCAlcy5cIixbZ29vZy5hc3NlcnRzLmdldFR5cGVfKHQpLGdvb2cuYXNzZXJ0cy5nZXRUeXBlXyhlKV0sbyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMykpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRGaW5pdGU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiFnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFN8fFwibnVtYmVyXCI9PXR5cGVvZiBlJiZpc0Zpbml0ZShlKXx8Z29vZy5hc3NlcnRzLmRvQXNzZXJ0RmFpbHVyZV8oXCJFeHBlY3RlZCAlcyB0byBiZSBhIGZpbml0ZSBudW1iZXIgYnV0IGl0IGlzIG5vdC5cIixbZV0sdCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLGV9LGdvb2cuYXNzZXJ0cy5hc3NlcnRPYmplY3RQcm90b3R5cGVJc0ludGFjdD1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBPYmplY3QucHJvdG90eXBlKWdvb2cuYXNzZXJ0cy5mYWlsKGUrXCIgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIGluIE9iamVjdC5wcm90b3R5cGUuXCIpfSxnb29nLmFzc2VydHMuZ2V0VHlwZV89ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBGdW5jdGlvbj9lLmRpc3BsYXlOYW1lfHxlLm5hbWV8fFwidW5rbm93biB0eXBlIG5hbWVcIjplIGluc3RhbmNlb2YgT2JqZWN0P2UuY29uc3RydWN0b3IuZGlzcGxheU5hbWV8fGUuY29uc3RydWN0b3IubmFtZXx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpOm51bGw9PT1lP1wibnVsbFwiOnR5cGVvZiBlfTt2YXIganNwYj17QmluYXJ5Q29uc3RhbnRzOnt9LENvbnN0QmluYXJ5TWVzc2FnZTpmdW5jdGlvbigpe30sQmluYXJ5TWVzc2FnZTpmdW5jdGlvbigpe319O2pzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZT17SU5WQUxJRDotMSxET1VCTEU6MSxGTE9BVDoyLElOVDY0OjMsVUlOVDY0OjQsSU5UMzI6NSxGSVhFRDY0OjYsRklYRUQzMjo3LEJPT0w6OCxTVFJJTkc6OSxHUk9VUDoxMCxNRVNTQUdFOjExLEJZVEVTOjEyLFVJTlQzMjoxMyxFTlVNOjE0LFNGSVhFRDMyOjE1LFNGSVhFRDY0OjE2LFNJTlQzMjoxNyxTSU5UNjQ6MTgsRkhBU0g2NDozMCxWSEFTSDY0OjMxfSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZT17SU5WQUxJRDotMSxWQVJJTlQ6MCxGSVhFRDY0OjEsREVMSU1JVEVEOjIsU1RBUlRfR1JPVVA6MyxFTkRfR1JPVVA6NCxGSVhFRDMyOjV9LGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZVRvV2lyZVR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQ9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlLG89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGU7c3dpdGNoKGUpe2Nhc2UgdC5JTlQzMjpjYXNlIHQuSU5UNjQ6Y2FzZSB0LlVJTlQzMjpjYXNlIHQuVUlOVDY0OmNhc2UgdC5TSU5UMzI6Y2FzZSB0LlNJTlQ2NDpjYXNlIHQuQk9PTDpjYXNlIHQuRU5VTTpjYXNlIHQuVkhBU0g2NDpyZXR1cm4gby5WQVJJTlQ7Y2FzZSB0LkRPVUJMRTpjYXNlIHQuRklYRUQ2NDpjYXNlIHQuU0ZJWEVENjQ6Y2FzZSB0LkZIQVNINjQ6cmV0dXJuIG8uRklYRUQ2NDtjYXNlIHQuU1RSSU5HOmNhc2UgdC5NRVNTQUdFOmNhc2UgdC5CWVRFUzpyZXR1cm4gby5ERUxJTUlURUQ7Y2FzZSB0LkZMT0FUOmNhc2UgdC5GSVhFRDMyOmNhc2UgdC5TRklYRUQzMjpyZXR1cm4gby5GSVhFRDMyO2RlZmF1bHQ6cmV0dXJuIG8uSU5WQUxJRH19LGpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSPS0xLGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfRVBTPTE0MDEyOTg0NjQzMjQ4MTdlLTYwLGpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUMzJfTUlOPTExNzU0OTQzNTA4MjIyODc1ZS01NCxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWD0zNDAyODIzNDY2Mzg1Mjg4NmUyMixqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X0VQUz01ZS0zMjQsanNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NSU49MjIyNTA3Mzg1ODUwNzIwMTRlLTMyNCxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWD0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIwPTEwNDg1NzYsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzIzPTgzODg2MDgsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxPTIxNDc0ODM2NDgsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyPTQyOTQ5NjcyOTYsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyPTQ1MDM1OTk2MjczNzA0OTYsanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzPTB4ODAwMDAwMDAwMDAwMDAwMCxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQ9MHgxMDAwMDAwMDAwMDAwMDAwMCxqc3BiLkJpbmFyeUNvbnN0YW50cy5aRVJPX0hBU0g9XCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIixnb29nLmFycmF5PXt9LGdvb2cuTkFUSVZFX0FSUkFZX1BST1RPVFlQRVM9Z29vZy5UUlVTVEVEX1NJVEUsZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OUz0yMDEyPGdvb2cuRkVBVFVSRVNFVF9ZRUFSLGdvb2cuYXJyYXkucGVlaz1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX0sZ29vZy5hcnJheS5sYXN0PWdvb2cuYXJyYXkucGVlayxnb29nLmFycmF5LmluZGV4T2Y9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5pbmRleE9mKT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyl7aWYobz1udWxsPT1vPzA6MD5vP01hdGgubWF4KDAsZS5sZW5ndGgrbyk6byxnb29nLmlzU3RyaW5nKGUpKXJldHVybiBnb29nLmlzU3RyaW5nKHQpJiYxPT10Lmxlbmd0aD9lLmluZGV4T2YodCxvKTotMTtmb3IoO288ZS5sZW5ndGg7bysrKWlmKG8gaW4gZSYmZVtvXT09PXQpcmV0dXJuIG87cmV0dXJuLTF9LGdvb2cuYXJyYXkubGFzdEluZGV4T2Y9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZik/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbnVsbD09bz9lLmxlbmd0aC0xOm8pfTpmdW5jdGlvbihlLHQsbyl7aWYoMD4obz1udWxsPT1vP2UubGVuZ3RoLTE6bykmJihvPU1hdGgubWF4KDAsZS5sZW5ndGgrbykpLGdvb2cuaXNTdHJpbmcoZSkpcmV0dXJuIGdvb2cuaXNTdHJpbmcodCkmJjE9PXQubGVuZ3RoP2UubGFzdEluZGV4T2YodCxvKTotMTtmb3IoOzA8PW87by0tKWlmKG8gaW4gZSYmZVtvXT09PXQpcmV0dXJuIG87cmV0dXJuLTF9LGdvb2cuYXJyYXkuZm9yRWFjaD1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmZvckVhY2gpP2Z1bmN0aW9uKGUsdCxvKXtnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLHM9MDtzPHI7cysrKXMgaW4gbiYmdC5jYWxsKG8sbltzXSxzLGUpfSxnb29nLmFycmF5LmZvckVhY2hSaWdodD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZTtmb3IoLS1yOzA8PXI7LS1yKXIgaW4gbiYmdC5jYWxsKG8sbltyXSxyLGUpfSxnb29nLmFycmF5LmZpbHRlcj1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmZpbHRlcik/ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSxBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyl7Zm9yKHZhciByPWUubGVuZ3RoLG49W10scz0wLGk9Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmUsYT0wO2E8cjthKyspaWYoYSBpbiBpKXt2YXIgZz1pW2FdO3QuY2FsbChvLGcsYSxlKSYmKG5bcysrXT1nKX1yZXR1cm4gbn0sZ29vZy5hcnJheS5tYXA9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5tYXApP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPUFycmF5KHIpLHM9Z29vZy5pc1N0cmluZyhlKT9lLnNwbGl0KFwiXCIpOmUsaT0wO2k8cjtpKyspaSBpbiBzJiYobltpXT10LmNhbGwobyxzW2ldLGksZSkpO3JldHVybiBufSxnb29nLmFycmF5LnJlZHVjZT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnJlZHVjZSk/ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLHImJih0PWdvb2cuYmluZCh0LHIpKSxBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoZSx0LG8pfTpmdW5jdGlvbihlLHQsbyxyKXt2YXIgbj1vO3JldHVybiBnb29nLmFycmF5LmZvckVhY2goZSwoZnVuY3Rpb24obyxzKXtuPXQuY2FsbChyLG4sbyxzLGUpfSkpLG59LGdvb2cuYXJyYXkucmVkdWNlUmlnaHQ9Z29vZy5OQVRJVkVfQVJSQVlfUFJPVE9UWVBFUyYmKGdvb2cuYXJyYXkuQVNTVU1FX05BVElWRV9GVU5DVElPTlN8fEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCk/ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9dCksciYmKHQ9Z29vZy5iaW5kKHQscikpLEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodC5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8scil7dmFyIG49bztyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoUmlnaHQoZSwoZnVuY3Rpb24obyxzKXtuPXQuY2FsbChyLG4sbyxzLGUpfSkpLG59LGdvb2cuYXJyYXkuc29tZT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLnNvbWUpP2Z1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChlLHQsbyl9OmZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1nb29nLmlzU3RyaW5nKGUpP2Uuc3BsaXQoXCJcIik6ZSxzPTA7czxyO3MrKylpZihzIGluIG4mJnQuY2FsbChvLG5bc10scyxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sZ29vZy5hcnJheS5ldmVyeT1nb29nLk5BVElWRV9BUlJBWV9QUk9UT1RZUEVTJiYoZ29vZy5hcnJheS5BU1NVTUVfTkFUSVZFX0ZVTkNUSU9OU3x8QXJyYXkucHJvdG90eXBlLmV2ZXJ5KT9mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKGUsdCxvKX06ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLHM9MDtzPHI7cysrKWlmKHMgaW4gbiYmIXQuY2FsbChvLG5bc10scyxlKSlyZXR1cm4hMTtyZXR1cm4hMH0sZ29vZy5hcnJheS5jb3VudD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9MDtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsbixzKXt0LmNhbGwobyxlLG4scykmJisrcn0pLG8pLHJ9LGdvb2cuYXJyYXkuZmluZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA+KHQ9Z29vZy5hcnJheS5maW5kSW5kZXgoZSx0LG8pKT9udWxsOmdvb2cuaXNTdHJpbmcoZSk/ZS5jaGFyQXQodCk6ZVt0XX0sZ29vZy5hcnJheS5maW5kSW5kZXg9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplLHM9MDtzPHI7cysrKWlmKHMgaW4gbiYmdC5jYWxsKG8sbltzXSxzLGUpKXJldHVybiBzO3JldHVybi0xfSxnb29nLmFycmF5LmZpbmRSaWdodD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA+KHQ9Z29vZy5hcnJheS5maW5kSW5kZXhSaWdodChlLHQsbykpP251bGw6Z29vZy5pc1N0cmluZyhlKT9lLmNoYXJBdCh0KTplW3RdfSxnb29nLmFycmF5LmZpbmRJbmRleFJpZ2h0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1lLmxlbmd0aCxuPWdvb2cuaXNTdHJpbmcoZSk/ZS5zcGxpdChcIlwiKTplO2ZvcigtLXI7MDw9cjtyLS0paWYociBpbiBuJiZ0LmNhbGwobyxuW3JdLHIsZSkpcmV0dXJuIHI7cmV0dXJuLTF9LGdvb2cuYXJyYXkuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDw9Z29vZy5hcnJheS5pbmRleE9mKGUsdCl9LGdvb2cuYXJyYXkuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4gMD09ZS5sZW5ndGh9LGdvb2cuYXJyYXkuY2xlYXI9ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaXNBcnJheShlKSlmb3IodmFyIHQ9ZS5sZW5ndGgtMTswPD10O3QtLSlkZWxldGUgZVt0XTtlLmxlbmd0aD0wfSxnb29nLmFycmF5Lmluc2VydD1mdW5jdGlvbihlLHQpe2dvb2cuYXJyYXkuY29udGFpbnMoZSx0KXx8ZS5wdXNoKHQpfSxnb29nLmFycmF5Lmluc2VydEF0PWZ1bmN0aW9uKGUsdCxvKXtnb29nLmFycmF5LnNwbGljZShlLG8sMCx0KX0sZ29vZy5hcnJheS5pbnNlcnRBcnJheUF0PWZ1bmN0aW9uKGUsdCxvKXtnb29nLnBhcnRpYWwoZ29vZy5hcnJheS5zcGxpY2UsZSxvLDApLmFwcGx5KG51bGwsdCl9LGdvb2cuYXJyYXkuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcjsyPT1hcmd1bWVudHMubGVuZ3RofHwwPihyPWdvb2cuYXJyYXkuaW5kZXhPZihlLG8pKT9lLnB1c2godCk6Z29vZy5hcnJheS5pbnNlcnRBdChlLHQscil9LGdvb2cuYXJyYXkucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG87cmV0dXJuKG89MDw9KHQ9Z29vZy5hcnJheS5pbmRleE9mKGUsdCkpKSYmZ29vZy5hcnJheS5yZW1vdmVBdChlLHQpLG99LGdvb2cuYXJyYXkucmVtb3ZlTGFzdD1mdW5jdGlvbihlLHQpe3JldHVybiAwPD0odD1nb29nLmFycmF5Lmxhc3RJbmRleE9mKGUsdCkpJiYoZ29vZy5hcnJheS5yZW1vdmVBdChlLHQpLCEwKX0sZ29vZy5hcnJheS5yZW1vdmVBdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPWUubGVuZ3RoKSwxPT1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoZSx0LDEpLmxlbmd0aH0sZ29vZy5hcnJheS5yZW1vdmVJZj1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA8PSh0PWdvb2cuYXJyYXkuZmluZEluZGV4KGUsdCxvKSkmJihnb29nLmFycmF5LnJlbW92ZUF0KGUsdCksITApfSxnb29nLmFycmF5LnJlbW92ZUFsbElmPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj0wO3JldHVybiBnb29nLmFycmF5LmZvckVhY2hSaWdodChlLChmdW5jdGlvbihuLHMpe3QuY2FsbChvLG4scyxlKSYmZ29vZy5hcnJheS5yZW1vdmVBdChlLHMpJiZyKyt9KSkscn0sZ29vZy5hcnJheS5jb25jYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sYXJndW1lbnRzKX0sZ29vZy5hcnJheS5qb2luPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyl9LGdvb2cuYXJyYXkudG9BcnJheT1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigwPHQpe2Zvcih2YXIgbz1BcnJheSh0KSxyPTA7cjx0O3IrKylvW3JdPWVbcl07cmV0dXJuIG99cmV0dXJuW119LGdvb2cuYXJyYXkuY2xvbmU9Z29vZy5hcnJheS50b0FycmF5LGdvb2cuYXJyYXkuZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7dmFyIHI9YXJndW1lbnRzW29dO2lmKGdvb2cuaXNBcnJheUxpa2Uocikpe3ZhciBuPWUubGVuZ3RofHwwLHM9ci5sZW5ndGh8fDA7ZS5sZW5ndGg9bitzO2Zvcih2YXIgaT0wO2k8cztpKyspZVtuK2ldPXJbaV19ZWxzZSBlLnB1c2gocil9fSxnb29nLmFycmF5LnNwbGljZT1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydChudWxsIT1lLmxlbmd0aCksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShlLGdvb2cuYXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKX0sZ29vZy5hcnJheS5zbGljZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLDI+PWFyZ3VtZW50cy5sZW5ndGg/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSx0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLHQsbyl9LGdvb2cuYXJyYXkucmVtb3ZlRHVwbGljYXRlcz1mdW5jdGlvbihlLHQsbyl7dD10fHxlO3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmlzT2JqZWN0KGUpP1wib1wiK2dvb2cuZ2V0VWlkKGUpOih0eXBlb2YgZSkuY2hhckF0KDApK2V9O289b3x8cixyPXt9O2Zvcih2YXIgbj0wLHM9MDtzPGUubGVuZ3RoOyl7dmFyIGk9ZVtzKytdLGE9byhpKTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixhKXx8KHJbYV09ITAsdFtuKytdPWkpfXQubGVuZ3RoPW59LGdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfKGUsb3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZSwhMSx0KX0sZ29vZy5hcnJheS5iaW5hcnlTZWxlY3Q9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmFycmF5LmJpbmFyeVNlYXJjaF8oZSx0LCEwLHZvaWQgMCxvKX0sZ29vZy5hcnJheS5iaW5hcnlTZWFyY2hfPWZ1bmN0aW9uKGUsdCxvLHIsbil7Zm9yKHZhciBzLGk9MCxhPWUubGVuZ3RoO2k8YTspe3ZhciBnPWkrYT4+MSxwPW8/dC5jYWxsKG4sZVtnXSxnLGUpOnQocixlW2ddKTswPHA/aT1nKzE6KGE9ZyxzPSFwKX1yZXR1cm4gcz9pOn5pfSxnb29nLmFycmF5LnNvcnQ9ZnVuY3Rpb24oZSx0KXtlLnNvcnQodHx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZSl9LGdvb2cuYXJyYXkuc3RhYmxlU29ydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1BcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW9bcl09e2luZGV4OnIsdmFsdWU6ZVtyXX07dmFyIG49dHx8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IoZ29vZy5hcnJheS5zb3J0KG8sKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZS52YWx1ZSx0LnZhbHVlKXx8ZS5pbmRleC10LmluZGV4fSkpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPW9bcl0udmFsdWV9LGdvb2cuYXJyYXkuc29ydEJ5S2V5PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1vfHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2dvb2cuYXJyYXkuc29ydChlLChmdW5jdGlvbihlLG8pe3JldHVybiByKHQoZSksdChvKSl9KSl9LGdvb2cuYXJyYXkuc29ydE9iamVjdHNCeUtleT1mdW5jdGlvbihlLHQsbyl7Z29vZy5hcnJheS5zb3J0QnlLZXkoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19KSxvKX0sZ29vZy5hcnJheS5pc1NvcnRlZD1mdW5jdGlvbihlLHQsbyl7dD10fHxnb29nLmFycmF5LmRlZmF1bHRDb21wYXJlO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10KGVbci0xXSxlW3JdKTtpZigwPG58fDA9PW4mJm8pcmV0dXJuITF9cmV0dXJuITB9LGdvb2cuYXJyYXkuZXF1YWxzPWZ1bmN0aW9uKGUsdCxvKXtpZighZ29vZy5pc0FycmF5TGlrZShlKXx8IWdvb2cuaXNBcnJheUxpa2UodCl8fGUubGVuZ3RoIT10Lmxlbmd0aClyZXR1cm4hMTt2YXIgcj1lLmxlbmd0aDtvPW98fGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmVFcXVhbGl0eTtmb3IodmFyIG49MDtuPHI7bisrKWlmKCFvKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9LGdvb2cuYXJyYXkuY29tcGFyZTM9ZnVuY3Rpb24oZSx0LG8pe289b3x8Z29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZTtmb3IodmFyIHI9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpLG49MDtuPHI7bisrKXt2YXIgcz1vKGVbbl0sdFtuXSk7aWYoMCE9cylyZXR1cm4gc31yZXR1cm4gZ29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZShlLmxlbmd0aCx0Lmxlbmd0aCl9LGdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT50PzE6ZTx0Py0xOjB9LGdvb2cuYXJyYXkuaW52ZXJzZURlZmF1bHRDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuLWdvb2cuYXJyYXkuZGVmYXVsdENvbXBhcmUoZSx0KX0sZ29vZy5hcnJheS5kZWZhdWx0Q29tcGFyZUVxdWFsaXR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fSxnb29nLmFycmF5LmJpbmFyeUluc2VydD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA+KG89Z29vZy5hcnJheS5iaW5hcnlTZWFyY2goZSx0LG8pKSYmKGdvb2cuYXJyYXkuaW5zZXJ0QXQoZSx0LC0obysxKSksITApfSxnb29nLmFycmF5LmJpbmFyeVJlbW92ZT1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIDA8PSh0PWdvb2cuYXJyYXkuYmluYXJ5U2VhcmNoKGUsdCxvKSkmJmdvb2cuYXJyYXkucmVtb3ZlQXQoZSx0KX0sZ29vZy5hcnJheS5idWNrZXQ9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBzPWVbbl0saT10LmNhbGwobyxzLG4sZSk7Z29vZy5pc0RlZihpKSYmKHJbaV18fChyW2ldPVtdKSkucHVzaChzKX1yZXR1cm4gcn0sZ29vZy5hcnJheS50b09iamVjdD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9e307cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChlLChmdW5jdGlvbihuLHMpe3JbdC5jYWxsKG8sbixzLGUpXT1ufSkpLHJ9LGdvb2cuYXJyYXkucmFuZ2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPVtdLG49MCxzPWU7aWYodm9pZCAwIT09dCYmKG49ZSxzPXQpLDA+KG89b3x8MSkqKHMtbikpcmV0dXJuW107aWYoMDxvKWZvcihlPW47ZTxzO2UrPW8pci5wdXNoKGUpO2Vsc2UgZm9yKGU9bjtlPnM7ZSs9bylyLnB1c2goZSk7cmV0dXJuIHJ9LGdvb2cuYXJyYXkucmVwZWF0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLHI9MDtyPHQ7cisrKW9bcl09ZTtyZXR1cm4gb30sZ29vZy5hcnJheS5mbGF0dGVuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTA7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl7dmFyIHI9YXJndW1lbnRzW29dO2lmKGdvb2cuaXNBcnJheShyKSlmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rPTgxOTIpe3ZhciBzPWdvb2cuYXJyYXkuc2xpY2UocixuLG4rODE5Mik7cz1nb29nLmFycmF5LmZsYXR0ZW4uYXBwbHkobnVsbCxzKTtmb3IodmFyIGk9MDtpPHMubGVuZ3RoO2krKyl0LnB1c2goc1tpXSl9ZWxzZSB0LnB1c2gocil9cmV0dXJuIHR9LGdvb2cuYXJyYXkucm90YXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9ZS5sZW5ndGgpLGUubGVuZ3RoJiYoMDwodCU9ZS5sZW5ndGgpP0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGUsZS5zcGxpY2UoLXQsdCkpOjA+dCYmQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZSxlLnNwbGljZSgwLC10KSkpLGV9LGdvb2cuYXJyYXkubW92ZUl0ZW09ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxlLmxlbmd0aCksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1vJiZvPGUubGVuZ3RoKSx0PUFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChlLHQsMSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGUsbywwLHRbMF0pfSxnb29nLmFycmF5LnppcD1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIHQ9W10sbz1hcmd1bWVudHNbMF0ubGVuZ3RoLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWFyZ3VtZW50c1tyXS5sZW5ndGg8byYmKG89YXJndW1lbnRzW3JdLmxlbmd0aCk7Zm9yKHI9MDtyPG87cisrKXtmb3IodmFyIG49W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspbi5wdXNoKGFyZ3VtZW50c1tzXVtyXSk7dC5wdXNoKG4pfXJldHVybiB0fSxnb29nLmFycmF5LnNodWZmbGU9ZnVuY3Rpb24oZSx0KXt0PXR8fE1hdGgucmFuZG9tO2Zvcih2YXIgbz1lLmxlbmd0aC0xOzA8bztvLS0pe3ZhciByPU1hdGguZmxvb3IodCgpKihvKzEpKSxuPWVbb107ZVtvXT1lW3JdLGVbcl09bn19LGdvb2cuYXJyYXkuY29weUJ5SW5kZXg9ZnVuY3Rpb24oZSx0KXt2YXIgbz1bXTtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe28ucHVzaChlW3RdKX0pKSxvfSxnb29nLmFycmF5LmNvbmNhdE1hcD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXJyYXkuY29uY2F0LmFwcGx5KFtdLGdvb2cuYXJyYXkubWFwKGUsdCxvKSl9LGdvb2cuY3J5cHQ9e30sZ29vZy5jcnlwdC5zdHJpbmdUb0J5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbz0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZS5jaGFyQ29kZUF0KHIpOzI1NTxuJiYodFtvKytdPTI1NSZuLG4+Pj04KSx0W28rK109bn1yZXR1cm4gdH0sZ29vZy5jcnlwdC5ieXRlQXJyYXlUb1N0cmluZz1mdW5jdGlvbihlKXtpZig4MTkyPj1lLmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpO2Zvcih2YXIgdD1cIlwiLG89MDtvPGUubGVuZ3RoO28rPTgxOTIpe3ZhciByPWdvb2cuYXJyYXkuc2xpY2UoZSxvLG8rODE5Mik7dCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIpfXJldHVybiB0fSxnb29nLmNyeXB0LmJ5dGVBcnJheVRvSGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXJyYXkubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiAxPChlPWUudG9TdHJpbmcoMTYpKS5sZW5ndGg/ZTpcIjBcIitlfSkpLmpvaW4odHx8XCJcIil9LGdvb2cuY3J5cHQuaGV4VG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPT1lLmxlbmd0aCUyLFwiS2V5IHN0cmluZyBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiAyXCIpO2Zvcih2YXIgdD1bXSxvPTA7bzxlLmxlbmd0aDtvKz0yKXQucHVzaChwYXJzZUludChlLnN1YnN0cmluZyhvLG8rMiksMTYpKTtyZXR1cm4gdH0sZ29vZy5jcnlwdC5zdHJpbmdUb1V0ZjhCeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckNvZGVBdChyKTsxMjg+bj90W28rK109bjooMjA0OD5uP3RbbysrXT1uPj42fDE5MjooNTUyOTY9PSg2NDUxMiZuKSYmcisxPGUubGVuZ3RoJiY1NjMyMD09KDY0NTEyJmUuY2hhckNvZGVBdChyKzEpKT8obj02NTUzNisoKDEwMjMmbik8PDEwKSsoMTAyMyZlLmNoYXJDb2RlQXQoKytyKSksdFtvKytdPW4+PjE4fDI0MCx0W28rK109bj4+MTImNjN8MTI4KTp0W28rK109bj4+MTJ8MjI0LHRbbysrXT1uPj42JjYzfDEyOCksdFtvKytdPTYzJm58MTI4KX1yZXR1cm4gdH0sZ29vZy5jcnlwdC51dGY4Qnl0ZUFycmF5VG9TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG89MCxyPTA7bzxlLmxlbmd0aDspe3ZhciBuPWVbbysrXTtpZigxMjg+bil0W3IrK109U3RyaW5nLmZyb21DaGFyQ29kZShuKTtlbHNlIGlmKDE5MTxuJiYyMjQ+bil7dmFyIHM9ZVtvKytdO3RbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZuKTw8Nnw2MyZzKX1lbHNlIGlmKDIzOTxuJiYzNjU+bil7cz1lW28rK107dmFyIGk9ZVtvKytdO249KCg3Jm4pPDwxOHwoNjMmcyk8PDEyfCg2MyZpKTw8Nnw2MyZlW28rK10pLTY1NTM2LHRbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhuPj4xMCkpLHRbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJm4pKX1lbHNlIHM9ZVtvKytdLGk9ZVtvKytdLHRbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZuKTw8MTJ8KDYzJnMpPDw2fDYzJmkpfXJldHVybiB0LmpvaW4oXCJcIil9LGdvb2cuY3J5cHQueG9yQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydChlLmxlbmd0aD09dC5sZW5ndGgsXCJYT1IgYXJyYXkgbGVuZ3RocyBtdXN0IG1hdGNoXCIpO2Zvcih2YXIgbz1bXSxyPTA7cjxlLmxlbmd0aDtyKyspby5wdXNoKGVbcl1edFtyXSk7cmV0dXJuIG99LGdvb2cuZG9tLmFzc2VydHM9e30sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uPWZ1bmN0aW9uKGUpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIHQ9Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfKGUpO3QmJighZXx8IShlIGluc3RhbmNlb2YgdC5Mb2NhdGlvbikmJmUgaW5zdGFuY2VvZiB0LkVsZW1lbnQpJiZnb29nLmFzc2VydHMuZmFpbChcIkFyZ3VtZW50IGlzIG5vdCBhIExvY2F0aW9uIChvciBhIG5vbi1FbGVtZW50IG1vY2spOyBnb3Q6ICVzXCIsZ29vZy5kb20uYXNzZXJ0cy5kZWJ1Z1N0cmluZ0ZvclR5cGVfKGUpKX1yZXR1cm4gZX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXz1mdW5jdGlvbihlLHQpe2lmKGdvb2cuYXNzZXJ0cy5FTkFCTEVfQVNTRVJUUyl7dmFyIG89Z29vZy5kb20uYXNzZXJ0cy5nZXRXaW5kb3dfKGUpO28mJnZvaWQgMCE9PW9bdF0mJihlJiYoZSBpbnN0YW5jZW9mIG9bdF18fCEoZSBpbnN0YW5jZW9mIG8uTG9jYXRpb258fGUgaW5zdGFuY2VvZiBvLkVsZW1lbnQpKXx8Z29vZy5hc3NlcnRzLmZhaWwoXCJBcmd1bWVudCBpcyBub3QgYSAlcyAob3IgYSBub24tRWxlbWVudCwgbm9uLUxvY2F0aW9uIG1vY2spOyBnb3Q6ICVzXCIsdCxnb29nLmRvbS5hc3NlcnRzLmRlYnVnU3RyaW5nRm9yVHlwZV8oZSkpKX1yZXR1cm4gZX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBbmNob3JFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MQW5jaG9yRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxCdXR0b25FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MQnV0dG9uRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxMaW5rRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTExpbmtFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEltYWdlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTEltYWdlRWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBdWRpb0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxBdWRpb0VsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MVmlkZW9FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MVmlkZW9FbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElucHV0RWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTElucHV0RWxlbWVudFwiKX0sZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxUZXh0QXJlYUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxUZXh0QXJlYUVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQ2FudmFzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0VsZW1lbnRUeXBlXyhlLFwiSFRNTENhbnZhc0VsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRW1iZWRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MRW1iZWRFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEZvcm1FbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MRm9ybUVsZW1lbnRcIil9LGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MRnJhbWVFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzRWxlbWVudFR5cGVfKGUsXCJIVE1MRnJhbWVFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTElGcmFtZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxJRnJhbWVFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTE9iamVjdEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxPYmplY3RFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTFNjcmlwdEVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNFbGVtZW50VHlwZV8oZSxcIkhUTUxTY3JpcHRFbGVtZW50XCIpfSxnb29nLmRvbS5hc3NlcnRzLmRlYnVnU3RyaW5nRm9yVHlwZV89ZnVuY3Rpb24oZSl7aWYoIWdvb2cuaXNPYmplY3QoZSkpcmV0dXJuIHZvaWQgMD09PWU/XCJ1bmRlZmluZWRcIjpudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZTt0cnl7cmV0dXJuIGUuY29uc3RydWN0b3IuZGlzcGxheU5hbWV8fGUuY29uc3RydWN0b3IubmFtZXx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWNhdGNoKGUpe3JldHVyblwiPG9iamVjdCBjb3VsZCBub3QgYmUgc3RyaW5naWZpZWQ+XCJ9fSxnb29nLmRvbS5hc3NlcnRzLmdldFdpbmRvd189ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWUmJmUub3duZXJEb2N1bWVudCxvPXQmJih0LmRlZmF1bHRWaWV3fHx0LnBhcmVudFdpbmRvdyk7aWYoKG89b3x8Z29vZy5nbG9iYWwpLkVsZW1lbnQmJm8uTG9jYXRpb24pcmV0dXJuIG99Y2F0Y2goZSl7fXJldHVybiBudWxsfSxnb29nLmZ1bmN0aW9ucz17fSxnb29nLmZ1bmN0aW9ucy5jb25zdGFudD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19LGdvb2cuZnVuY3Rpb25zLkZBTFNFPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGdvb2cuZnVuY3Rpb25zLlRSVUU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZ29vZy5mdW5jdGlvbnMuTlVMTD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxnb29nLmZ1bmN0aW9ucy5pZGVudGl0eT1mdW5jdGlvbihlLHQpe3JldHVybiBlfSxnb29nLmZ1bmN0aW9ucy5lcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihlKX19LGdvb2cuZnVuY3Rpb25zLmZhaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgZX19LGdvb2cuZnVuY3Rpb25zLmxvY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHwwLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCx0KSl9fSxnb29nLmZ1bmN0aW9ucy5udGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1tlXX19LGdvb2cuZnVuY3Rpb25zLnBhcnRpYWxSaWdodD1mdW5jdGlvbihlLHQpe3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0LnB1c2guYXBwbHkodCxvKSxlLmFwcGx5KHRoaXMsdCl9fSxnb29nLmZ1bmN0aW9ucy53aXRoUmV0dXJuVmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5mdW5jdGlvbnMuc2VxdWVuY2UoZSxnb29nLmZ1bmN0aW9ucy5jb25zdGFudCh0KSl9LGdvb2cuZnVuY3Rpb25zLmVxdWFsVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIHQ/ZT09bzplPT09b319LGdvb2cuZnVuY3Rpb25zLmNvbXBvc2U9ZnVuY3Rpb24oZSx0KXt2YXIgbz1hcmd1bWVudHMscj1vLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZTtyJiYoZT1vW3ItMV0uYXBwbHkodGhpcyxhcmd1bWVudHMpKTtmb3IodmFyIHQ9ci0yOzA8PXQ7dC0tKWU9b1t0XS5jYWxsKHRoaXMsZSk7cmV0dXJuIGV9fSxnb29nLmZ1bmN0aW9ucy5zZXF1ZW5jZT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGUscj0wO3I8bztyKyspZT10W3JdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZX19LGdvb2cuZnVuY3Rpb25zLmFuZD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPG87ZSsrKWlmKCF0W2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm4hMTtyZXR1cm4hMH19LGdvb2cuZnVuY3Rpb25zLm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cyxvPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bztlKyspaWYodFtlXS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuITA7cmV0dXJuITF9fSxnb29nLmZ1bmN0aW9ucy5ub3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZ29vZy5mdW5jdGlvbnMuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG89ZnVuY3Rpb24oKXt9O3JldHVybiBvLnByb3RvdHlwZT1lLnByb3RvdHlwZSxvPW5ldyBvLGUuYXBwbHkobyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpLG99LGdvb2cuZnVuY3Rpb25zLkNBQ0hFX1JFVFVSTl9WQUxVRT0hMCxnb29nLmZ1bmN0aW9ucy5jYWNoZVJldHVyblZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0LG89ITE7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZnVuY3Rpb25zLkNBQ0hFX1JFVFVSTl9WQUxVRT8ob3x8KHQ9ZSgpLG89ITApLHQpOmUoKX19LGdvb2cuZnVuY3Rpb25zLm9uY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gZnVuY3Rpb24oKXtpZih0KXt2YXIgZT10O3Q9bnVsbCxlKCl9fX0sZ29vZy5mdW5jdGlvbnMuZGVib3VuY2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKG4pe2dvb2cuZ2xvYmFsLmNsZWFyVGltZW91dChyKTt2YXIgcz1hcmd1bWVudHM7cj1nb29nLmdsb2JhbC5zZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuYXBwbHkobyxzKX0pLHQpfX0sZ29vZy5mdW5jdGlvbnMudGhyb3R0bGU9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTAsbj0hMSxzPVtdLGk9ZnVuY3Rpb24oKXtyPTAsbiYmKG49ITEsYSgpKX0sYT1mdW5jdGlvbigpe3I9Z29vZy5nbG9iYWwuc2V0VGltZW91dChpLHQpLGUuYXBwbHkobyxzKX07cmV0dXJuIGZ1bmN0aW9uKGUpe3M9YXJndW1lbnRzLHI/bj0hMDphKCl9fSxnb29nLmZ1bmN0aW9ucy5yYXRlTGltaXQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPTAsbj1mdW5jdGlvbigpe3I9MH07cmV0dXJuIGZ1bmN0aW9uKHMpe3J8fChyPWdvb2cuZ2xvYmFsLnNldFRpbWVvdXQobix0KSxlLmFwcGx5KG8sYXJndW1lbnRzKSl9fSxnb29nLmRvbS5IdG1sRWxlbWVudD1mdW5jdGlvbigpe30sZ29vZy5kb20uVGFnTmFtZT1mdW5jdGlvbihlKXt0aGlzLnRhZ05hbWVfPWV9LGdvb2cuZG9tLlRhZ05hbWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFnTmFtZV99LGdvb2cuZG9tLlRhZ05hbWUuQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFcIiksZ29vZy5kb20uVGFnTmFtZS5BQkJSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQUJCUlwiKSxnb29nLmRvbS5UYWdOYW1lLkFDUk9OWU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBQ1JPTllNXCIpLGdvb2cuZG9tLlRhZ05hbWUuQUREUkVTUz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkFERFJFU1NcIiksZ29vZy5kb20uVGFnTmFtZS5BUFBMRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUFBMRVRcIiksZ29vZy5kb20uVGFnTmFtZS5BUkVBPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVJFQVwiKSxnb29nLmRvbS5UYWdOYW1lLkFSVElDTEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBUlRJQ0xFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQVNJREU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJBU0lERVwiKSxnb29nLmRvbS5UYWdOYW1lLkFVRElPPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQVVESU9cIiksZ29vZy5kb20uVGFnTmFtZS5CPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQlwiKSxnb29nLmRvbS5UYWdOYW1lLkJBU0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCQVNFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQkFTRUZPTlQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCQVNFRk9OVFwiKSxnb29nLmRvbS5UYWdOYW1lLkJEST1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJESVwiKSxnb29nLmRvbS5UYWdOYW1lLkJETz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJET1wiKSxnb29nLmRvbS5UYWdOYW1lLkJJRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJJR1wiKSxnb29nLmRvbS5UYWdOYW1lLkJMT0NLUVVPVEU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJCTE9DS1FVT1RFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQk9EWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJPRFlcIiksZ29vZy5kb20uVGFnTmFtZS5CUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkJSXCIpLGdvb2cuZG9tLlRhZ05hbWUuQlVUVE9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQlVUVE9OXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0FOVkFTPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0FOVkFTXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ0FQVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkNBUFRJT05cIiksZ29vZy5kb20uVGFnTmFtZS5DRU5URVI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDRU5URVJcIiksZ29vZy5kb20uVGFnTmFtZS5DSVRFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ0lURVwiKSxnb29nLmRvbS5UYWdOYW1lLkNPREU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT0RFXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ09MPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiQ09MXCIpLGdvb2cuZG9tLlRhZ05hbWUuQ09MR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT0xHUk9VUFwiKSxnb29nLmRvbS5UYWdOYW1lLkNPTU1BTkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJDT01NQU5EXCIpLGdvb2cuZG9tLlRhZ05hbWUuREFUQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRBVEFcIiksZ29vZy5kb20uVGFnTmFtZS5EQVRBTElTVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRBVEFMSVNUXCIpLGdvb2cuZG9tLlRhZ05hbWUuREQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERFwiKSxnb29nLmRvbS5UYWdOYW1lLkRFTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkRFTFwiKSxnb29nLmRvbS5UYWdOYW1lLkRFVEFJTFM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJERVRBSUxTXCIpLGdvb2cuZG9tLlRhZ05hbWUuREZOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiREZOXCIpLGdvb2cuZG9tLlRhZ05hbWUuRElBTE9HPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElBTE9HXCIpLGdvb2cuZG9tLlRhZ05hbWUuRElSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElSXCIpLGdvb2cuZG9tLlRhZ05hbWUuRElWPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRElWXCIpLGdvb2cuZG9tLlRhZ05hbWUuREw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJETFwiKSxnb29nLmRvbS5UYWdOYW1lLkRUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRFRcIiksZ29vZy5kb20uVGFnTmFtZS5FTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkVNXCIpLGdvb2cuZG9tLlRhZ05hbWUuRU1CRUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJFTUJFRFwiKSxnb29nLmRvbS5UYWdOYW1lLkZJRUxEU0VUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRklFTERTRVRcIiksZ29vZy5kb20uVGFnTmFtZS5GSUdDQVBUSU9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRklHQ0FQVElPTlwiKSxnb29nLmRvbS5UYWdOYW1lLkZJR1VSRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZJR1VSRVwiKSxnb29nLmRvbS5UYWdOYW1lLkZPTlQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGT05UXCIpLGdvb2cuZG9tLlRhZ05hbWUuRk9PVEVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiRk9PVEVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuRk9STT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZPUk1cIiksZ29vZy5kb20uVGFnTmFtZS5GUkFNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkZSQU1FXCIpLGdvb2cuZG9tLlRhZ05hbWUuRlJBTUVTRVQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJGUkFNRVNFVFwiKSxnb29nLmRvbS5UYWdOYW1lLkgxPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDFcIiksZ29vZy5kb20uVGFnTmFtZS5IMj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkgyXCIpLGdvb2cuZG9tLlRhZ05hbWUuSDM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIM1wiKSxnb29nLmRvbS5UYWdOYW1lLkg0PW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSDRcIiksZ29vZy5kb20uVGFnTmFtZS5INT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkg1XCIpLGdvb2cuZG9tLlRhZ05hbWUuSDY9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJINlwiKSxnb29nLmRvbS5UYWdOYW1lLkhFQUQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIRUFEXCIpLGdvb2cuZG9tLlRhZ05hbWUuSEVBREVSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEVBREVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuSEdST1VQPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSEdST1VQXCIpLGdvb2cuZG9tLlRhZ05hbWUuSFI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIUlwiKSxnb29nLmRvbS5UYWdOYW1lLkhUTUw9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJIVE1MXCIpLGdvb2cuZG9tLlRhZ05hbWUuST1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklcIiksZ29vZy5kb20uVGFnTmFtZS5JRlJBTUU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJRlJBTUVcIiksZ29vZy5kb20uVGFnTmFtZS5JTUc9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJJTUdcIiksZ29vZy5kb20uVGFnTmFtZS5JTlBVVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklOUFVUXCIpLGdvb2cuZG9tLlRhZ05hbWUuSU5TPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiSU5TXCIpLGdvb2cuZG9tLlRhZ05hbWUuSVNJTkRFWD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIklTSU5ERVhcIiksZ29vZy5kb20uVGFnTmFtZS5LQkQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJLQkRcIiksZ29vZy5kb20uVGFnTmFtZS5LRVlHRU49bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJLRVlHRU5cIiksZ29vZy5kb20uVGFnTmFtZS5MQUJFTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIkxBQkVMXCIpLGdvb2cuZG9tLlRhZ05hbWUuTEVHRU5EPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTEVHRU5EXCIpLGdvb2cuZG9tLlRhZ05hbWUuTEk9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMSVwiKSxnb29nLmRvbS5UYWdOYW1lLkxJTks9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJMSU5LXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUFJTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1BSU5cIiksZ29vZy5kb20uVGFnTmFtZS5NQVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQVBcIiksZ29vZy5kb20uVGFnTmFtZS5NQVJLPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTUFSS1wiKSxnb29nLmRvbS5UYWdOYW1lLk1BVEg9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJNQVRIXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVOVT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FTlVcIiksZ29vZy5kb20uVGFnTmFtZS5NRU5VSVRFTT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FTlVJVEVNXCIpLGdvb2cuZG9tLlRhZ05hbWUuTUVUQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FVEFcIiksZ29vZy5kb20uVGFnTmFtZS5NRVRFUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk1FVEVSXCIpLGdvb2cuZG9tLlRhZ05hbWUuTkFWPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTkFWXCIpLGdvb2cuZG9tLlRhZ05hbWUuTk9GUkFNRVM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJOT0ZSQU1FU1wiKSxnb29nLmRvbS5UYWdOYW1lLk5PU0NSSVBUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiTk9TQ1JJUFRcIiksZ29vZy5kb20uVGFnTmFtZS5PQkpFQ1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPQkpFQ1RcIiksZ29vZy5kb20uVGFnTmFtZS5PTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9MXCIpLGdvb2cuZG9tLlRhZ05hbWUuT1BUR1JPVVA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJPUFRHUk9VUFwiKSxnb29nLmRvbS5UYWdOYW1lLk9QVElPTj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9QVElPTlwiKSxnb29nLmRvbS5UYWdOYW1lLk9VVFBVVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIk9VVFBVVFwiKSxnb29nLmRvbS5UYWdOYW1lLlA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQXCIpLGdvb2cuZG9tLlRhZ05hbWUuUEFSQU09bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQQVJBTVwiKSxnb29nLmRvbS5UYWdOYW1lLlBJQ1RVUkU9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQSUNUVVJFXCIpLGdvb2cuZG9tLlRhZ05hbWUuUFJFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUFJFXCIpLGdvb2cuZG9tLlRhZ05hbWUuUFJPR1JFU1M9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJQUk9HUkVTU1wiKSxnb29nLmRvbS5UYWdOYW1lLlE9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJRXCIpLGdvb2cuZG9tLlRhZ05hbWUuUlA9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSUFwiKSxnb29nLmRvbS5UYWdOYW1lLlJUPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlRcIiksZ29vZy5kb20uVGFnTmFtZS5SVEM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJSVENcIiksZ29vZy5kb20uVGFnTmFtZS5SVUJZPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiUlVCWVwiKSxnb29nLmRvbS5UYWdOYW1lLlM9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTXCIpLGdvb2cuZG9tLlRhZ05hbWUuU0FNUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNBTVBcIiksZ29vZy5kb20uVGFnTmFtZS5TQ1JJUFQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTQ1JJUFRcIiksZ29vZy5kb20uVGFnTmFtZS5TRUNUSU9OPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU0VDVElPTlwiKSxnb29nLmRvbS5UYWdOYW1lLlNFTEVDVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNFTEVDVFwiKSxnb29nLmRvbS5UYWdOYW1lLlNNQUxMPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU01BTExcIiksZ29vZy5kb20uVGFnTmFtZS5TT1VSQ0U9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTT1VSQ0VcIiksZ29vZy5kb20uVGFnTmFtZS5TUEFOPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1BBTlwiKSxnb29nLmRvbS5UYWdOYW1lLlNUUklLRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUUklLRVwiKSxnb29nLmRvbS5UYWdOYW1lLlNUUk9ORz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNUUk9OR1wiKSxnb29nLmRvbS5UYWdOYW1lLlNUWUxFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1RZTEVcIiksZ29vZy5kb20uVGFnTmFtZS5TVUI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJTVUJcIiksZ29vZy5kb20uVGFnTmFtZS5TVU1NQVJZPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiU1VNTUFSWVwiKSxnb29nLmRvbS5UYWdOYW1lLlNVUD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNVUFwiKSxnb29nLmRvbS5UYWdOYW1lLlNWRz1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlNWR1wiKSxnb29nLmRvbS5UYWdOYW1lLlRBQkxFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEFCTEVcIiksZ29vZy5kb20uVGFnTmFtZS5UQk9EWT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRCT0RZXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEQ9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURFwiKSxnb29nLmRvbS5UYWdOYW1lLlRFTVBMQVRFPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEVNUExBVEVcIiksZ29vZy5kb20uVGFnTmFtZS5URVhUQVJFQT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRFWFRBUkVBXCIpLGdvb2cuZG9tLlRhZ05hbWUuVEZPT1Q9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJURk9PVFwiKSxnb29nLmRvbS5UYWdOYW1lLlRIPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVEhcIiksZ29vZy5kb20uVGFnTmFtZS5USEVBRD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRIRUFEXCIpLGdvb2cuZG9tLlRhZ05hbWUuVElNRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRJTUVcIiksZ29vZy5kb20uVGFnTmFtZS5USVRMRT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRJVExFXCIpLGdvb2cuZG9tLlRhZ05hbWUuVFI9bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJUUlwiKSxnb29nLmRvbS5UYWdOYW1lLlRSQUNLPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVFJBQ0tcIiksZ29vZy5kb20uVGFnTmFtZS5UVD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlRUXCIpLGdvb2cuZG9tLlRhZ05hbWUuVT1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlVcIiksZ29vZy5kb20uVGFnTmFtZS5VTD1uZXcgZ29vZy5kb20uVGFnTmFtZShcIlVMXCIpLGdvb2cuZG9tLlRhZ05hbWUuVkFSPW5ldyBnb29nLmRvbS5UYWdOYW1lKFwiVkFSXCIpLGdvb2cuZG9tLlRhZ05hbWUuVklERU89bmV3IGdvb2cuZG9tLlRhZ05hbWUoXCJWSURFT1wiKSxnb29nLmRvbS5UYWdOYW1lLldCUj1uZXcgZ29vZy5kb20uVGFnTmFtZShcIldCUlwiKSxnb29nLmRvbS50YWdzPXt9LGdvb2cuZG9tLnRhZ3MuVk9JRF9UQUdTXz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGdvb2cuZG9tLnRhZ3MuaXNWb2lkVGFnPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09Z29vZy5kb20udGFncy5WT0lEX1RBR1NfW2VdfSxnb29nLmh0bWw9e30sZ29vZy5odG1sLnRydXN0ZWR0eXBlcz17fSxnb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT1nb29nLlRSVVNURURfVFlQRVNfUE9MSUNZX05BTUU/Z29vZy5jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3koZ29vZy5UUlVTVEVEX1RZUEVTX1BPTElDWV9OQU1FK1wiI2h0bWxcIik6bnVsbCxnb29nLnN0cmluZz17fSxnb29nLnN0cmluZy5UeXBlZFN0cmluZz1mdW5jdGlvbigpe30sZ29vZy5zdHJpbmcuQ29uc3Q9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV89ZT09PWdvb2cuc3RyaW5nLkNvbnN0LkdPT0dfU1RSSU5HX0NPTlNUUlVDVE9SX1RPS0VOX1BSSVZBVEVfJiZ0fHxcIlwiLHRoaXMuU1RSSU5HX0NPTlNUX1RZUEVfTUFSS0VSX19HT09HX1NUUklOR19TRUNVUklUWV9QUklWQVRFXz1nb29nLnN0cmluZy5Db25zdC5UWVBFX01BUktFUl99LGdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuc3RyaW5nLkNvbnN0LnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nQ29uc3RWYWx1ZVdpdGhTZWN1cml0eUNvbnRyYWN0X19nb29nU3RyaW5nU2VjdXJpdHlQcml2YXRlX30sZ29vZy5zdHJpbmcuQ29uc3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJDb25zdHtcIit0aGlzLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV8rXCJ9XCJ9LGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0JiZlLmNvbnN0cnVjdG9yPT09Z29vZy5zdHJpbmcuQ29uc3QmJmUuU1RSSU5HX0NPTlNUX1RZUEVfTUFSS0VSX19HT09HX1NUUklOR19TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSXz9lLnN0cmluZ0NvbnN0VmFsdWVXaXRoU2VjdXJpdHlDb250cmFjdF9fZ29vZ1N0cmluZ1NlY3VyaXR5UHJpdmF0ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgQ29uc3QsIGdvdCAnXCIrZStcIidcIiksXCJ0eXBlX2Vycm9yOkNvbnN0XCIpfSxnb29nLnN0cmluZy5Db25zdC5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ29vZy5zdHJpbmcuQ29uc3QoZ29vZy5zdHJpbmcuQ29uc3QuR09PR19TVFJJTkdfQ09OU1RSVUNUT1JfVE9LRU5fUFJJVkFURV8sZSl9LGdvb2cuc3RyaW5nLkNvbnN0LlRZUEVfTUFSS0VSXz17fSxnb29nLnN0cmluZy5Db25zdC5HT09HX1NUUklOR19DT05TVFJVQ1RPUl9UT0tFTl9QUklWQVRFXz17fSxnb29nLnN0cmluZy5Db25zdC5FTVBUWT1nb29nLnN0cmluZy5Db25zdC5mcm9tKFwiXCIpLGdvb2cuaHRtbC5TYWZlU2NyaXB0PWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU2NyaXB0LlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFX30sZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVTY3JpcHQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LmZyb21Db25zdGFudD1mdW5jdGlvbihlKXtyZXR1cm4gMD09PShlPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSkubGVuZ3RoP2dvb2cuaHRtbC5TYWZlU2NyaXB0LkVNUFRZOmdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuZnJvbUNvbnN0YW50QW5kQXJncz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylvLnB1c2goZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5Xyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiKFwiK2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKStcIikoXCIrby5qb2luKFwiLCBcIikrXCIpO1wiKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuZnJvbUpzb249ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLmh0bWwuU2FmZVNjcmlwdC5zdHJpbmdpZnlfKGUpKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLmdldFR5cGVkU3RyaW5nVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXy50b1N0cmluZygpfSxnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVTY3JpcHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU2NyaXB0e1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KSxnb29nLmh0bWwuU2FmZVNjcmlwdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcFRydXN0ZWRTY3JpcHQoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwVHJ1c3RlZFNjcmlwdD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU2NyaXB0JiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTY3JpcHQmJmUuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPT09Z29vZy5odG1sLlNhZmVTY3JpcHQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVNjcmlwdFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVNjcmlwdCwgZ290ICdcIitlK1wiJyBvZiB0eXBlIFwiK2dvb2cudHlwZU9mKGUpKSxcInR5cGVfZXJyb3I6U2FmZVNjcmlwdFwiKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuc3RyaW5naWZ5Xz1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvPC9nLFwiXFxcXHgzY1wiKX0sZ29vZy5odG1sLlNhZmVTY3JpcHQuY3JlYXRlU2FmZVNjcmlwdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlPWZ1bmN0aW9uKGUpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVTY3JpcHQpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oZSl9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfPWdvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZP2dvb2cuaHRtbC50cnVzdGVkdHlwZXMuUFJJVkFURV9ET19OT1RfQUNDRVNTX09SX0VMU0VfUE9MSUNZLmNyZWF0ZVNjcmlwdChlKTplLHRoaXN9LGdvb2cuaHRtbC5TYWZlU2NyaXB0LkVNUFRZPWdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKSxnb29nLmZzPXt9LGdvb2cuZnMudXJsPXt9LGdvb2cuZnMudXJsLmNyZWF0ZU9iamVjdFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5mcy51cmwuZ2V0VXJsT2JqZWN0XygpLmNyZWF0ZU9iamVjdFVSTChlKX0sZ29vZy5mcy51cmwucmV2b2tlT2JqZWN0VXJsPWZ1bmN0aW9uKGUpe2dvb2cuZnMudXJsLmdldFVybE9iamVjdF8oKS5yZXZva2VPYmplY3RVUkwoZSl9LGdvb2cuZnMudXJsLmdldFVybE9iamVjdF89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmZzLnVybC5maW5kVXJsT2JqZWN0XygpO2lmKG51bGwhPWUpcmV0dXJuIGU7dGhyb3cgRXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgYmxvYiBVUkxzXCIpfSxnb29nLmZzLnVybC5maW5kVXJsT2JqZWN0Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmlzRGVmKGdvb2cuZ2xvYmFsLlVSTCkmJmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwuVVJMLmNyZWF0ZU9iamVjdFVSTCk/Z29vZy5nbG9iYWwuVVJMOmdvb2cuaXNEZWYoZ29vZy5nbG9iYWwud2Via2l0VVJMKSYmZ29vZy5pc0RlZihnb29nLmdsb2JhbC53ZWJraXRVUkwuY3JlYXRlT2JqZWN0VVJMKT9nb29nLmdsb2JhbC53ZWJraXRVUkw6Z29vZy5pc0RlZihnb29nLmdsb2JhbC5jcmVhdGVPYmplY3RVUkwpP2dvb2cuZ2xvYmFsOm51bGx9LGdvb2cuZnMudXJsLmJyb3dzZXJTdXBwb3J0c09iamVjdFVybHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9Z29vZy5mcy51cmwuZmluZFVybE9iamVjdF8oKX0sZ29vZy5pMThuPXt9LGdvb2cuaTE4bi5iaWRpPXt9LGdvb2cuaTE4bi5iaWRpLkZPUkNFX1JUTD0hMSxnb29nLmkxOG4uYmlkaS5JU19SVEw9Z29vZy5pMThuLmJpZGkuRk9SQ0VfUlRMfHwoXCJhclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcImZhXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwiaGVcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJpd1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInBzXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwic2RcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKXx8XCJ1Z1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwyKS50b0xvd2VyQ2FzZSgpfHxcInVyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygwLDIpLnRvTG93ZXJDYXNlKCl8fFwieWlcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDAsMikudG9Mb3dlckNhc2UoKSkmJigyPT1nb29nLkxPQ0FMRS5sZW5ndGh8fFwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygyLDMpKXx8Mzw9Z29vZy5MT0NBTEUubGVuZ3RoJiZcImNrYlwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMCwzKS50b0xvd2VyQ2FzZSgpJiYoMz09Z29vZy5MT0NBTEUubGVuZ3RofHxcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KSl8fDc8PWdvb2cuTE9DQUxFLmxlbmd0aCYmKFwiLVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMiwzKXx8XCJfXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygyLDMpKSYmKFwiYWRsbVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcImFyYWJcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJoZWJyXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCl8fFwibmtvb1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw3KS50b0xvd2VyQ2FzZSgpfHxcInJvaGdcIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNykudG9Mb3dlckNhc2UoKXx8XCJ0aGFhXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZygzLDcpLnRvTG93ZXJDYXNlKCkpfHw4PD1nb29nLkxPQ0FMRS5sZW5ndGgmJihcIi1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDMsNCl8fFwiX1wiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoMyw0KSkmJihcImFkbG1cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJhcmFiXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwiaGViclwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpfHxcIm5rb29cIj09Z29vZy5MT0NBTEUuc3Vic3RyaW5nKDQsOCkudG9Mb3dlckNhc2UoKXx8XCJyb2hnXCI9PWdvb2cuTE9DQUxFLnN1YnN0cmluZyg0LDgpLnRvTG93ZXJDYXNlKCl8fFwidGhhYVwiPT1nb29nLkxPQ0FMRS5zdWJzdHJpbmcoNCw4KS50b0xvd2VyQ2FzZSgpKSxnb29nLmkxOG4uYmlkaS5Gb3JtYXQ9e0xSRTpcIuKAqlwiLFJMRTpcIuKAq1wiLFBERjpcIuKArFwiLExSTTpcIuKAjlwiLFJMTTpcIuKAj1wifSxnb29nLmkxOG4uYmlkaS5EaXI9e0xUUjoxLFJUTDotMSxORVVUUkFMOjB9LGdvb2cuaTE4bi5iaWRpLlJJR0hUPVwicmlnaHRcIixnb29nLmkxOG4uYmlkaS5MRUZUPVwibGVmdFwiLGdvb2cuaTE4bi5iaWRpLkkxOE5fUklHSFQ9Z29vZy5pMThuLmJpZGkuSVNfUlRMP2dvb2cuaTE4bi5iaWRpLkxFRlQ6Z29vZy5pMThuLmJpZGkuUklHSFQsZ29vZy5pMThuLmJpZGkuSTE4Tl9MRUZUPWdvb2cuaTE4bi5iaWRpLklTX1JUTD9nb29nLmkxOG4uYmlkaS5SSUdIVDpnb29nLmkxOG4uYmlkaS5MRUZULGdvb2cuaTE4bi5iaWRpLnRvRGlyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDxlP2dvb2cuaTE4bi5iaWRpLkRpci5MVFI6MD5lP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6dD9udWxsOmdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMOm51bGw9PWU/bnVsbDplP2dvb2cuaTE4bi5iaWRpLkRpci5SVEw6Z29vZy5pMThuLmJpZGkuRGlyLkxUUn0sZ29vZy5pMThuLmJpZGkubHRyQ2hhcnNfPVwiQS1aYS16w4Atw5bDmC3DtsO4Lcq4zIAt1pDgpIAt4b+/4oCO4rCALVxcdWQ4MDFcXHVkODA0LVxcdWQ4MzlcXHVkODNjLVxcdWRiZmbvpIAt76yc77iALe+5r++7vS3vv79cIixnb29nLmkxOG4uYmlkaS5ydGxDaGFyc189XCLWkS3br9u6LeCjv+KAj1xcdWQ4MDItXFx1ZDgwM1xcdWQ4M2EtXFx1ZDgzYu+snS3vt7/vubAt77u8XCIsZ29vZy5pMThuLmJpZGkuaHRtbFNraXBSZWdfPS88W14+XSo+fCZbXjtdKzsvZyxnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkuaHRtbFNraXBSZWdfLFwiXCIpOmV9LGdvb2cuaTE4bi5iaWRpLnJ0bENoYXJSZWdfPW5ldyBSZWdFeHAoXCJbXCIrZ29vZy5pMThuLmJpZGkucnRsQ2hhcnNfK1wiXVwiKSxnb29nLmkxOG4uYmlkaS5sdHJDaGFyUmVnXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkuaGFzQW55UnRsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bENoYXJSZWdfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCkpfSxnb29nLmkxOG4uYmlkaS5oYXNSdGxDaGFyPWdvb2cuaTE4bi5iaWRpLmhhc0FueVJ0bCxnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyQ2hhclJlZ18udGVzdChnb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSl9LGdvb2cuaTE4bi5iaWRpLmx0clJlXz1uZXcgUmVnRXhwKFwiXltcIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLnJ0bFJlXz1uZXcgUmVnRXhwKFwiXltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdXCIpLGdvb2cuaTE4bi5iaWRpLmlzUnRsQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkucnRsUmVfLnRlc3QoZSl9LGdvb2cuaTE4bi5iaWRpLmlzTHRyQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyUmVfLnRlc3QoZSl9LGdvb2cuaTE4bi5iaWRpLmlzTmV1dHJhbENoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIWdvb2cuaTE4bi5iaWRpLmlzTHRyQ2hhcihlKSYmIWdvb2cuaTE4bi5iaWRpLmlzUnRsQ2hhcihlKX0sZ29vZy5pMThuLmJpZGkubHRyRGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIl5bXlwiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl0qW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkucnRsRGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIl5bXlwiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl0qW1wiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl1cIiksZ29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aFJ0bD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5ydGxEaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNSdGxUZXh0PWdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhSdGwsZ29vZy5pMThuLmJpZGkuc3RhcnRzV2l0aEx0cj1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5sdHJEaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNMdHJUZXh0PWdvb2cuaTE4bi5iaWRpLnN0YXJ0c1dpdGhMdHIsZ29vZy5pMThuLmJpZGkuaXNSZXF1aXJlZEx0clJlXz0vXmh0dHA6XFwvXFwvLiovLGdvb2cuaTE4bi5iaWRpLmlzTmV1dHJhbFRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1nb29nLmkxOG4uYmlkaS5zdHJpcEh0bWxJZk5lZWRlZF8oZSx0KSxnb29nLmkxOG4uYmlkaS5pc1JlcXVpcmVkTHRyUmVfLnRlc3QoZSl8fCFnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHIoZSkmJiFnb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwoZSl9LGdvb2cuaTE4bi5iaWRpLmx0ckV4aXREaXJDaGVja1JlXz1uZXcgUmVnRXhwKFwiW1wiK2dvb2cuaTE4bi5iaWRpLmx0ckNoYXJzXytcIl1bXlwiK2dvb2cuaTE4bi5iaWRpLnJ0bENoYXJzXytcIl0qJFwiKSxnb29nLmkxOG4uYmlkaS5ydGxFeGl0RGlyQ2hlY2tSZV89bmV3IFJlZ0V4cChcIltcIitnb29nLmkxOG4uYmlkaS5ydGxDaGFyc18rXCJdW15cIitnb29nLmkxOG4uYmlkaS5sdHJDaGFyc18rXCJdKiRcIiksZ29vZy5pMThuLmJpZGkuZW5kc1dpdGhMdHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5pMThuLmJpZGkubHRyRXhpdERpckNoZWNrUmVfLnRlc3QoZ29vZy5pMThuLmJpZGkuc3RyaXBIdG1sSWZOZWVkZWRfKGUsdCkpfSxnb29nLmkxOG4uYmlkaS5pc0x0ckV4aXRUZXh0PWdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoTHRyLGdvb2cuaTE4bi5iaWRpLmVuZHNXaXRoUnRsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bEV4aXREaXJDaGVja1JlXy50ZXN0KGdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpKX0sZ29vZy5pMThuLmJpZGkuaXNSdGxFeGl0VGV4dD1nb29nLmkxOG4uYmlkaS5lbmRzV2l0aFJ0bCxnb29nLmkxOG4uYmlkaS5ydGxMb2NhbGVzUmVfPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLGdvb2cuaTE4bi5iaWRpLmlzUnRsTGFuZ3VhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLnJ0bExvY2FsZXNSZV8udGVzdChlKX0sZ29vZy5pMThuLmJpZGkuYnJhY2tldEd1YXJkVGV4dFJlXz0vKFxcKC4qP1xcKSspfChcXFsuKj9cXF0rKXwoXFx7Lio/XFx9Kyl8KDwuKj8+KykvZyxnb29nLmkxOG4uYmlkaS5ndWFyZEJyYWNrZXRJblRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD0odm9pZCAwPT09dD9nb29nLmkxOG4uYmlkaS5oYXNBbnlSdGwoZSk6dCk/Z29vZy5pMThuLmJpZGkuRm9ybWF0LlJMTTpnb29nLmkxOG4uYmlkaS5Gb3JtYXQuTFJNLGUucmVwbGFjZShnb29nLmkxOG4uYmlkaS5icmFja2V0R3VhcmRUZXh0UmVfLHQrXCIkJlwiK3QpfSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlUnRsSW5IdG1sPWZ1bmN0aW9uKGUpe3JldHVyblwiPFwiPT1lLmNoYXJBdCgwKT9lLnJlcGxhY2UoLzxcXHcrLyxcIiQmIGRpcj1ydGxcIik6XCJcXG48c3BhbiBkaXI9cnRsPlwiK2UrXCI8L3NwYW4+XCJ9LGdvb2cuaTE4bi5iaWRpLmVuZm9yY2VSdGxJblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkZvcm1hdC5STEUrZStnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUERGfSxnb29nLmkxOG4uYmlkaS5lbmZvcmNlTHRySW5IdG1sPWZ1bmN0aW9uKGUpe3JldHVyblwiPFwiPT1lLmNoYXJBdCgwKT9lLnJlcGxhY2UoLzxcXHcrLyxcIiQmIGRpcj1sdHJcIik6XCJcXG48c3BhbiBkaXI9bHRyPlwiK2UrXCI8L3NwYW4+XCJ9LGdvb2cuaTE4bi5iaWRpLmVuZm9yY2VMdHJJblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkZvcm1hdC5MUkUrZStnb29nLmkxOG4uYmlkaS5Gb3JtYXQuUERGfSxnb29nLmkxOG4uYmlkaS5kaW1lbnNpb25zUmVfPS86XFxzKihbLlxcZF1bLlxcd10qKVxccysoWy5cXGRdWy5cXHddKilcXHMrKFsuXFxkXVsuXFx3XSopXFxzKyhbLlxcZF1bLlxcd10qKS9nLGdvb2cuaTE4bi5iaWRpLmxlZnRSZV89L2xlZnQvZ2ksZ29vZy5pMThuLmJpZGkucmlnaHRSZV89L3JpZ2h0L2dpLGdvb2cuaTE4bi5iaWRpLnRlbXBSZV89LyUlJSUvZyxnb29nLmkxOG4uYmlkaS5taXJyb3JDU1M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShnb29nLmkxOG4uYmlkaS5kaW1lbnNpb25zUmVfLFwiOiQxICQ0ICQzICQyXCIpLnJlcGxhY2UoZ29vZy5pMThuLmJpZGkubGVmdFJlXyxcIiUlJSVcIikucmVwbGFjZShnb29nLmkxOG4uYmlkaS5yaWdodFJlXyxnb29nLmkxOG4uYmlkaS5MRUZUKS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLnRlbXBSZV8sZ29vZy5pMThuLmJpZGkuUklHSFQpfSxnb29nLmkxOG4uYmlkaS5kb3VibGVRdW90ZVN1YnN0aXR1dGVSZV89LyhbXFx1MDU5MS1cXHUwNWYyXSlcIi9nLGdvb2cuaTE4bi5iaWRpLnNpbmdsZVF1b3RlU3Vic3RpdHV0ZVJlXz0vKFtcXHUwNTkxLVxcdTA1ZjJdKScvZyxnb29nLmkxOG4uYmlkaS5ub3JtYWxpemVIZWJyZXdRdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGdvb2cuaTE4bi5iaWRpLmRvdWJsZVF1b3RlU3Vic3RpdHV0ZVJlXyxcIiQx17RcIikucmVwbGFjZShnb29nLmkxOG4uYmlkaS5zaW5nbGVRdW90ZVN1YnN0aXR1dGVSZV8sXCIkMdezXCIpfSxnb29nLmkxOG4uYmlkaS53b3JkU2VwYXJhdG9yUmVfPS9cXHMrLyxnb29nLmkxOG4uYmlkaS5oYXNOdW1lcmFsc1JlXz0vW1xcZFxcdTA2ZjAtXFx1MDZmOV0vLGdvb2cuaTE4bi5iaWRpLnJ0bERldGVjdGlvblRocmVzaG9sZF89LjQsZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgbz0wLHI9MCxuPSExO2ZvcihlPWdvb2cuaTE4bi5iaWRpLnN0cmlwSHRtbElmTmVlZGVkXyhlLHQpLnNwbGl0KGdvb2cuaTE4bi5iaWRpLndvcmRTZXBhcmF0b3JSZV8pLHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIHM9ZVt0XTtnb29nLmkxOG4uYmlkaS5zdGFydHNXaXRoUnRsKHMpPyhvKysscisrKTpnb29nLmkxOG4uYmlkaS5pc1JlcXVpcmVkTHRyUmVfLnRlc3Qocyk/bj0hMDpnb29nLmkxOG4uYmlkaS5oYXNBbnlMdHIocyk/cisrOmdvb2cuaTE4bi5iaWRpLmhhc051bWVyYWxzUmVfLnRlc3QocykmJihuPSEwKX1yZXR1cm4gMD09cj9uP2dvb2cuaTE4bi5iaWRpLkRpci5MVFI6Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw6by9yPmdvb2cuaTE4bi5iaWRpLnJ0bERldGVjdGlvblRocmVzaG9sZF8/Z29vZy5pMThuLmJpZGkuRGlyLlJUTDpnb29nLmkxOG4uYmlkaS5EaXIuTFRSfSxnb29nLmkxOG4uYmlkaS5kZXRlY3RSdGxEaXJlY3Rpb25hbGl0eT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmkxOG4uYmlkaS5lc3RpbWF0ZURpcmVjdGlvbihlLHQpPT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMfSxnb29nLmkxOG4uYmlkaS5zZXRFbGVtZW50RGlyQW5kQWxpZ249ZnVuY3Rpb24oZSx0KXtlJiYodD1nb29nLmkxOG4uYmlkaS50b0Rpcih0KSkmJihlLnN0eWxlLnRleHRBbGlnbj10PT1nb29nLmkxOG4uYmlkaS5EaXIuUlRMP2dvb2cuaTE4bi5iaWRpLlJJR0hUOmdvb2cuaTE4bi5iaWRpLkxFRlQsZS5kaXI9dD09Z29vZy5pMThuLmJpZGkuRGlyLlJUTD9cInJ0bFwiOlwibHRyXCIpfSxnb29nLmkxOG4uYmlkaS5zZXRFbGVtZW50RGlyQnlUZXh0RGlyZWN0aW9uYWxpdHk9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZ29vZy5pMThuLmJpZGkuZXN0aW1hdGVEaXJlY3Rpb24odCkpe2Nhc2UgZ29vZy5pMThuLmJpZGkuRGlyLkxUUjplLmRpcj1cImx0clwiO2JyZWFrO2Nhc2UgZ29vZy5pMThuLmJpZGkuRGlyLlJUTDplLmRpcj1cInJ0bFwiO2JyZWFrO2RlZmF1bHQ6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJkaXJcIil9fSxnb29nLmkxOG4uYmlkaS5EaXJlY3Rpb25hbFN0cmluZz1mdW5jdGlvbigpe30sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMudHJ1c3RlZFVSTF89bnVsbCx0aGlzLlRSVVNURURfUkVTT1VSQ0VfVVJMX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFX30sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXy50b1N0cmluZygpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ0kxOG5CaWRpRGlyZWN0aW9uYWxTdHJpbmc9ITAsZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLmNsb25lV2l0aFBhcmFtcz1mdW5jdGlvbihlLHQpe3ZhciBvPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKHRoaXMpLHI9KG89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5VUkxfUEFSQU1fUEFSU0VSXy5leGVjKG8pKVszXXx8XCJcIjtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5jcmVhdGVUcnVzdGVkUmVzb3VyY2VVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShvWzFdK2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXyhcIj9cIixvWzJdfHxcIlwiLGUpK2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuc3RyaW5naWZ5UGFyYW1zXyhcIiNcIixyLHQpKX0sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJUcnVzdGVkUmVzb3VyY2VVcmx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VUcnVzdGVkUmVzb3VyY2VVcmxXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTChlKS50b1N0cmluZygpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybCYmZS5UUlVTVEVEX1JFU09VUkNFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz9lLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVRydXN0ZWRSZXNvdXJjZVVybFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgVHJ1c3RlZFJlc291cmNlVXJsLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpUcnVzdGVkUmVzb3VyY2VVcmxcIil9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTD1mdW5jdGlvbihlKXtyZXR1cm4gZS50cnVzdGVkVVJMXz9lLnRydXN0ZWRVUkxfOmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKGUpfSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmZvcm1hdD1mdW5jdGlvbihlLHQpe3ZhciBvPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKTtpZighZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5CQVNFX1VSTF8udGVzdChvKSl0aHJvdyBFcnJvcihcIkludmFsaWQgVHJ1c3RlZFJlc291cmNlVXJsIGZvcm1hdDogXCIrbyk7cmV0dXJuIGU9by5yZXBsYWNlKGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuRk9STUFUX01BUktFUl8sKGZ1bmN0aW9uKGUscil7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpKXRocm93IEVycm9yKCdGb3VuZCBtYXJrZXIsIFwiJytyKydcIiwgaW4gZm9ybWF0IHN0cmluZywgXCInK28rJ1wiLCBidXQgbm8gdmFsaWQgbGFiZWwgbWFwcGluZyBmb3VuZCBpbiBhcmdzOiAnK0pTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4oZT10W3JdKWluc3RhbmNlb2YgZ29vZy5zdHJpbmcuQ29uc3Q/Z29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpOmVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZSkpfSkpLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuRk9STUFUX01BUktFUl89LyV7KFxcdyspfS9nLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuQkFTRV9VUkxfPS9eKChodHRwczopP1xcL1xcL1swLTlhLXouOltcXF0tXStcXC98XFwvW14vXFxcXF18W146L1xcXFwlXStcXC98W146L1xcXFwlXSpbPyNdfGFib3V0OmJsYW5rIykvaSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLlVSTF9QQVJBTV9QQVJTRVJfPS9eKFtePyNdKikoXFw/W14jXSopPygjW1xcc1xcU10qKT8vLGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuZm9ybWF0V2l0aFBhcmFtcz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mb3JtYXQoZSx0KS5jbG9uZVdpdGhQYXJhbXMobyxyKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKX0sZ29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC5mcm9tQ29uc3RhbnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1cIlwiLG89MDtvPGUubGVuZ3RoO28rKyl0Kz1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZVtvXSk7cmV0dXJuIGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwuY3JlYXRlVHJ1c3RlZFJlc291cmNlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmw7cmV0dXJuIHQucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlVHJ1c3RlZFJlc291cmNlVXJsV3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwoZSk6ZSxnb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWSYmKHQudHJ1c3RlZFVSTF89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlVVJMKGUpKSx0fSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnN0cmluZ2lmeVBhcmFtc189ZnVuY3Rpb24oZSx0LG8pe2lmKG51bGw9PW8pcmV0dXJuIHQ7aWYoZ29vZy5pc1N0cmluZyhvKSlyZXR1cm4gbz9lK2VuY29kZVVSSUNvbXBvbmVudChvKTpcIlwiO2Zvcih2YXIgciBpbiBvKXt2YXIgbj1vW3JdO249Z29vZy5pc0FycmF5KG4pP246W25dO2Zvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgaT1uW3NdO251bGwhPWkmJih0fHwodD1lKSx0Kz0odC5sZW5ndGg+ZS5sZW5ndGg/XCImXCI6XCJcIikrZW5jb2RlVVJJQ29tcG9uZW50KHIpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaSkpKX19cmV0dXJuIHR9LGdvb2cuc3RyaW5nLmludGVybmFsPXt9LGdvb2cuc3RyaW5nLmludGVybmFsLnN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09ZS5sYXN0SW5kZXhPZih0LDApfSxnb29nLnN0cmluZy5pbnRlcm5hbC5lbmRzV2l0aD1mdW5jdGlvbihlLHQpe3ZhciBvPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiAwPD1vJiZlLmluZGV4T2YodCxvKT09b30sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiAwPT1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlKHQsZS5zdWJzdHIoMCx0Lmxlbmd0aCkpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVFbmRzV2l0aD1mdW5jdGlvbihlLHQpe3JldHVybiAwPT1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlKHQsZS5zdWJzdHIoZS5sZW5ndGgtdC5sZW5ndGgsdC5sZW5ndGgpKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlRXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKT09dC50b0xvd2VyQ2FzZSgpfSxnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybi9eW1xcc1xceGEwXSokLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pbnRlcm5hbC50cmltPWdvb2cuVFJVU1RFRF9TSVRFJiZTdHJpbmcucHJvdG90eXBlLnRyaW0/ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfTpmdW5jdGlvbihlKXtyZXR1cm4vXltcXHNcXHhhMF0qKFtcXHNcXFNdKj8pW1xcc1xceGEwXSokLy5leGVjKGUpWzFdfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9U3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpPCh0PVN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKT8tMTplPT10PzA6MX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwubmV3TGluZVRvQnI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csdD9cIjxiciAvPlwiOlwiPGJyPlwiKX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZT1mdW5jdGlvbihlLHQpe2lmKHQpZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXyxcIiZhbXA7XCIpLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTFRfUkVfLFwiJmx0O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXyxcIiZndDtcIikucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5RVU9UX1JFXyxcIiZxdW90O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV8sXCImIzM5O1wiKS5yZXBsYWNlKGdvb2cuc3RyaW5nLmludGVybmFsLk5VTExfUkVfLFwiJiMwO1wiKTtlbHNle2lmKCFnb29nLnN0cmluZy5pbnRlcm5hbC5BTExfUkVfLnRlc3QoZSkpcmV0dXJuIGU7LTEhPWUuaW5kZXhPZihcIiZcIikmJihlPWUucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5BTVBfUkVfLFwiJmFtcDtcIikpLC0xIT1lLmluZGV4T2YoXCI8XCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTFRfUkVfLFwiJmx0O1wiKSksLTEhPWUuaW5kZXhPZihcIj5cIikmJihlPWUucmVwbGFjZShnb29nLnN0cmluZy5pbnRlcm5hbC5HVF9SRV8sXCImZ3Q7XCIpKSwtMSE9ZS5pbmRleE9mKCdcIicpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuUVVPVF9SRV8sXCImcXVvdDtcIikpLC0xIT1lLmluZGV4T2YoXCInXCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuU0lOR0xFX1FVT1RFX1JFXyxcIiYjMzk7XCIpKSwtMSE9ZS5pbmRleE9mKFwiXFwwXCIpJiYoZT1lLnJlcGxhY2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuTlVMTF9SRV8sXCImIzA7XCIpKX1yZXR1cm4gZX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuQU1QX1JFXz0vJi9nLGdvb2cuc3RyaW5nLmludGVybmFsLkxUX1JFXz0vPC9nLGdvb2cuc3RyaW5nLmludGVybmFsLkdUX1JFXz0vPi9nLGdvb2cuc3RyaW5nLmludGVybmFsLlFVT1RfUkVfPS9cIi9nLGdvb2cuc3RyaW5nLmludGVybmFsLlNJTkdMRV9RVU9URV9SRV89LycvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5OVUxMX1JFXz0vXFx4MDAvZyxnb29nLnN0cmluZy5pbnRlcm5hbC5BTExfUkVfPS9bXFx4MDAmPD5cIiddLyxnb29nLnN0cmluZy5pbnRlcm5hbC53aGl0ZXNwYWNlRXNjYXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyKGUucmVwbGFjZSgvICAvZyxcIiAmIzE2MDtcIiksdCl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuLTEhPWUuaW5kZXhPZih0KX0sZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoZS50b0xvd2VyQ2FzZSgpLHQudG9Mb3dlckNhc2UoKSl9LGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucz1mdW5jdGlvbihlLHQpe3ZhciBvPTA7ZT1nb29nLnN0cmluZy5pbnRlcm5hbC50cmltKFN0cmluZyhlKSkuc3BsaXQoXCIuXCIpLHQ9Z29vZy5zdHJpbmcuaW50ZXJuYWwudHJpbShTdHJpbmcodCkpLnNwbGl0KFwiLlwiKTtmb3IodmFyIHI9TWF0aC5tYXgoZS5sZW5ndGgsdC5sZW5ndGgpLG49MDswPT1vJiZuPHI7bisrKXt2YXIgcz1lW25dfHxcIlwiLGk9dFtuXXx8XCJcIjtkb3tpZihzPS8oXFxkKikoXFxEKikoLiopLy5leGVjKHMpfHxbXCJcIixcIlwiLFwiXCIsXCJcIl0saT0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhpKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdLDA9PXNbMF0ubGVuZ3RoJiYwPT1pWzBdLmxlbmd0aClicmVhaztvPTA9PXNbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoc1sxXSwxMCk7dmFyIGE9MD09aVsxXS5sZW5ndGg/MDpwYXJzZUludChpWzFdLDEwKTtvPWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18obyxhKXx8Z29vZy5zdHJpbmcuaW50ZXJuYWwuY29tcGFyZUVsZW1lbnRzXygwPT1zWzJdLmxlbmd0aCwwPT1pWzJdLmxlbmd0aCl8fGdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVFbGVtZW50c18oc1syXSxpWzJdKSxzPXNbM10saT1pWzNdfXdoaWxlKDA9PW8pfXJldHVybiBvfSxnb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlRWxlbWVudHNfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTowfSxnb29nLmh0bWwuU2FmZVVybD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfVVJMX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz1nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkc9XCJhYm91dDppbnZhbGlkI3pDbG9zdXJlelwiLGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlVXJsLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV8udG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVVcmwucHJvdG90eXBlLmltcGxlbWVudHNHb29nSTE4bkJpZGlEaXJlY3Rpb25hbFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuaTE4bi5iaWRpLkRpci5MVFJ9LGdvb2cuREVCVUcmJihnb29nLmh0bWwuU2FmZVVybC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVVcmx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXytcIn1cIn0pLGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTChlKS50b1N0cmluZygpfSxnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwmJmUuY29uc3RydWN0b3I9PT1nb29nLmh0bWwuU2FmZVVybCYmZS5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZVVybC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8/ZS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXzooZ29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlVXJsLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlVXJsXCIpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpfSxnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl89L14oPzphdWRpb1xcLyg/OjNncHAyfDNncHB8YWFjfEwxNnxtaWRpfG1wM3xtcDR8bXBlZ3xvZ2F8b2dnfG9wdXN8eC1tNGF8eC13YXZ8d2F2fHdlYm0pfGltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwfHgtaWNvbil8dGV4dFxcL2Nzdnx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtfHF1aWNrdGltZSkpKD86O1xcdys9KD86XFx3K3xcIltcXHc7PV0rXCIpKSokL2ksZ29vZy5odG1sLlNhZmVVcmwuaXNTYWZlTWltZVR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TQUZFX01JTUVfVFlQRV9QQVRURVJOXy50ZXN0KGUpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tQmxvYj1mdW5jdGlvbihlKXtyZXR1cm4gZT1nb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdChlLnR5cGUpP2dvb2cuZnMudXJsLmNyZWF0ZU9iamVjdFVybChlKTpnb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLkRBVEFfVVJMX1BBVFRFUk5fPS9eZGF0YTooW14sXSopO2Jhc2U2NCxbYS16MC05K1xcL10rPSokL2ksZ29vZy5odG1sLlNhZmVVcmwuZnJvbURhdGFVcmw9ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9ZS5yZXBsYWNlKC8oJTBBfCUwRCkvZyxcIlwiKSkubWF0Y2goZ29vZy5odG1sLkRBVEFfVVJMX1BBVFRFUk5fKTtyZXR1cm4gdD10JiZnb29nLmh0bWwuU0FGRV9NSU1FX1RZUEVfUEFUVEVSTl8udGVzdCh0WzFdKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodD9lOmdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpfSxnb29nLmh0bWwuU2FmZVVybC5mcm9tVGVsVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGUsXCJ0ZWw6XCIpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TSVBfVVJMX1BBVFRFUk5fPS9ec2lwW3NdPzpbK2EtejAtOV8uISQlJicqXFwvPV5ge3x9fi1dK0AoW2EtejAtOS1dK1xcLikrW2EtejAtOV17Miw2M30kL2ksZ29vZy5odG1sLlNhZmVVcmwuZnJvbVNpcFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5odG1sLlNJUF9VUkxfUEFUVEVSTl8udGVzdChkZWNvZGVVUklDb21wb25lbnQoZSkpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21GYWNlYm9va01lc3NlbmdlclVybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwiZmItbWVzc2VuZ2VyOi8vc2hhcmVcIil8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbVdoYXRzQXBwVXJsPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoKGUsXCJ3aGF0c2FwcDovL3NlbmRcIil8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKX0sZ29vZy5odG1sLlNhZmVVcmwuZnJvbVNtc1VybD1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aChlLFwic21zOlwiKSYmZ29vZy5odG1sLlNhZmVVcmwuaXNTbXNVcmxCb2R5VmFsaWRfKGUpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmlzU21zVXJsQm9keVZhbGlkXz1mdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoXCIjXCIpO2lmKDA8dCYmKGU9ZS5zdWJzdHJpbmcoMCx0KSksISh0PWUubWF0Y2goL1s/Jl1ib2R5PS9naSkpKXJldHVybiEwO2lmKDE8dC5sZW5ndGgpcmV0dXJuITE7aWYoIShlPWUubWF0Y2goL1s/Jl1ib2R5PShbXiZdKikvKVsxXSkpcmV0dXJuITA7dHJ5e2RlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4vXig/OlthLXowLTlcXC1fLn5dfCVbMC05YS1mXXsyfSkrJC9pLnRlc3QoZSl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21Tc2hVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZVN0YXJ0c1dpdGgoZSxcInNzaDovL1wiKXx8KGU9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyksZ29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKGUpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUNocm9tZUV4dGVuc2lvblVybD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF8oL15jaHJvbWUtZXh0ZW5zaW9uOlxcL1xcLyhbXlxcL10rKVxcLy8sZSx0KX0sZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVGaXJlZm94RXh0ZW5zaW9uVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplRXh0ZW5zaW9uVXJsXygvXm1vei1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxlLHQpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUVkZ2VFeHRlbnNpb25Vcmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVFeHRlbnNpb25VcmxfKC9ebXMtYnJvd3Nlci1leHRlbnNpb246XFwvXFwvKFteXFwvXSspXFwvLyxlLHQpfSxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUV4dGVuc2lvblVybF89ZnVuY3Rpb24oZSx0LG8pe3JldHVybihlPWUuZXhlYyh0KSk/KGU9ZVsxXSwtMT09KG8gaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdD9bZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKG8pXTpvLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKX0pKSkuaW5kZXhPZihlKSYmKHQ9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORykpOnQ9Z29vZy5odG1sLlNhZmVVcmwuSU5OT0NVT1VTX1NUUklORyxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC5TYWZlVXJsLmZyb21UcnVzdGVkUmVzb3VyY2VVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKSl9LGdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXz0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaSxnb29nLmh0bWwuU2FmZVVybC5TQUZFX1VSTF9QQVRURVJOPWdvb2cuaHRtbC5TQUZFX1VSTF9QQVRURVJOXyxnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2U6KGU9XCJvYmplY3RcIj09dHlwZW9mIGUmJmUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz9lLmdldFR5cGVkU3RyaW5nVmFsdWUoKTpTdHJpbmcoZSksZ29vZy5odG1sLlNBRkVfVVJMX1BBVFRFUk5fLnRlc3QoZSl8fChlPWdvb2cuaHRtbC5TYWZlVXJsLklOTk9DVU9VU19TVFJJTkcpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKSl9LGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD9lOihlPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc/ZS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCk6U3RyaW5nKGUpLHQmJi9eZGF0YTovaS50ZXN0KGUpJiYodD1nb29nLmh0bWwuU2FmZVVybC5mcm9tRGF0YVVybChlKSkuZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpPT1lP3Q6KGdvb2cuYXNzZXJ0cy5hc3NlcnQoZ29vZy5odG1sLlNBRkVfVVJMX1BBVFRFUk5fLnRlc3QoZSksXCIlcyBkb2VzIG5vdCBtYXRjaCB0aGUgc2FmZSBVUkwgcGF0dGVyblwiLGUpfHwoZT1nb29nLmh0bWwuU2FmZVVybC5JTk5PQ1VPVVNfU1RSSU5HKSxnb29nLmh0bWwuU2FmZVVybC5jcmVhdGVTYWZlVXJsU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpKX0sZ29vZy5odG1sLlNhZmVVcmwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgZ29vZy5odG1sLlNhZmVVcmw7cmV0dXJuIHQucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV89Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1k/Z29vZy5odG1sLnRydXN0ZWR0eXBlcy5QUklWQVRFX0RPX05PVF9BQ0NFU1NfT1JfRUxTRV9QT0xJQ1kuY3JlYXRlVVJMKGUpOmUsdH0sZ29vZy5odG1sLlNhZmVVcmwuQUJPVVRfQkxBTks9Z29vZy5odG1sLlNhZmVVcmwuY3JlYXRlU2FmZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiYWJvdXQ6YmxhbmtcIiksZ29vZy5odG1sLlNhZmVTdHlsZT1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXz1cIlwiLHRoaXMuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89Z29vZy5odG1sLlNhZmVTdHlsZS5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITAsZ29vZy5odG1sLlNhZmVTdHlsZS5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89e30sZ29vZy5odG1sLlNhZmVTdHlsZS5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLmxlbmd0aD9nb29nLmh0bWwuU2FmZVN0eWxlLkVNUFRZOihnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuc3RyaW5nLmludGVybmFsLmVuZHNXaXRoKGUsXCI7XCIpLFwiTGFzdCBjaGFyYWN0ZXIgb2Ygc3R5bGUgc3RyaW5nIGlzIG5vdCAnOyc6IFwiK2UpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoZSxcIjpcIiksXCJTdHlsZSBzdHJpbmcgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSAnOicsIHRvIHNwZWNpZnkgYSBcXFwibmFtZTogdmFsdWVcXFwiIHBhaXI6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSkpfSxnb29nLmh0bWwuU2FmZVN0eWxlLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlX30sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJTYWZlU3R5bGV7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVTdHlsZS51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVTdHlsZSYmZS5TQUZFX1NUWUxFX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU3R5bGUuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXzooZ29vZy5hc3NlcnRzLmZhaWwoXCJleHBlY3RlZCBvYmplY3Qgb2YgdHlwZSBTYWZlU3R5bGUsIGdvdCAnXCIrZStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihlKSksXCJ0eXBlX2Vycm9yOlNhZmVTdHlsZVwiKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU3R5bGUpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oZSl9LGdvb2cuaHRtbC5TYWZlU3R5bGUucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXz1lLHRoaXN9LGdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFk9Z29vZy5odG1sLlNhZmVTdHlsZS5jcmVhdGVTYWZlU3R5bGVTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkc9XCJ6Q2xvc3VyZXpcIixnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZT1mdW5jdGlvbihlKXt2YXIgdCxvPVwiXCI7Zm9yKHQgaW4gZSl7aWYoIS9eWy1fYS16QS1aMC05XSskLy50ZXN0KHQpKXRocm93IEVycm9yKFwiTmFtZSBhbGxvd3Mgb25seSBbLV9hLXpBLVowLTldLCBnb3Q6IFwiK3QpO3ZhciByPWVbdF07bnVsbCE9ciYmKG8rPXQrXCI6XCIrKHI9Z29vZy5pc0FycmF5KHIpP2dvb2cuYXJyYXkubWFwKHIsZ29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVByb3BlcnR5VmFsdWVfKS5qb2luKFwiIFwiKTpnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZV8ocikpK1wiO1wiKX1yZXR1cm4gbz9nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKG8pOmdvb2cuaHRtbC5TYWZlU3R5bGUuRU1QVFl9LGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlXz1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpcmV0dXJuJ3VybChcIicrZ29vZy5odG1sLlNhZmVVcmwudW53cmFwKGUpLnJlcGxhY2UoLzwvZyxcIiUzY1wiKS5yZXBsYWNlKC9bXFxcXFwiXS9nLFwiXFxcXCQmXCIpKydcIiknO2lmKGU9ZSBpbnN0YW5jZW9mIGdvb2cuc3RyaW5nLkNvbnN0P2dvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKTpnb29nLmh0bWwuU2FmZVN0eWxlLnNhbml0aXplUHJvcGVydHlWYWx1ZVN0cmluZ18oU3RyaW5nKGUpKSwvW3s7fV0vLnRlc3QoZSkpdGhyb3cgbmV3IGdvb2cuYXNzZXJ0cy5Bc3NlcnRpb25FcnJvcihcIlZhbHVlIGRvZXMgbm90IGFsbG93IFt7O31dLCBnb3Q6ICVzLlwiLFtlXSk7cmV0dXJuIGV9LGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVQcm9wZXJ0eVZhbHVlU3RyaW5nXz1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5GVU5DVElPTlNfUkVfLFwiJDFcIikucmVwbGFjZShnb29nLmh0bWwuU2FmZVN0eWxlLkZVTkNUSU9OU19SRV8sXCIkMVwiKS5yZXBsYWNlKGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXyxcInVybFwiKTtyZXR1cm4gZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9SRV8udGVzdCh0KT9nb29nLmh0bWwuU2FmZVN0eWxlLkNPTU1FTlRfUkVfLnRlc3QoZSk/KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIGRpc2FsbG93cyBjb21tZW50cywgZ290OiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlLklOTk9DVU9VU19TVFJJTkcpOmdvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRRdW90ZXNfKGUpP2dvb2cuaHRtbC5TYWZlU3R5bGUuaGFzQmFsYW5jZWRTcXVhcmVCcmFja2V0c18oZSk/Z29vZy5odG1sLlNhZmVTdHlsZS5zYW5pdGl6ZVVybF8oZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIHJlcXVpcmVzIGJhbGFuY2VkIHNxdWFyZSBicmFja2V0cyBhbmQgb25lIGlkZW50aWZpZXIgcGVyIHBhaXIgb2YgYnJhY2tldHMsIGdvdDogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJTdHJpbmcgdmFsdWUgcmVxdWlyZXMgYmFsYW5jZWQgcXVvdGVzLCBnb3Q6IFwiK2UpLGdvb2cuaHRtbC5TYWZlU3R5bGUuSU5OT0NVT1VTX1NUUklORyk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiU3RyaW5nIHZhbHVlIGFsbG93cyBvbmx5IFwiK2dvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfQUxMT1dFRF9DSEFSU18rXCIgYW5kIHNpbXBsZSBmdW5jdGlvbnMsIGdvdDogXCIrZSksZ29vZy5odG1sLlNhZmVTdHlsZS5JTk5PQ1VPVVNfU1RSSU5HKX0sZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFF1b3Rlc189ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSEwLG89ITAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJBdChyKTtcIidcIj09biYmbz90PSF0OidcIic9PW4mJnQmJihvPSFvKX1yZXR1cm4gdCYmb30sZ29vZy5odG1sLlNhZmVTdHlsZS5oYXNCYWxhbmNlZFNxdWFyZUJyYWNrZXRzXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITAsbz0vXlstX2EtekEtWjAtOV0kLyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckF0KHIpO2lmKFwiXVwiPT1uKXtpZih0KXJldHVybiExO3Q9ITB9ZWxzZSBpZihcIltcIj09bil7aWYoIXQpcmV0dXJuITE7dD0hMX1lbHNlIGlmKCF0JiYhby50ZXN0KG4pKXJldHVybiExfXJldHVybiB0fSxnb29nLmh0bWwuU2FmZVN0eWxlLlZBTFVFX0FMTE9XRURfQ0hBUlNfPVwiWy0sLlxcXCInJV8hIyBhLXpBLVowLTlcXFxcW1xcXFxdXVwiLGdvb2cuaHRtbC5TYWZlU3R5bGUuVkFMVUVfUkVfPW5ldyBSZWdFeHAoXCJeXCIrZ29vZy5odG1sLlNhZmVTdHlsZS5WQUxVRV9BTExPV0VEX0NIQVJTXytcIiskXCIpLGdvb2cuaHRtbC5TYWZlU3R5bGUuVVJMX1JFXz0vXFxiKHVybFxcKFsgXFx0XFxuXSopKCdbIC0mKC1cXFtcXF0tfl0qJ3xcIlsgISMtXFxbXFxdLX5dKlwifFshIy0mKi1cXFtcXF0tfl0qKShbIFxcdFxcbl0qXFwpKS9nLGdvb2cuaHRtbC5TYWZlU3R5bGUuRlVOQ1RJT05TX1JFXz0vXFxiKGhzbHxoc2xhfHJnYnxyZ2JhfG1hdHJpeHxjYWxjfG1pbm1heHxmaXQtY29udGVudHxyZXBlYXR8KHJvdGF0ZXxzY2FsZXx0cmFuc2xhdGUpKFh8WXxafDNkKT8pXFwoWy0rKi8wLTlhLXouJVxcW1xcXSwgXStcXCkvZyxnb29nLmh0bWwuU2FmZVN0eWxlLkNPTU1FTlRfUkVfPS9cXC9cXCovLGdvb2cuaHRtbC5TYWZlU3R5bGUuc2FuaXRpemVVcmxfPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVTdHlsZS5VUkxfUkVfLChmdW5jdGlvbihlLHQsbyxyKXt2YXIgbj1cIlwiO3JldHVybiBvPW8ucmVwbGFjZSgvXihbJ1wiXSkoLiopXFwxJC8sKGZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbj10LG99KSksZT1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShvKS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCksdCtuK2UrbityfSkpfSxnb29nLmh0bWwuU2FmZVN0eWxlLmNvbmNhdD1mdW5jdGlvbihlKXt2YXIgdD1cIlwiLG89ZnVuY3Rpb24oZSl7Z29vZy5pc0FycmF5KGUpP2dvb2cuYXJyYXkuZm9yRWFjaChlLG8pOnQrPWdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKGUpfTtyZXR1cm4gZ29vZy5hcnJheS5mb3JFYWNoKGFyZ3VtZW50cyxvKSx0P2dvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlU2FmZVN0eWxlU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCk6Z29vZy5odG1sLlNhZmVTdHlsZS5FTVBUWX0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0PWZ1bmN0aW9uKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89XCJcIix0aGlzLlNBRkVfU1RZTEVfU0hFRVRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV99LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz0hMCxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXt9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5jcmVhdGVSdWxlPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5zdHJpbmcuaW50ZXJuYWwuY29udGFpbnMoZSxcIjxcIikpdGhyb3cgRXJyb3IoXCJTZWxlY3RvciBkb2VzIG5vdCBhbGxvdyAnPCcsIGdvdDogXCIrZSk7dmFyIG89ZS5yZXBsYWNlKC8oJ3xcIikoKD8hXFwxKVteXFxyXFxuXFxmXFxcXF18XFxcXFtcXHNcXFNdKSpcXDEvZyxcIlwiKTtpZighL15bLV9hLXpBLVowLTkjLjoqICw+K35bXFxdKCk9XiR8XSskLy50ZXN0KG8pKXRocm93IEVycm9yKFwiU2VsZWN0b3IgYWxsb3dzIG9ubHkgWy1fYS16QS1aMC05Iy46KiAsPit+W1xcXFxdKCk9XiR8XSBhbmQgc3RyaW5ncywgZ290OiBcIitlKTtpZighZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0Lmhhc0JhbGFuY2VkQnJhY2tldHNfKG8pKXRocm93IEVycm9yKFwiKCkgYW5kIFtdIGluIHNlbGVjdG9yIG11c3QgYmUgYmFsYW5jZWQsIGdvdDogXCIrZSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVN0eWxlfHwodD1nb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZSh0KSksZT1lK1wie1wiK2dvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKHQpLnJlcGxhY2UoLzwvZyxcIlxcXFwzQyBcIikrXCJ9XCIsZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZSl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5oYXNCYWxhbmNlZEJyYWNrZXRzXz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e1wiKFwiOlwiKVwiLFwiW1wiOlwiXVwifSxvPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZih0W25dKW8ucHVzaCh0W25dKTtlbHNlIGlmKGdvb2cub2JqZWN0LmNvbnRhaW5zKHQsbikmJm8ucG9wKCkhPW4pcmV0dXJuITF9cmV0dXJuIDA9PW8ubGVuZ3RofSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY29uY2F0PWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCIsbz1mdW5jdGlvbihlKXtnb29nLmlzQXJyYXkoZSk/Z29vZy5hcnJheS5mb3JFYWNoKGUsbyk6dCs9Z29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnVud3JhcChlKX07cmV0dXJuIGdvb2cuYXJyYXkuZm9yRWFjaChhcmd1bWVudHMsbyksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5mcm9tQ29uc3RhbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT1nb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLmxlbmd0aD9nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuRU1QVFk6KGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI8XCIpLFwiRm9yYmlkZGVuICc8JyBjaGFyYWN0ZXIgaW4gc3R5bGUgc2hlZXQgc3RyaW5nOiBcIitlKSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShlKSl9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlX30sZ29vZy5ERUJVRyYmKGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIlNhZmVTdHlsZVNoZWV0e1wiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlU2hlZXRXcmFwcGVkVmFsdWVfK1wifVwifSksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCYmZS5jb25zdHJ1Y3Rvcj09PWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCYmZS5TQUZFX1NUWUxFX1NIRUVUX1RZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz09PWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8/ZS5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV86KGdvb2cuYXNzZXJ0cy5mYWlsKFwiZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgU2FmZVN0eWxlU2hlZXQsIGdvdCAnXCIrZStcIicgb2YgdHlwZSBcIitnb29nLnR5cGVPZihlKSksXCJ0eXBlX2Vycm9yOlNhZmVTdHlsZVNoZWV0XCIpfSxnb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlKXtyZXR1cm4obmV3IGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldCkuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXyhlKX0sZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LnByb3RvdHlwZS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXz1lLHRoaXN9LGdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC5FTVBUWT1nb29nLmh0bWwuU2FmZVN0eWxlU2hlZXQuY3JlYXRlU2FmZVN0eWxlU2hlZXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIlwiKSxnb29nLmxhYnM9e30sZ29vZy5sYWJzLnVzZXJBZ2VudD17fSxnb29nLmxhYnMudXNlckFnZW50LnV0aWw9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldE5hdGl2ZVVzZXJBZ2VudFN0cmluZ189ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF2aWdhdG9yXygpO3JldHVybiBlJiYoZT1lLnVzZXJBZ2VudCk/ZTpcIlwifSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF2aWdhdG9yXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmdsb2JhbC5uYXZpZ2F0b3J9LGdvb2cubGFicy51c2VyQWdlbnQudXRpbC51c2VyQWdlbnRfPWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXROYXRpdmVVc2VyQWdlbnRTdHJpbmdfKCksZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLnNldFVzZXJBZ2VudD1mdW5jdGlvbihlKXtnb29nLmxhYnMudXNlckFnZW50LnV0aWwudXNlckFnZW50Xz1lfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0TmF0aXZlVXNlckFnZW50U3RyaW5nXygpfSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC51c2VyQWdlbnRffSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO3JldHVybiBnb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyh0LGUpfSxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlPWZ1bmN0aW9uKGUpe3ZhciB0PWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5nZXRVc2VyQWdlbnQoKTtyZXR1cm4gZ29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29udGFpbnModCxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxvPS8oXFx3W1xcdyBdKylcXC8oW15cXHNdKylcXHMqKD86XFwoKC4qPylcXCkpPy9nLHI9W107dD1vLmV4ZWMoZSk7KXIucHVzaChbdFsxXSx0WzJdLHRbM118fHZvaWQgMF0pO3JldHVybiByfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXI9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk9wZXJhXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hJRV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiVHJpZGVudFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTVNJRVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUh0bWxfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZ2VcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VDaHJvbWl1bV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiRWRnL1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFDaHJvbWl1bV89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiT1BSXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hGaXJlZm94Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJGaXJlZm94XCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJGeGlPU1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoU2FmYXJpXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJTYWZhcmlcIikmJiEoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ2hyb21lXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hDb2FzdF8oKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXygpfHxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlQ2hyb21pdW1fKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhQ2hyb21pdW1fKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEZpcmVmb3hfKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGsoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQW5kcm9pZFwiKSl9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDb2FzdFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSW9zV2Vidmlld189ZnVuY3Rpb24oKXtyZXR1cm4oZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBhZFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBob25lXCIpKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8oKSYmIWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENvYXN0XygpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF8oKSYmZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQXBwbGVXZWJLaXRcIil9LGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV89ZnVuY3Rpb24oKXtyZXR1cm4oZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ2hyb21lXCIpfHxnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJDcmlPU1wiKSkmJiFnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIubWF0Y2hFZGdlSHRtbF8oKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQW5kcm9pZEJyb3dzZXJfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIikmJiEoZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3goKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmEoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2lsaygpKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzT3BlcmE9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoT3BlcmFfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaElFXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaEVkZ2VIdG1sXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNFZGdlQ2hyb21pdW09Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRWRnZUNocm9taXVtXyxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYUNocm9taXVtPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaE9wZXJhQ2hyb21pdW1fLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0ZpcmVmb3g9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoRmlyZWZveF8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzU2FmYXJpPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaFNhZmFyaV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ29hc3Q9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQ29hc3RfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lvc1dlYnZpZXc9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoSW9zV2Vidmlld18sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQ2hyb21lPWdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5tYXRjaENocm9tZV8sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzQW5kcm9pZEJyb3dzZXI9Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLm1hdGNoQW5kcm9pZEJyb3dzZXJfLGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc1NpbGs9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiU2lsa1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmdldFZlcnNpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPWdvb2cuYXJyYXkuZmluZChlLHIpLG9bZV18fFwiXCJ9dmFyIHQ9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO2lmKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCkpcmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5nZXRJRVZlcnNpb25fKHQpO3Q9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzKHQpO3ZhciBvPXt9O2dvb2cuYXJyYXkuZm9yRWFjaCh0LChmdW5jdGlvbihlKXtvW2VbMF1dPWVbMV19KSk7dmFyIHI9Z29vZy5wYXJ0aWFsKGdvb2cub2JqZWN0LmNvbnRhaW5zS2V5LG8pO3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYSgpP2UoW1wiVmVyc2lvblwiLFwiT3BlcmFcIl0pOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2UoKT9lKFtcIkVkZ2VcIl0pOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2VDaHJvbWl1bSgpP2UoW1wiRWRnXCJdKTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNDaHJvbWUoKT9lKFtcIkNocm9tZVwiLFwiQ3JpT1NcIl0pOih0PXRbMl0pJiZ0WzFdfHxcIlwifSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmludGVybmFsLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0VmVyc2lvbigpLGUpfSxnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuZ2V0SUVWZXJzaW9uXz1mdW5jdGlvbihlKXt2YXIgdD0vcnY6ICooW1xcZFxcLl0qKS8uZXhlYyhlKTtpZih0JiZ0WzFdKXJldHVybiB0WzFdO3Q9XCJcIjt2YXIgbz0vTVNJRSArKFtcXGRcXC5dKykvLmV4ZWMoZSk7aWYobyYmb1sxXSlpZihlPS9UcmlkZW50XFwvKFxcZC5cXGQpLy5leGVjKGUpLFwiNy4wXCI9PW9bMV0paWYoZSYmZVsxXSlzd2l0Y2goZVsxXSl7Y2FzZVwiNC4wXCI6dD1cIjguMFwiO2JyZWFrO2Nhc2VcIjUuMFwiOnQ9XCI5LjBcIjticmVhaztjYXNlXCI2LjBcIjp0PVwiMTAuMFwiO2JyZWFrO2Nhc2VcIjcuMFwiOnQ9XCIxMS4wXCJ9ZWxzZSB0PVwiNy4wXCI7ZWxzZSB0PW9bMV07cmV0dXJuIHR9LGdvb2cuaHRtbC5TYWZlSHRtbD1mdW5jdGlvbigpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfPVwiXCIsdGhpcy5TQUZFX0hUTUxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPWdvb2cuaHRtbC5TYWZlSHRtbC5UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV8sdGhpcy5kaXJfPW51bGx9LGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyX30sZ29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwLGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXy50b1N0cmluZygpfSxnb29nLkRFQlVHJiYoZ29vZy5odG1sLlNhZmVIdG1sLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiU2FmZUh0bWx7XCIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV8rXCJ9XCJ9KSxnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwVHJ1c3RlZEhUTUwoZSkudG9TdHJpbmcoKX0sZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sJiZlLmNvbnN0cnVjdG9yPT09Z29vZy5odG1sLlNhZmVIdG1sJiZlLlNBRkVfSFRNTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89PT1nb29nLmh0bWwuU2FmZUh0bWwuVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfP2UucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfOihnb29nLmFzc2VydHMuZmFpbChcImV4cGVjdGVkIG9iamVjdCBvZiB0eXBlIFNhZmVIdG1sLCBnb3QgJ1wiK2UrXCInIG9mIHR5cGUgXCIrZ29vZy50eXBlT2YoZSkpLFwidHlwZV9lcnJvcjpTYWZlSHRtbFwiKX0sZ29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlSHRtbClyZXR1cm4gZTt2YXIgdD1cIm9iamVjdFwiPT10eXBlb2YgZSxvPW51bGw7cmV0dXJuIHQmJmUuaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nJiYobz1lLmdldERpcmVjdGlvbigpKSxlPXQmJmUuaW1wbGVtZW50c0dvb2dTdHJpbmdUeXBlZFN0cmluZz9lLmdldFR5cGVkU3RyaW5nVmFsdWUoKTpTdHJpbmcoZSksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwuaHRtbEVzY2FwZShlKSxvKX0sZ29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGVQcmVzZXJ2aW5nTmV3bGluZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZUh0bWw/ZTooZT1nb29nLmh0bWwuU2FmZUh0bWwuaHRtbEVzY2FwZShlKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShnb29nLnN0cmluZy5pbnRlcm5hbC5uZXdMaW5lVG9Ccihnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGUpKSxlLmdldERpcmVjdGlvbigpKSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlUHJlc2VydmluZ05ld2xpbmVzQW5kU3BhY2VzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVIdG1sP2U6KGU9Z29vZy5odG1sLlNhZmVIdG1sLmh0bWxFc2NhcGUoZSksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoZ29vZy5zdHJpbmcuaW50ZXJuYWwud2hpdGVzcGFjZUVzY2FwZShnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGUpKSxlLmdldERpcmVjdGlvbigpKSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5mcm9tPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlLGdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfPS9eW2EtekEtWjAtOS1dKyQvLGdvb2cuaHRtbC5TYWZlSHRtbC5VUkxfQVRUUklCVVRFU189e2FjdGlvbjohMCxjaXRlOiEwLGRhdGE6ITAsZm9ybWFjdGlvbjohMCxocmVmOiEwLG1hbmlmZXN0OiEwLHBvc3RlcjohMCxzcmM6ITB9LGdvb2cuaHRtbC5TYWZlSHRtbC5OT1RfQUxMT1dFRF9UQUdfTkFNRVNfPXtBUFBMRVQ6ITAsQkFTRTohMCxFTUJFRDohMCxJRlJBTUU6ITAsTElOSzohMCxNQVRIOiEwLE1FVEE6ITAsT0JKRUNUOiEwLFNDUklQVDohMCxTVFlMRTohMCxTVkc6ITAsVEVNUExBVEU6ITB9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBnb29nLmh0bWwuU2FmZUh0bWwudmVyaWZ5VGFnTmFtZShTdHJpbmcoZSkpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFN0cmluZyhlKSx0LG8pfSxnb29nLmh0bWwuU2FmZUh0bWwudmVyaWZ5VGFnTmFtZT1mdW5jdGlvbihlKXtpZighZ29vZy5odG1sLlNhZmVIdG1sLlZBTElEX05BTUVTX0lOX1RBR18udGVzdChlKSl0aHJvdyBFcnJvcihcIkludmFsaWQgdGFnIG5hbWUgPFwiK2UrXCI+LlwiKTtpZihlLnRvVXBwZXJDYXNlKClpbiBnb29nLmh0bWwuU2FmZUh0bWwuTk9UX0FMTE9XRURfVEFHX05BTUVTXyl0aHJvdyBFcnJvcihcIlRhZyBuYW1lIDxcIitlK1wiPiBpcyBub3QgYWxsb3dlZCBmb3IgU2FmZUh0bWwuXCIpfSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlSWZyYW1lPWZ1bmN0aW9uKGUsdCxvLHIpe2UmJmdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwKGUpO3ZhciBuPXt9O3JldHVybiBuLnNyYz1lfHxudWxsLG4uc3JjZG9jPXQmJmdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAodCksZT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMobix7c2FuZGJveDpcIlwifSxvKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImlmcmFtZVwiLGUscil9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYW5kYm94SWZyYW1lPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKCFnb29nLmh0bWwuU2FmZUh0bWwuY2FuVXNlU2FuZGJveElmcmFtZSgpKXRocm93IEVycm9yKFwiVGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzYW5kYm94ZWQgaWZyYW1lcy5cIik7dmFyIG49e307cmV0dXJuIG4uc3JjPWU/Z29vZy5odG1sLlNhZmVVcmwudW53cmFwKGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplKGUpKTpudWxsLG4uc3JjZG9jPXR8fG51bGwsbi5zYW5kYm94PVwiXCIsZT1nb29nLmh0bWwuU2FmZUh0bWwuY29tYmluZUF0dHJpYnV0ZXMobix7fSxvKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcImlmcmFtZVwiLGUscil9LGdvb2cuaHRtbC5TYWZlSHRtbC5jYW5Vc2VTYW5kYm94SWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZ2xvYmFsLkhUTUxJRnJhbWVFbGVtZW50JiZcInNhbmRib3hcImluIGdvb2cuZ2xvYmFsLkhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZX0sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNjcmlwdFNyYz1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcChlKSxlPWdvb2cuaHRtbC5TYWZlSHRtbC5jb21iaW5lQXR0cmlidXRlcyh7c3JjOmV9LHt9LHQpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFRhZ1NlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwic2NyaXB0XCIsZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG8gaW4gdCl7dmFyIHI9by50b0xvd2VyQ2FzZSgpO2lmKFwibGFuZ3VhZ2VcIj09cnx8XCJzcmNcIj09cnx8XCJ0ZXh0XCI9PXJ8fFwidHlwZVwiPT1yKXRocm93IEVycm9yKCdDYW5ub3Qgc2V0IFwiJytyKydcIiBhdHRyaWJ1dGUnKX1mb3Iobz1cIlwiLGU9Z29vZy5hcnJheS5jb25jYXQoZSkscj0wO3I8ZS5sZW5ndGg7cisrKW8rPWdvb2cuaHRtbC5TYWZlU2NyaXB0LnVud3JhcChlW3JdKTtyZXR1cm4gZT1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShvLGdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxUYWdTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcInNjcmlwdFwiLHQsZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTdHlsZT1mdW5jdGlvbihlLHQpe3Q9Z29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzKHt0eXBlOlwidGV4dC9jc3NcIn0se30sdCk7dmFyIG89XCJcIjtlPWdvb2cuYXJyYXkuY29uY2F0KGUpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKW8rPWdvb2cuaHRtbC5TYWZlU3R5bGVTaGVldC51bndyYXAoZVtyXSk7cmV0dXJuIGU9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2Uobyxnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJzdHlsZVwiLHQsZSl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVNZXRhUmVmcmVzaD1mdW5jdGlvbihlLHQpe3JldHVybiBlPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcChnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShlKSksKGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0lFKCl8fGdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0VkZ2UoKSkmJmdvb2cuc3RyaW5nLmludGVybmFsLmNvbnRhaW5zKGUsXCI7XCIpJiYoZT1cIidcIitlLnJlcGxhY2UoLycvZyxcIiUyN1wiKStcIidcIiksZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCJtZXRhXCIse1wiaHR0cC1lcXVpdlwiOlwicmVmcmVzaFwiLGNvbnRlbnQ6KHR8fDApK1wiOyB1cmw9XCIrZX0pfSxnb29nLmh0bWwuU2FmZUh0bWwuZ2V0QXR0ck5hbWVBbmRWYWx1ZV89ZnVuY3Rpb24oZSx0LG8pe2lmKG8gaW5zdGFuY2VvZiBnb29nLnN0cmluZy5Db25zdClvPWdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChvKTtlbHNlIGlmKFwic3R5bGVcIj09dC50b0xvd2VyQ2FzZSgpKW89Z29vZy5odG1sLlNhZmVIdG1sLmdldFN0eWxlVmFsdWVfKG8pO2Vsc2V7aWYoL15vbi9pLnRlc3QodCkpdGhyb3cgRXJyb3IoJ0F0dHJpYnV0ZSBcIicrdCsnXCIgcmVxdWlyZXMgZ29vZy5zdHJpbmcuQ29uc3QgdmFsdWUsIFwiJytvKydcIiBnaXZlbi4nKTtpZih0LnRvTG93ZXJDYXNlKClpbiBnb29nLmh0bWwuU2FmZUh0bWwuVVJMX0FUVFJJQlVURVNfKWlmKG8gaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsKW89Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXAobyk7ZWxzZSBpZihvIGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpbz1nb29nLmh0bWwuU2FmZVVybC51bndyYXAobyk7ZWxzZXtpZighZ29vZy5pc1N0cmluZyhvKSl0aHJvdyBFcnJvcignQXR0cmlidXRlIFwiJyt0KydcIiBvbiB0YWcgXCInK2UrJ1wiIHJlcXVpcmVzIGdvb2cuaHRtbC5TYWZlVXJsLCBnb29nLnN0cmluZy5Db25zdCwgb3Igc3RyaW5nLCB2YWx1ZSBcIicrbysnXCIgZ2l2ZW4uJyk7bz1nb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZShvKS5nZXRUeXBlZFN0cmluZ1ZhbHVlKCl9fXJldHVybiBvLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmcmJihvPW8uZ2V0VHlwZWRTdHJpbmdWYWx1ZSgpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaXNTdHJpbmcobyl8fGdvb2cuaXNOdW1iZXIobyksXCJTdHJpbmcgb3IgbnVtYmVyIHZhbHVlIGV4cGVjdGVkLCBnb3QgXCIrdHlwZW9mIG8rXCIgd2l0aCB2YWx1ZTogXCIrbyksdCsnPVwiJytnb29nLnN0cmluZy5pbnRlcm5hbC5odG1sRXNjYXBlKFN0cmluZyhvKSkrJ1wiJ30sZ29vZy5odG1sLlNhZmVIdG1sLmdldFN0eWxlVmFsdWVfPWZ1bmN0aW9uKGUpe2lmKCFnb29nLmlzT2JqZWN0KGUpKXRocm93IEVycm9yKCdUaGUgXCJzdHlsZVwiIGF0dHJpYnV0ZSByZXF1aXJlcyBnb29nLmh0bWwuU2FmZVN0eWxlIG9yIG1hcCBvZiBzdHlsZSBwcm9wZXJ0aWVzLCAnK3R5cGVvZiBlK1wiIGdpdmVuOiBcIitlKTtyZXR1cm4gZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlU3R5bGV8fChlPWdvb2cuaHRtbC5TYWZlU3R5bGUuY3JlYXRlKGUpKSxnb29nLmh0bWwuU2FmZVN0eWxlLnVud3JhcChlKX0sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVdpdGhEaXI9ZnVuY3Rpb24oZSx0LG8scil7cmV0dXJuKHQ9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZSh0LG8scikpLmRpcl89ZSx0fSxnb29nLmh0bWwuU2FmZUh0bWwuam9pbj1mdW5jdGlvbihlLHQpe3ZhciBvPShlPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGUpKS5nZXREaXJlY3Rpb24oKSxyPVtdLG49ZnVuY3Rpb24oZSl7Z29vZy5pc0FycmF5KGUpP2dvb2cuYXJyYXkuZm9yRWFjaChlLG4pOihlPWdvb2cuaHRtbC5TYWZlSHRtbC5odG1sRXNjYXBlKGUpLHIucHVzaChnb29nLmh0bWwuU2FmZUh0bWwudW53cmFwKGUpKSxlPWUuZ2V0RGlyZWN0aW9uKCksbz09Z29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUw/bz1lOmUhPWdvb2cuaTE4bi5iaWRpLkRpci5ORVVUUkFMJiZvIT1lJiYobz1udWxsKSl9O3JldHVybiBnb29nLmFycmF5LmZvckVhY2godCxuKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShyLmpvaW4oZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcChlKSksbyl9LGdvb2cuaHRtbC5TYWZlSHRtbC5jb25jYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuaHRtbC5TYWZlSHRtbC5qb2luKGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKX0sZ29vZy5odG1sLlNhZmVIdG1sLmNvbmNhdFdpdGhEaXI9ZnVuY3Rpb24oZSx0KXt2YXIgbz1nb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0KGdvb2cuYXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKTtyZXR1cm4gby5kaXJfPWUsb30sZ29vZy5odG1sLlNhZmVIdG1sLlRZUEVfTUFSS0VSX0dPT0dfSFRNTF9TRUNVUklUWV9QUklWQVRFXz17fSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZT1mdW5jdGlvbihlLHQpe3JldHVybihuZXcgZ29vZy5odG1sLlNhZmVIdG1sKS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGUsdCl9LGdvb2cuaHRtbC5TYWZlSHRtbC5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXz1nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWT9nb29nLmh0bWwudHJ1c3RlZHR5cGVzLlBSSVZBVEVfRE9fTk9UX0FDQ0VTU19PUl9FTFNFX1BPTElDWS5jcmVhdGVIVE1MKGUpOmUsdGhpcy5kaXJfPXQsdGhpc30sZ29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sVGFnU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2U9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPW51bGwsbj1cIjxcIitlK2dvb2cuaHRtbC5TYWZlSHRtbC5zdHJpbmdpZnlBdHRyaWJ1dGVzKGUsdCk7cmV0dXJuIGdvb2cuaXNEZWZBbmROb3ROdWxsKG8pP2dvb2cuaXNBcnJheShvKXx8KG89W29dKTpvPVtdLGdvb2cuZG9tLnRhZ3MuaXNWb2lkVGFnKGUudG9Mb3dlckNhc2UoKSk/KGdvb2cuYXNzZXJ0cy5hc3NlcnQoIW8ubGVuZ3RoLFwiVm9pZCB0YWcgPFwiK2UrXCI+IGRvZXMgbm90IGFsbG93IGNvbnRlbnQuXCIpLG4rPVwiPlwiKToocj1nb29nLmh0bWwuU2FmZUh0bWwuY29uY2F0KG8pLG4rPVwiPlwiK2dvb2cuaHRtbC5TYWZlSHRtbC51bndyYXAocikrXCI8L1wiK2UrXCI+XCIscj1yLmdldERpcmVjdGlvbigpKSwoZT10JiZ0LmRpcikmJihyPS9eKGx0cnxydGx8YXV0bykkL2kudGVzdChlKT9nb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTDpudWxsKSxnb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShuLHIpfSxnb29nLmh0bWwuU2FmZUh0bWwuc3RyaW5naWZ5QXR0cmlidXRlcz1mdW5jdGlvbihlLHQpe3ZhciBvPVwiXCI7aWYodClmb3IodmFyIHIgaW4gdCl7aWYoIWdvb2cuaHRtbC5TYWZlSHRtbC5WQUxJRF9OQU1FU19JTl9UQUdfLnRlc3QocikpdGhyb3cgRXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWUgXCInK3IrJ1wiLicpO3ZhciBuPXRbcl07Z29vZy5pc0RlZkFuZE5vdE51bGwobikmJihvKz1cIiBcIitnb29nLmh0bWwuU2FmZUh0bWwuZ2V0QXR0ck5hbWVBbmRWYWx1ZV8oZSxyLG4pKX1yZXR1cm4gb30sZ29vZy5odG1sLlNhZmVIdG1sLmNvbWJpbmVBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcixuPXt9O2ZvcihyIGluIGUpZ29vZy5hc3NlcnRzLmFzc2VydChyLnRvTG93ZXJDYXNlKCk9PXIsXCJNdXN0IGJlIGxvd2VyIGNhc2VcIiksbltyXT1lW3JdO2ZvcihyIGluIHQpZ29vZy5hc3NlcnRzLmFzc2VydChyLnRvTG93ZXJDYXNlKCk9PXIsXCJNdXN0IGJlIGxvd2VyIGNhc2VcIiksbltyXT10W3JdO2ZvcihyIGluIG8pe3ZhciBzPXIudG9Mb3dlckNhc2UoKTtpZihzIGluIGUpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBvdmVycmlkZSBcIicrcysnXCIgYXR0cmlidXRlLCBnb3QgXCInK3IrJ1wiIHdpdGggdmFsdWUgXCInK29bcl0rJ1wiJyk7cyBpbiB0JiZkZWxldGUgbltzXSxuW3JdPW9bcl19cmV0dXJuIG59LGdvb2cuaHRtbC5TYWZlSHRtbC5ET0NUWVBFX0hUTUw9Z29vZy5odG1sLlNhZmVIdG1sLmNyZWF0ZVNhZmVIdG1sU2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UoXCI8IURPQ1RZUEUgaHRtbD5cIixnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLlNhZmVIdG1sLkVNUFRZPWdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKFwiXCIsZ29vZy5pMThuLmJpZGkuRGlyLk5FVVRSQUwpLGdvb2cuaHRtbC5TYWZlSHRtbC5CUj1nb29nLmh0bWwuU2FmZUh0bWwuY3JlYXRlU2FmZUh0bWxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZShcIjxicj5cIixnb29nLmkxOG4uYmlkaS5EaXIuTkVVVFJBTCksZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zPXt9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlSHRtbEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlSHRtbC5jcmVhdGVTYWZlSHRtbFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQsb3x8bnVsbCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlU2NyaXB0RnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlU2NyaXB0LmNyZWF0ZVNhZmVTY3JpcHRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVTdHlsZUZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuU2FmZVN0eWxlLmNyZWF0ZVNhZmVTdHlsZVNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVN0eWxlU2hlZXRGcm9tU3RyaW5nS25vd25Ub1NhdGlzZnlUeXBlQ29udHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydFN0cmluZyhnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSksXCJtdXN0IHByb3ZpZGUganVzdGlmaWNhdGlvblwiKSxnb29nLmFzc2VydHMuYXNzZXJ0KCFnb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSksXCJtdXN0IHByb3ZpZGUgbm9uLWVtcHR5IGp1c3RpZmljYXRpb25cIiksZ29vZy5odG1sLlNhZmVTdHlsZVNoZWV0LmNyZWF0ZVNhZmVTdHlsZVNoZWV0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2UodCl9LGdvb2cuaHRtbC51bmNoZWNrZWRjb252ZXJzaW9ucy5zYWZlVXJsRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnRTdHJpbmcoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpLFwibXVzdCBwcm92aWRlIGp1c3RpZmljYXRpb25cIiksZ29vZy5hc3NlcnRzLmFzc2VydCghZ29vZy5zdHJpbmcuaW50ZXJuYWwuaXNFbXB0eU9yV2hpdGVzcGFjZShnb29nLnN0cmluZy5Db25zdC51bndyYXAoZSkpLFwibXVzdCBwcm92aWRlIG5vbi1lbXB0eSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuaHRtbC5TYWZlVXJsLmNyZWF0ZVNhZmVVcmxTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZSh0KX0sZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnRydXN0ZWRSZXNvdXJjZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0U3RyaW5nKGdvb2cuc3RyaW5nLkNvbnN0LnVud3JhcChlKSxcIm11c3QgcHJvdmlkZSBqdXN0aWZpY2F0aW9uXCIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cuc3RyaW5nLmludGVybmFsLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcuQ29uc3QudW53cmFwKGUpKSxcIm11c3QgcHJvdmlkZSBub24tZW1wdHkganVzdGlmaWNhdGlvblwiKSxnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLmNyZWF0ZVRydXN0ZWRSZXNvdXJjZVVybFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlKHQpfSxnb29nLmRvbS5zYWZlPXt9LGdvb2cuZG9tLnNhZmUuSW5zZXJ0QWRqYWNlbnRIdG1sUG9zaXRpb249e0FGVEVSQkVHSU46XCJhZnRlcmJlZ2luXCIsQUZURVJFTkQ6XCJhZnRlcmVuZFwiLEJFRk9SRUJFR0lOOlwiYmVmb3JlYmVnaW5cIixCRUZPUkVFTkQ6XCJiZWZvcmVlbmRcIn0sZ29vZy5kb20uc2FmZS5pbnNlcnRBZGphY2VudEh0bWw9ZnVuY3Rpb24oZSx0LG8pe2UuaW5zZXJ0QWRqYWNlbnRIVE1MKHQsZ29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKG8pKX0sZ29vZy5kb20uc2FmZS5TRVRfSU5ORVJfSFRNTF9ESVNBTExPV0VEX1RBR1NfPXtNQVRIOiEwLFNDUklQVDohMCxTVFlMRTohMCxTVkc6ITAsVEVNUExBVEU6ITB9LGdvb2cuZG9tLnNhZmUuaXNJbm5lckh0bWxDbGVhbnVwUmVjdXJzaXZlXz1nb29nLmZ1bmN0aW9ucy5jYWNoZVJldHVyblZhbHVlKChmdW5jdGlvbigpe2lmKGdvb2cuREVCVUcmJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudClyZXR1cm4hMTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxlLmFwcGVuZENoaWxkKHQpLCEoZ29vZy5ERUJVRyYmIWUuZmlyc3RDaGlsZHx8KHQ9ZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQsZS5pbm5lckhUTUw9Z29vZy5odG1sLlNhZmVIdG1sLnVud3JhcFRydXN0ZWRIVE1MKGdvb2cuaHRtbC5TYWZlSHRtbC5FTVBUWSksdC5wYXJlbnRFbGVtZW50KSl9KSksZ29vZy5kb20uc2FmZS51bnNhZmVTZXRJbm5lckh0bWxEb05vdFVzZU9yRWxzZT1mdW5jdGlvbihlLHQpe2lmKGdvb2cuZG9tLnNhZmUuaXNJbm5lckh0bWxDbGVhbnVwUmVjdXJzaXZlXygpKWZvcig7ZS5sYXN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5sYXN0Q2hpbGQpO2UuaW5uZXJIVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRJbm5lckh0bWw9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmFzc2VydHMuRU5BQkxFX0FTU0VSVFMpe3ZhciBvPWUudGFnTmFtZS50b1VwcGVyQ2FzZSgpO2lmKGdvb2cuZG9tLnNhZmUuU0VUX0lOTkVSX0hUTUxfRElTQUxMT1dFRF9UQUdTX1tvXSl0aHJvdyBFcnJvcihcImdvb2cuZG9tLnNhZmUuc2V0SW5uZXJIdG1sIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBjb250ZW50IG9mIFwiK2UudGFnTmFtZStcIi5cIil9Z29vZy5kb20uc2FmZS51bnNhZmVTZXRJbm5lckh0bWxEb05vdFVzZU9yRWxzZShlLHQpfSxnb29nLmRvbS5zYWZlLnNldE91dGVySHRtbD1mdW5jdGlvbihlLHQpe2Uub3V0ZXJIVE1MPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRGb3JtRWxlbWVudEFjdGlvbj1mdW5jdGlvbihlLHQpe3Q9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxGb3JtRWxlbWVudChlKS5hY3Rpb249Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRCdXR0b25Gb3JtQWN0aW9uPWZ1bmN0aW9uKGUsdCl7dD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzSFRNTEJ1dHRvbkVsZW1lbnQoZSkuZm9ybUFjdGlvbj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldElucHV0Rm9ybUFjdGlvbj1mdW5jdGlvbihlLHQpe3Q9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbnB1dEVsZW1lbnQoZSkuZm9ybUFjdGlvbj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldFN0eWxlPWZ1bmN0aW9uKGUsdCl7ZS5zdHlsZS5jc3NUZXh0PWdvb2cuaHRtbC5TYWZlU3R5bGUudW53cmFwKHQpfSxnb29nLmRvbS5zYWZlLmRvY3VtZW50V3JpdGU9ZnVuY3Rpb24oZSx0KXtlLndyaXRlKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTCh0KSl9LGdvb2cuZG9tLnNhZmUuc2V0QW5jaG9ySHJlZj1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MQW5jaG9yRWxlbWVudChlKSx0PXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuU2FmZVVybD90Omdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpLGUuaHJlZj1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEltYWdlU3JjPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJbWFnZUVsZW1lbnQoZSksISh0IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpKXt2YXIgbz0vXmRhdGE6aW1hZ2VcXC8vaS50ZXN0KHQpO3Q9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCxvKX1lLnNyYz1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEF1ZGlvU3JjPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxBdWRpb0VsZW1lbnQoZSksISh0IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpKXt2YXIgbz0vXmRhdGE6YXVkaW9cXC8vaS50ZXN0KHQpO3Q9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCxvKX1lLnNyYz1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldFZpZGVvU3JjPWZ1bmN0aW9uKGUsdCl7aWYoZ29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxWaWRlb0VsZW1lbnQoZSksISh0IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmwpKXt2YXIgbz0vXmRhdGE6dmlkZW9cXC8vaS50ZXN0KHQpO3Q9Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCxvKX1lLnNyYz1nb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEVtYmVkU3JjPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxFbWJlZEVsZW1lbnQoZSksZS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkU2NyaXB0VVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldEZyYW1lU3JjPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxGcmFtZUVsZW1lbnQoZSksZS5zcmM9Z29vZy5odG1sLlRydXN0ZWRSZXNvdXJjZVVybC51bndyYXBUcnVzdGVkVVJMKHQpfSxnb29nLmRvbS5zYWZlLnNldElmcmFtZVNyYz1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MSUZyYW1lRWxlbWVudChlKSxlLnNyYz1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SWZyYW1lU3JjZG9jPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxJRnJhbWVFbGVtZW50KGUpLGUuc3JjZG9jPWdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTCh0KX0sZ29vZy5kb20uc2FmZS5zZXRMaW5rSHJlZkFuZFJlbD1mdW5jdGlvbihlLHQsbyl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxMaW5rRWxlbWVudChlKSxlLnJlbD1vLGdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zKG8sXCJzdHlsZXNoZWV0XCIpPyhnb29nLmFzc2VydHMuYXNzZXJ0KHQgaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLCdVUkwgbXVzdCBiZSBUcnVzdGVkUmVzb3VyY2VVcmwgYmVjYXVzZSBcInJlbFwiIGNvbnRhaW5zIFwic3R5bGVzaGVldFwiJyksZS5ocmVmPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTCh0KSk6ZS5ocmVmPXQgaW5zdGFuY2VvZiBnb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsP2dvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFVSTCh0KTp0IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/Z29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KTpnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKGdvb2cuaHRtbC5TYWZlVXJsLnNhbml0aXplQXNzZXJ0VW5jaGFuZ2VkKHQpKX0sZ29vZy5kb20uc2FmZS5zZXRPYmplY3REYXRhPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxPYmplY3RFbGVtZW50KGUpLGUuZGF0YT1nb29nLmh0bWwuVHJ1c3RlZFJlc291cmNlVXJsLnVud3JhcFRydXN0ZWRTY3JpcHRVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0U2NyaXB0U3JjPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0hUTUxTY3JpcHRFbGVtZW50KGUpLGUuc3JjPWdvb2cuaHRtbC5UcnVzdGVkUmVzb3VyY2VVcmwudW53cmFwVHJ1c3RlZFNjcmlwdFVSTCh0KSwodD1nb29nLmdldFNjcmlwdE5vbmNlKCkpJiZlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsdCl9LGdvb2cuZG9tLnNhZmUuc2V0U2NyaXB0Q29udGVudD1mdW5jdGlvbihlLHQpe2dvb2cuZG9tLmFzc2VydHMuYXNzZXJ0SXNIVE1MU2NyaXB0RWxlbWVudChlKSxlLnRleHQ9Z29vZy5odG1sLlNhZmVTY3JpcHQudW53cmFwVHJ1c3RlZFNjcmlwdCh0KSwodD1nb29nLmdldFNjcmlwdE5vbmNlKCkpJiZlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsdCl9LGdvb2cuZG9tLnNhZmUuc2V0TG9jYXRpb25IcmVmPWZ1bmN0aW9uKGUsdCl7Z29vZy5kb20uYXNzZXJ0cy5hc3NlcnRJc0xvY2F0aW9uKGUpLHQ9dCBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP3Q6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQodCksZS5ocmVmPWdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwodCl9LGdvb2cuZG9tLnNhZmUuYXNzaWduTG9jYXRpb249ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzTG9jYXRpb24oZSksdD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxlLmFzc2lnbihnb29nLmh0bWwuU2FmZVVybC51bndyYXBUcnVzdGVkVVJMKHQpKX0sZ29vZy5kb20uc2FmZS5yZXBsYWNlTG9jYXRpb249ZnVuY3Rpb24oZSx0KXtnb29nLmRvbS5hc3NlcnRzLmFzc2VydElzTG9jYXRpb24oZSksdD10IGluc3RhbmNlb2YgZ29vZy5odG1sLlNhZmVVcmw/dDpnb29nLmh0bWwuU2FmZVVybC5zYW5pdGl6ZUFzc2VydFVuY2hhbmdlZCh0KSxlLnJlcGxhY2UoZ29vZy5odG1sLlNhZmVVcmwudW53cmFwVHJ1c3RlZFVSTCh0KSl9LGdvb2cuZG9tLnNhZmUub3BlbkluV2luZG93PWZ1bmN0aW9uKGUsdCxvLHIsbil7cmV0dXJuIGU9ZSBpbnN0YW5jZW9mIGdvb2cuaHRtbC5TYWZlVXJsP2U6Z29vZy5odG1sLlNhZmVVcmwuc2FuaXRpemVBc3NlcnRVbmNoYW5nZWQoZSksKHR8fGdvb2cuZ2xvYmFsKS5vcGVuKGdvb2cuaHRtbC5TYWZlVXJsLnVud3JhcFRydXN0ZWRVUkwoZSksbz9nb29nLnN0cmluZy5Db25zdC51bndyYXAobyk6XCJcIixyLG4pfSxnb29nLmRvbS5zYWZlLnBhcnNlRnJvbVN0cmluZ0h0bWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5kb20uc2FmZS5wYXJzZUZyb21TdHJpbmcoZSx0LFwidGV4dC9odG1sXCIpfSxnb29nLmRvbS5zYWZlLnBhcnNlRnJvbVN0cmluZz1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGUucGFyc2VGcm9tU3RyaW5nKGdvb2cuaHRtbC5TYWZlSHRtbC51bndyYXBUcnVzdGVkSFRNTCh0KSxvKX0sZ29vZy5kb20uc2FmZS5jcmVhdGVJbWFnZUZyb21CbG9iPWZ1bmN0aW9uKGUpe2lmKCEvXmltYWdlXFwvLiovZy50ZXN0KGUudHlwZSkpdGhyb3cgRXJyb3IoXCJnb29nLmRvbS5zYWZlLmNyZWF0ZUltYWdlRnJvbUJsb2Igb25seSBhY2NlcHRzIE1JTUUgdHlwZSBpbWFnZS8uKi5cIik7dmFyIHQ9Z29vZy5nbG9iYWwuVVJMLmNyZWF0ZU9iamVjdFVSTChlKTtyZXR1cm4oZT1uZXcgZ29vZy5nbG9iYWwuSW1hZ2UpLm9ubG9hZD1mdW5jdGlvbigpe2dvb2cuZ2xvYmFsLlVSTC5yZXZva2VPYmplY3RVUkwodCl9LGdvb2cuZG9tLnNhZmUuc2V0SW1hZ2VTcmMoZSxnb29nLmh0bWwudW5jaGVja2VkY29udmVyc2lvbnMuc2FmZVVybEZyb21TdHJpbmdLbm93blRvU2F0aXNmeVR5cGVDb250cmFjdChnb29nLnN0cmluZy5Db25zdC5mcm9tKFwiSW1hZ2UgYmxvYiBVUkwuXCIpLHQpKSxlfSxnb29nLnN0cmluZy5ERVRFQ1RfRE9VQkxFX0VTQ0FQSU5HPSExLGdvb2cuc3RyaW5nLkZPUkNFX05PTl9ET01fSFRNTF9VTkVTQ0FQSU5HPSExLGdvb2cuc3RyaW5nLlVuaWNvZGU9e05CU1A6XCLCoFwifSxnb29nLnN0cmluZy5zdGFydHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLnN0YXJ0c1dpdGgsZ29vZy5zdHJpbmcuZW5kc1dpdGg9Z29vZy5zdHJpbmcuaW50ZXJuYWwuZW5kc1dpdGgsZ29vZy5zdHJpbmcuY2FzZUluc2Vuc2l0aXZlU3RhcnRzV2l0aD1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVTdGFydHNXaXRoLGdvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUVuZHNXaXRoPWdvb2cuc3RyaW5nLmludGVybmFsLmNhc2VJbnNlbnNpdGl2ZUVuZHNXaXRoLGdvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUVxdWFscz1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVFcXVhbHMsZ29vZy5zdHJpbmcuc3Vicz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1lLnNwbGl0KFwiJXNcIikscj1cIlwiLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO24ubGVuZ3RoJiYxPG8ubGVuZ3RoOylyKz1vLnNoaWZ0KCkrbi5zaGlmdCgpO3JldHVybiByK28uam9pbihcIiVzXCIpfSxnb29nLnN0cmluZy5jb2xsYXBzZVdoaXRlc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcc1xceGEwXSsvZyxcIiBcIikucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX0sZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZT1nb29nLnN0cmluZy5pbnRlcm5hbC5pc0VtcHR5T3JXaGl0ZXNwYWNlLGdvb2cuc3RyaW5nLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PWUubGVuZ3RofSxnb29nLnN0cmluZy5pc0VtcHR5PWdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2UsZ29vZy5zdHJpbmcuaXNFbXB0eU9yV2hpdGVzcGFjZVNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmlzRW1wdHlPcldoaXRlc3BhY2UoZ29vZy5zdHJpbmcubWFrZVNhZmUoZSkpfSxnb29nLnN0cmluZy5pc0VtcHR5U2FmZT1nb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlU2FmZSxnb29nLnN0cmluZy5pc0JyZWFraW5nV2hpdGVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4hL1teXFx0XFxuXFxyIF0vLnRlc3QoZSl9LGdvb2cuc3RyaW5nLmlzQWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXmEtekEtWl0vLnRlc3QoZSl9LGdvb2cuc3RyaW5nLmlzTnVtZXJpYz1mdW5jdGlvbihlKXtyZXR1cm4hL1teMC05XS8udGVzdChlKX0sZ29vZy5zdHJpbmcuaXNBbHBoYU51bWVyaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXmEtekEtWjAtOV0vLnRlc3QoZSl9LGdvb2cuc3RyaW5nLmlzU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuXCIgXCI9PWV9LGdvb2cuc3RyaW5nLmlzVW5pY29kZUNoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PWUubGVuZ3RoJiZcIiBcIjw9ZSYmXCJ+XCI+PWV8fFwiwoBcIjw9ZSYmXCLvv71cIj49ZX0sZ29vZy5zdHJpbmcuc3RyaXBOZXdsaW5lcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pKy9nLFwiIFwiKX0sZ29vZy5zdHJpbmcuY2Fub25pY2FsaXplTmV3bGluZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKFxcclxcbnxcXHJ8XFxuKS9nLFwiXFxuXCIpfSxnb29nLnN0cmluZy5ub3JtYWxpemVXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xceGEwfFxccy9nLFwiIFwiKX0sZ29vZy5zdHJpbmcubm9ybWFsaXplU3BhY2VzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xceGEwfFsgXFx0XSsvZyxcIiBcIil9LGdvb2cuc3RyaW5nLmNvbGxhcHNlQnJlYWtpbmdTcGFjZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcdFxcclxcbiBdKy9nLFwiIFwiKS5yZXBsYWNlKC9eW1xcdFxcclxcbiBdK3xbXFx0XFxyXFxuIF0rJC9nLFwiXCIpfSxnb29nLnN0cmluZy50cmltPWdvb2cuc3RyaW5nLmludGVybmFsLnRyaW0sZ29vZy5zdHJpbmcudHJpbUxlZnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltcXHNcXHhhMF0rLyxcIlwiKX0sZ29vZy5zdHJpbmcudHJpbVJpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXHNcXHhhMF0rJC8sXCJcIil9LGdvb2cuc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU9Z29vZy5zdHJpbmcuaW50ZXJuYWwuY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSxnb29nLnN0cmluZy5udW1iZXJBd2FyZUNvbXBhcmVfPWZ1bmN0aW9uKGUsdCxvKXtpZihlPT10KXJldHVybiAwO2lmKCFlKXJldHVybi0xO2lmKCF0KXJldHVybiAxO2Zvcih2YXIgcj1lLnRvTG93ZXJDYXNlKCkubWF0Y2gobyksbj10LnRvTG93ZXJDYXNlKCkubWF0Y2gobykscz1NYXRoLm1pbihyLmxlbmd0aCxuLmxlbmd0aCksaT0wO2k8cztpKyspe289cltpXTt2YXIgYT1uW2ldO2lmKG8hPWEpcmV0dXJuIGU9cGFyc2VJbnQobywxMCksIWlzTmFOKGUpJiYodD1wYXJzZUludChhLDEwKSwhaXNOYU4odCkmJmUtdCk/ZS10Om88YT8tMToxfXJldHVybiByLmxlbmd0aCE9bi5sZW5ndGg/ci5sZW5ndGgtbi5sZW5ndGg6ZTx0Py0xOjF9LGdvb2cuc3RyaW5nLmludEF3YXJlQ29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5udW1iZXJBd2FyZUNvbXBhcmVfKGUsdCwvXFxkK3xcXEQrL2cpfSxnb29nLnN0cmluZy5mbG9hdEF3YXJlQ29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5udW1iZXJBd2FyZUNvbXBhcmVfKGUsdCwvXFxkK3xcXC5cXGQrfFxcRCsvZyl9LGdvb2cuc3RyaW5nLm51bWVyYXRlQ29tcGFyZT1nb29nLnN0cmluZy5mbG9hdEF3YXJlQ29tcGFyZSxnb29nLnN0cmluZy51cmxFbmNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZSkpfSxnb29nLnN0cmluZy51cmxEZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSl9LGdvb2cuc3RyaW5nLm5ld0xpbmVUb0JyPWdvb2cuc3RyaW5nLmludGVybmFsLm5ld0xpbmVUb0JyLGdvb2cuc3RyaW5nLmh0bWxFc2NhcGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1nb29nLnN0cmluZy5pbnRlcm5hbC5odG1sRXNjYXBlKGUsdCksZ29vZy5zdHJpbmcuREVURUNUX0RPVUJMRV9FU0NBUElORyYmKGU9ZS5yZXBsYWNlKGdvb2cuc3RyaW5nLkVfUkVfLFwiJiMxMDE7XCIpKSxlfSxnb29nLnN0cmluZy5FX1JFXz0vZS9nLGdvb2cuc3RyaW5nLnVuZXNjYXBlRW50aXRpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbnRhaW5zKGUsXCImXCIpPyFnb29nLnN0cmluZy5GT1JDRV9OT05fRE9NX0hUTUxfVU5FU0NBUElORyYmXCJkb2N1bWVudFwiaW4gZ29vZy5nbG9iYWw/Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tXyhlKTpnb29nLnN0cmluZy51bmVzY2FwZVB1cmVYbWxFbnRpdGllc18oZSk6ZX0sZ29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1dpdGhEb2N1bWVudD1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5jb250YWlucyhlLFwiJlwiKT9nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzVXNpbmdEb21fKGUsdCk6ZX0sZ29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllc1VzaW5nRG9tXz1mdW5jdGlvbihlLHQpe3ZhciBvPXtcIiZhbXA7XCI6XCImXCIsXCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInfSxyPXQ/dC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOmdvb2cuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIGUucmVwbGFjZShnb29nLnN0cmluZy5IVE1MX0VOVElUWV9QQVRURVJOXywoZnVuY3Rpb24oZSx0KXt2YXIgbj1vW2VdO3JldHVybiBufHwoXCIjXCI9PXQuY2hhckF0KDApJiYodD1OdW1iZXIoXCIwXCIrdC5zdWJzdHIoMSkpLGlzTmFOKHQpfHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpKSksbnx8KGdvb2cuZG9tLnNhZmUuc2V0SW5uZXJIdG1sKHIsZ29vZy5odG1sLnVuY2hlY2tlZGNvbnZlcnNpb25zLnNhZmVIdG1sRnJvbVN0cmluZ0tub3duVG9TYXRpc2Z5VHlwZUNvbnRyYWN0KGdvb2cuc3RyaW5nLkNvbnN0LmZyb20oXCJTaW5nbGUgSFRNTCBlbnRpdHkuXCIpLGUrXCIgXCIpKSxuPXIuZmlyc3RDaGlsZC5ub2RlVmFsdWUuc2xpY2UoMCwtMSkpLG9bZV09bil9KSl9LGdvb2cuc3RyaW5nLnVuZXNjYXBlUHVyZVhtbEVudGl0aWVzXz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8mKFteO10rKTsvZywoZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZVwiYW1wXCI6cmV0dXJuXCImXCI7Y2FzZVwibHRcIjpyZXR1cm5cIjxcIjtjYXNlXCJndFwiOnJldHVyblwiPlwiO2Nhc2VcInF1b3RcIjpyZXR1cm4nXCInO2RlZmF1bHQ6cmV0dXJuXCIjXCIhPXQuY2hhckF0KDApfHwodD1OdW1iZXIoXCIwXCIrdC5zdWJzdHIoMSkpLGlzTmFOKHQpKT9lOlN0cmluZy5mcm9tQ2hhckNvZGUodCl9fSkpfSxnb29nLnN0cmluZy5IVE1MX0VOVElUWV9QQVRURVJOXz0vJihbXjtcXHM8Jl0rKTs/L2csZ29vZy5zdHJpbmcud2hpdGVzcGFjZUVzY2FwZT1mdW5jdGlvbihlLHQpe3JldHVybiBnb29nLnN0cmluZy5uZXdMaW5lVG9CcihlLnJlcGxhY2UoLyAgL2csXCIgJiMxNjA7XCIpLHQpfSxnb29nLnN0cmluZy5wcmVzZXJ2ZVNwYWNlcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oXnxbXFxuIF0pIC9nLFwiJDFcIitnb29nLnN0cmluZy5Vbmljb2RlLk5CU1ApfSxnb29nLnN0cmluZy5zdHJpcFF1b3Rlcz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz10Lmxlbmd0aCxyPTA7cjxvO3IrKyl7dmFyIG49MT09bz90OnQuY2hhckF0KHIpO2lmKGUuY2hhckF0KDApPT1uJiZlLmNoYXJBdChlLmxlbmd0aC0xKT09bilyZXR1cm4gZS5zdWJzdHJpbmcoMSxlLmxlbmd0aC0xKX1yZXR1cm4gZX0sZ29vZy5zdHJpbmcudHJ1bmNhdGU9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBvJiYoZT1nb29nLnN0cmluZy51bmVzY2FwZUVudGl0aWVzKGUpKSxlLmxlbmd0aD50JiYoZT1lLnN1YnN0cmluZygwLHQtMykrXCIuLi5cIiksbyYmKGU9Z29vZy5zdHJpbmcuaHRtbEVzY2FwZShlKSksZX0sZ29vZy5zdHJpbmcudHJ1bmNhdGVNaWRkbGU9ZnVuY3Rpb24oZSx0LG8scil7aWYobyYmKGU9Z29vZy5zdHJpbmcudW5lc2NhcGVFbnRpdGllcyhlKSksciYmZS5sZW5ndGg+dCl7cj50JiYocj10KTt2YXIgbj1lLmxlbmd0aC1yO2U9ZS5zdWJzdHJpbmcoMCx0LXIpK1wiLi4uXCIrZS5zdWJzdHJpbmcobil9ZWxzZSBlLmxlbmd0aD50JiYocj1NYXRoLmZsb29yKHQvMiksbj1lLmxlbmd0aC1yLGU9ZS5zdWJzdHJpbmcoMCxyK3QlMikrXCIuLi5cIitlLnN1YnN0cmluZyhuKSk7cmV0dXJuIG8mJihlPWdvb2cuc3RyaW5nLmh0bWxFc2NhcGUoZSkpLGV9LGdvb2cuc3RyaW5nLnNwZWNpYWxFc2NhcGVDaGFyc189e1wiXFwwXCI6XCJcXFxcMFwiLFwiXFxiXCI6XCJcXFxcYlwiLFwiXFxmXCI6XCJcXFxcZlwiLFwiXFxuXCI6XCJcXFxcblwiLFwiXFxyXCI6XCJcXFxcclwiLFwiXFx0XCI6XCJcXFxcdFwiLFwiXFx2XCI6XCJcXFxceDBCXCIsJ1wiJzonXFxcXFwiJyxcIlxcXFxcIjpcIlxcXFxcXFxcXCIsXCI8XCI6XCJcXFxcdTAwM0NcIn0sZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV89e1wiJ1wiOlwiXFxcXCdcIn0sZ29vZy5zdHJpbmcucXVvdGU9ZnVuY3Rpb24oZSl7ZT1TdHJpbmcoZSk7Zm9yKHZhciB0PVsnXCInXSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWUuY2hhckF0KG8pLG49ci5jaGFyQ29kZUF0KDApO3RbbysxXT1nb29nLnN0cmluZy5zcGVjaWFsRXNjYXBlQ2hhcnNfW3JdfHwoMzE8biYmMTI3Pm4/cjpnb29nLnN0cmluZy5lc2NhcGVDaGFyKHIpKX1yZXR1cm4gdC5wdXNoKCdcIicpLHQuam9pbihcIlwiKX0sZ29vZy5zdHJpbmcuZXNjYXBlU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxvPTA7bzxlLmxlbmd0aDtvKyspdFtvXT1nb29nLnN0cmluZy5lc2NhcGVDaGFyKGUuY2hhckF0KG8pKTtyZXR1cm4gdC5qb2luKFwiXCIpfSxnb29nLnN0cmluZy5lc2NhcGVDaGFyPWZ1bmN0aW9uKGUpe2lmKGUgaW4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV8pcmV0dXJuIGdvb2cuc3RyaW5nLmpzRXNjYXBlQ2FjaGVfW2VdO2lmKGUgaW4gZ29vZy5zdHJpbmcuc3BlY2lhbEVzY2FwZUNoYXJzXylyZXR1cm4gZ29vZy5zdHJpbmcuanNFc2NhcGVDYWNoZV9bZV09Z29vZy5zdHJpbmcuc3BlY2lhbEVzY2FwZUNoYXJzX1tlXTt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7aWYoMzE8dCYmMTI3PnQpdmFyIG89ZTtlbHNlIDI1Nj50PyhvPVwiXFxcXHhcIiwoMTY+dHx8MjU2PHQpJiYobys9XCIwXCIpKToobz1cIlxcXFx1XCIsNDA5Nj50JiYobys9XCIwXCIpKSxvKz10LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBnb29nLnN0cmluZy5qc0VzY2FwZUNhY2hlX1tlXT1vfSxnb29nLnN0cmluZy5jb250YWlucz1nb29nLnN0cmluZy5pbnRlcm5hbC5jb250YWlucyxnb29nLnN0cmluZy5jYXNlSW5zZW5zaXRpdmVDb250YWlucz1nb29nLnN0cmluZy5pbnRlcm5hbC5jYXNlSW5zZW5zaXRpdmVDb250YWlucyxnb29nLnN0cmluZy5jb3VudE9mPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJnQ/ZS5zcGxpdCh0KS5sZW5ndGgtMTowfSxnb29nLnN0cmluZy5yZW1vdmVBdD1mdW5jdGlvbihlLHQsbyl7dmFyIHI9ZTtyZXR1cm4gMDw9dCYmdDxlLmxlbmd0aCYmMDxvJiYocj1lLnN1YnN0cigwLHQpK2Uuc3Vic3RyKHQrbyxlLmxlbmd0aC10LW8pKSxyfSxnb29nLnN0cmluZy5yZW1vdmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKHQsXCJcIil9LGdvb2cuc3RyaW5nLnJlbW92ZUFsbD1mdW5jdGlvbihlLHQpe3JldHVybiB0PW5ldyBSZWdFeHAoZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKHQpLFwiZ1wiKSxlLnJlcGxhY2UodCxcIlwiKX0sZ29vZy5zdHJpbmcucmVwbGFjZUFsbD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIHQ9bmV3IFJlZ0V4cChnb29nLnN0cmluZy5yZWdFeHBFc2NhcGUodCksXCJnXCIpLGUucmVwbGFjZSh0LG8ucmVwbGFjZSgvXFwkL2csXCIkJCQkXCIpKX0sZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSgvKFstKClcXFtcXF17fSs/Ki4kXFxefCw6IzwhXFxcXF0pL2csXCJcXFxcJDFcIikucmVwbGFjZSgvXFx4MDgvZyxcIlxcXFx4MDhcIil9LGdvb2cuc3RyaW5nLnJlcGVhdD1TdHJpbmcucHJvdG90eXBlLnJlcGVhdD9mdW5jdGlvbihlLHQpe3JldHVybiBlLnJlcGVhdCh0KX06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkodCsxKS5qb2luKGUpfSxnb29nLnN0cmluZy5wYWROdW1iZXI9ZnVuY3Rpb24oZSx0LG8pe3JldHVybi0xPT0obz0oZT1nb29nLmlzRGVmKG8pP2UudG9GaXhlZChvKTpTdHJpbmcoZSkpLmluZGV4T2YoXCIuXCIpKSYmKG89ZS5sZW5ndGgpLGdvb2cuc3RyaW5nLnJlcGVhdChcIjBcIixNYXRoLm1heCgwLHQtbykpK2V9LGdvb2cuc3RyaW5nLm1ha2VTYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1wiXCI6U3RyaW5nKGUpfSxnb29nLnN0cmluZy5idWlsZFN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsXCJcIil9LGdvb2cuc3RyaW5nLmdldFJhbmRvbVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKDIxNDc0ODM2NDgqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpK01hdGguYWJzKE1hdGguZmxvb3IoMjE0NzQ4MzY0OCpNYXRoLnJhbmRvbSgpKV5nb29nLm5vdygpKS50b1N0cmluZygzNil9LGdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucz1nb29nLnN0cmluZy5pbnRlcm5hbC5jb21wYXJlVmVyc2lvbnMsZ29vZy5zdHJpbmcuaGFzaENvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbz0wO288ZS5sZW5ndGg7KytvKXQ9MzEqdCtlLmNoYXJDb2RlQXQobyk+Pj4wO3JldHVybiB0fSxnb29nLnN0cmluZy51bmlxdWVTdHJpbmdDb3VudGVyXz0yMTQ3NDgzNjQ4Kk1hdGgucmFuZG9tKCl8MCxnb29nLnN0cmluZy5jcmVhdGVVbmlxdWVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cImdvb2dfXCIrZ29vZy5zdHJpbmcudW5pcXVlU3RyaW5nQ291bnRlcl8rK30sZ29vZy5zdHJpbmcudG9OdW1iZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyKGUpO3JldHVybiAwPT10JiZnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKGUpP05hTjp0fSxnb29nLnN0cmluZy5pc0xvd2VyQ2FtZWxDYXNlPWZ1bmN0aW9uKGUpe3JldHVybi9eW2Etel0rKFtBLVpdW2Etel0qKSokLy50ZXN0KGUpfSxnb29nLnN0cmluZy5pc1VwcGVyQ2FtZWxDYXNlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFtBLVpdW2Etel0qKSskLy50ZXN0KGUpfSxnb29nLnN0cmluZy50b0NhbWVsQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoL1xcLShbYS16XSkvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpfSxnb29nLnN0cmluZy50b1NlbGVjdG9yQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoLyhbQS1aXSkvZyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpfSxnb29nLnN0cmluZy50b1RpdGxlQ2FzZT1mdW5jdGlvbihlLHQpe3JldHVybiB0PWdvb2cuaXNTdHJpbmcodCk/Z29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKHQpOlwiXFxcXHNcIixlLnJlcGxhY2UobmV3IFJlZ0V4cChcIiheXCIrKHQ/XCJ8W1wiK3QrXCJdK1wiOlwiXCIpK1wiKShbYS16XSlcIixcImdcIiksKGZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdCtvLnRvVXBwZXJDYXNlKCl9KSl9LGdvb2cuc3RyaW5nLmNhcGl0YWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlLmNoYXJBdCgwKSkudG9VcHBlckNhc2UoKStTdHJpbmcoZS5zdWJzdHIoMSkpLnRvTG93ZXJDYXNlKCl9LGdvb2cuc3RyaW5nLnBhcnNlSW50PWZ1bmN0aW9uKGUpe3JldHVybiBpc0Zpbml0ZShlKSYmKGU9U3RyaW5nKGUpKSxnb29nLmlzU3RyaW5nKGUpPy9eXFxzKi0/MHgvaS50ZXN0KGUpP3BhcnNlSW50KGUsMTYpOnBhcnNlSW50KGUsMTApOk5hTn0sZ29vZy5zdHJpbmcuc3BsaXRMaW1pdD1mdW5jdGlvbihlLHQsbyl7ZT1lLnNwbGl0KHQpO2Zvcih2YXIgcj1bXTswPG8mJmUubGVuZ3RoOylyLnB1c2goZS5zaGlmdCgpKSxvLS07cmV0dXJuIGUubGVuZ3RoJiZyLnB1c2goZS5qb2luKHQpKSxyfSxnb29nLnN0cmluZy5sYXN0Q29tcG9uZW50PWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIGU7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBvPS0xLHI9MDtyPHQubGVuZ3RoO3IrKylpZihcIlwiIT10W3JdKXt2YXIgbj1lLmxhc3RJbmRleE9mKHRbcl0pO24+byYmKG89bil9cmV0dXJuLTE9PW8/ZTplLnNsaWNlKG8rMSl9LGdvb2cuc3RyaW5nLmVkaXREaXN0YW5jZT1mdW5jdGlvbihlLHQpe3ZhciBvPVtdLHI9W107aWYoZT09dClyZXR1cm4gMDtpZighZS5sZW5ndGh8fCF0Lmxlbmd0aClyZXR1cm4gTWF0aC5tYXgoZS5sZW5ndGgsdC5sZW5ndGgpO2Zvcih2YXIgbj0wO248dC5sZW5ndGgrMTtuKyspb1tuXT1uO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3JbMF09bisxO2Zvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXJbcysxXT1NYXRoLm1pbihyW3NdKzEsb1tzKzFdKzEsb1tzXStOdW1iZXIoZVtuXSE9dFtzXSkpO2ZvcihzPTA7czxvLmxlbmd0aDtzKyspb1tzXT1yW3NdfXJldHVybiByW3QubGVuZ3RoXX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmU9e30sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNQcmVzdG89ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiUHJlc3RvXCIpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1RyaWRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiVHJpZGVudFwiKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiTVNJRVwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkVkZ2VcIil9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzV2ViS2l0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudElnbm9yZUNhc2UoXCJXZWJLaXRcIikmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc0VkZ2UoKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNHZWNrbz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJHZWNrb1wiKSYmIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzV2ViS2l0KCkmJiFnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1RyaWRlbnQoKSYmIWdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmlzRWRnZSgpfSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpO2lmKGUpe2U9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmV4dHJhY3RWZXJzaW9uVHVwbGVzKGUpO3ZhciB0LG89Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0RW5naW5lVHVwbGVfKGUpO2lmKG8pcmV0dXJuXCJHZWNrb1wiPT1vWzBdP2dvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb25Gb3JLZXlfKGUsXCJGaXJlZm94XCIpOm9bMV07aWYoKGU9ZVswXSkmJih0PWVbMl0pJiYodD0vVHJpZGVudFxcLyhbXlxccztdKykvLmV4ZWModCkpKXJldHVybiB0WzFdfXJldHVyblwiXCJ9LGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldEVuZ2luZVR1cGxlXz1mdW5jdGlvbihlKXtpZighZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCkpcmV0dXJuIGVbMV07Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBvPWVbdF07aWYoXCJFZGdlXCI9PW9bMF0pcmV0dXJuIG99fSxnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihlKXtyZXR1cm4gMDw9Z29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zKGdvb2cubGFicy51c2VyQWdlbnQuZW5naW5lLmdldFZlcnNpb24oKSxlKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuZ2V0VmVyc2lvbkZvcktleV89ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT1nb29nLmFycmF5LmZpbmQoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PWVbMF19KSkpJiZlWzFdfHxcIlwifSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtPXt9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNBbmRyb2lkPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkFuZHJvaWRcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcG9kPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQb2RcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBob25lXCIpJiYhZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiaVBvZFwiKSYmIWdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcImlQYWRcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwaG9uZSgpfHxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBhZCgpfHxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSXBvZCgpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1hY2ludG9zaFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0xpbnV4PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIkxpbnV4XCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzV2luZG93cz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnQoXCJXaW5kb3dzXCIpfSxnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzQ2hyb21lT1M9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ3JPU1wiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZWNhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLm1hdGNoVXNlckFnZW50KFwiQ3JLZXlcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNLYWlPUz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlKFwiS2FpT1NcIil9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNHbzJQaG9uZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwubWF0Y2hVc2VyQWdlbnRJZ25vcmVDYXNlKFwiR0FGUFwiKX0sZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9Z29vZy5sYWJzLnVzZXJBZ2VudC51dGlsLmdldFVzZXJBZ2VudCgpLHQ9XCJcIjtyZXR1cm4gZ29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc1dpbmRvd3MoKT90PShlPSh0PS9XaW5kb3dzICg/Ok5UfFBob25lKSAoWzAtOS5dKykvKS5leGVjKGUpKT9lWzFdOlwiMC4wXCI6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lvcygpP3Q9KGU9KHQ9Lyg/OmlQaG9uZXxpUG9kfGlQYWR8Q1BVKVxccytPU1xccysoXFxTKykvKS5leGVjKGUpKSYmZVsxXS5yZXBsYWNlKC9fL2csXCIuXCIpOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNNYWNpbnRvc2goKT90PShlPSh0PS9NYWMgT1MgWCAoWzAtOV8uXSspLykuZXhlYyhlKSk/ZVsxXS5yZXBsYWNlKC9fL2csXCIuXCIpOlwiMTBcIjpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1MoKT90PShlPSh0PS8oPzpLYWlPUylcXC8oXFxTKykvaSkuZXhlYyhlKSkmJmVbMV06Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0FuZHJvaWQoKT90PShlPSh0PS9BbmRyb2lkXFxzKyhbXlxcKTtdKykoXFwpfDspLykuZXhlYyhlKSkmJmVbMV06Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZU9TKCkmJih0PShlPSh0PS8oPzpDck9TXFxzKyg/Omk2ODZ8eDg2XzY0KVxccysoWzAtOS5dKykpLykuZXhlYyhlKSkmJmVbMV0pLHR8fFwiXCJ9LGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNWZXJzaW9uT3JIaWdoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmdldFZlcnNpb24oKSxlKX0sZ29vZy5yZWZsZWN0PXt9LGdvb2cucmVmbGVjdC5vYmplY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0sZ29vZy5yZWZsZWN0Lm9iamVjdFByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9LGdvb2cucmVmbGVjdC5zaW5rVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cucmVmbGVjdC5zaW5rVmFsdWVbXCIgXCJdKGUpLGV9LGdvb2cucmVmbGVjdC5zaW5rVmFsdWVbXCIgXCJdPWdvb2cubnVsbEZ1bmN0aW9uLGdvb2cucmVmbGVjdC5jYW5BY2Nlc3NQcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZ29vZy5yZWZsZWN0LnNpbmtWYWx1ZShlW3RdKSwhMH1jYXRjaChlKXt9cmV0dXJuITF9LGdvb2cucmVmbGVjdC5jYWNoZT1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gcj1yP3IodCk6dCxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKT9lW3JdOmVbcl09byh0KX0sZ29vZy51c2VyQWdlbnQ9e30sZ29vZy51c2VyQWdlbnQuQVNTVU1FX0lFPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9FREdFPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9HRUNLTz0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfV0VCS0lUPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5ZX1ZFUlNJT049ITEsZ29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl89Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfRURHRXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dFQ0tPfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dFQktJVHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX09QRVJBLGdvb2cudXNlckFnZW50LmdldFVzZXJBZ2VudFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnV0aWwuZ2V0VXNlckFnZW50KCl9LGdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuZ2xvYmFsLm5hdmlnYXRvcnx8bnVsbH0sZ29vZy51c2VyQWdlbnQuZ2V0TmF2aWdhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkKCl9LGdvb2cudXNlckFnZW50Lk9QRVJBPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9PUEVSQTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNPcGVyYSgpLGdvb2cudXNlckFnZW50LklFPWdvb2cudXNlckFnZW50LkJST1dTRVJfS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JRTpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNJRSgpLGdvb2cudXNlckFnZW50LkVER0U9Z29vZy51c2VyQWdlbnQuQlJPV1NFUl9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0VER0U6Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNFZGdlKCksZ29vZy51c2VyQWdlbnQuRURHRV9PUl9JRT1nb29nLnVzZXJBZ2VudC5FREdFfHxnb29nLnVzZXJBZ2VudC5JRSxnb29nLnVzZXJBZ2VudC5HRUNLTz1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfR0VDS086Z29vZy5sYWJzLnVzZXJBZ2VudC5lbmdpbmUuaXNHZWNrbygpLGdvb2cudXNlckFnZW50LldFQktJVD1nb29nLnVzZXJBZ2VudC5CUk9XU0VSX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfV0VCS0lUfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfTU9CSUxFX1dFQktJVDpnb29nLmxhYnMudXNlckFnZW50LmVuZ2luZS5pc1dlYktpdCgpLGdvb2cudXNlckFnZW50LmlzTW9iaWxlXz1mdW5jdGlvbigpe3JldHVybiBnb29nLnVzZXJBZ2VudC5XRUJLSVQmJmdvb2cubGFicy51c2VyQWdlbnQudXRpbC5tYXRjaFVzZXJBZ2VudChcIk1vYmlsZVwiKX0sZ29vZy51c2VyQWdlbnQuTU9CSUxFPWdvb2cudXNlckFnZW50LkFTU1VNRV9NT0JJTEVfV0VCS0lUfHxnb29nLnVzZXJBZ2VudC5pc01vYmlsZV8oKSxnb29nLnVzZXJBZ2VudC5TQUZBUkk9Z29vZy51c2VyQWdlbnQuV0VCS0lULGdvb2cudXNlckFnZW50LmRldGVybWluZVBsYXRmb3JtXz1mdW5jdGlvbigpe3ZhciBlPWdvb2cudXNlckFnZW50LmdldE5hdmlnYXRvclR5cGVkKCk7cmV0dXJuIGUmJmUucGxhdGZvcm18fFwiXCJ9LGdvb2cudXNlckFnZW50LlBMQVRGT1JNPWdvb2cudXNlckFnZW50LmRldGVybWluZVBsYXRmb3JtXygpLGdvb2cudXNlckFnZW50LkFTU1VNRV9NQUM9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX1dJTkRPV1M9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYPSExLGdvb2cudXNlckFnZW50LkFTU1VNRV9YMTE9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0FORFJPSUQ9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORT0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBBRD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRD0hMSxnb29nLnVzZXJBZ2VudC5BU1NVTUVfS0FJT1M9ITEsZ29vZy51c2VyQWdlbnQuQVNTVU1FX0dPMlBIT05FPSExLGdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz1nb29nLnVzZXJBZ2VudC5BU1NVTUVfTUFDfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfV0lORE9XU3x8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0xJTlVYfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfWDExfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfQU5EUk9JRHx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQSE9ORXx8Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQQUR8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUE9ELGdvb2cudXNlckFnZW50Lk1BQz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX01BQzpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTWFjaW50b3NoKCksZ29vZy51c2VyQWdlbnQuV0lORE9XUz1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX1dJTkRPV1M6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc1dpbmRvd3MoKSxnb29nLnVzZXJBZ2VudC5pc0xlZ2FjeUxpbnV4Xz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzTGludXgoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0Nocm9tZU9TKCl9LGdvb2cudXNlckFnZW50LkxJTlVYPWdvb2cudXNlckFnZW50LlBMQVRGT1JNX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5BU1NVTUVfTElOVVg6Z29vZy51c2VyQWdlbnQuaXNMZWdhY3lMaW51eF8oKSxnb29nLnVzZXJBZ2VudC5pc1gxMV89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLnVzZXJBZ2VudC5nZXROYXZpZ2F0b3JUeXBlZCgpO3JldHVybiEhZSYmZ29vZy5zdHJpbmcuY29udGFpbnMoZS5hcHBWZXJzaW9ufHxcIlwiLFwiWDExXCIpfSxnb29nLnVzZXJBZ2VudC5YMTE9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9YMTE6Z29vZy51c2VyQWdlbnQuaXNYMTFfKCksZ29vZy51c2VyQWdlbnQuQU5EUk9JRD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0FORFJPSUQ6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0FuZHJvaWQoKSxnb29nLnVzZXJBZ2VudC5JUEhPTkU9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkU6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwaG9uZSgpLGdvb2cudXNlckFnZW50LklQQUQ9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCksZ29vZy51c2VyQWdlbnQuSVBPRD1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0lQT0Q6Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKSxnb29nLnVzZXJBZ2VudC5JT1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9JUEhPTkV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9JUEFEfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfSVBPRDpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzSW9zKCksZ29vZy51c2VyQWdlbnQuS0FJT1M9Z29vZy51c2VyQWdlbnQuUExBVEZPUk1fS05PV05fP2dvb2cudXNlckFnZW50LkFTU1VNRV9LQUlPUzpnb29nLmxhYnMudXNlckFnZW50LnBsYXRmb3JtLmlzS2FpT1MoKSxnb29nLnVzZXJBZ2VudC5HTzJQSE9ORT1nb29nLnVzZXJBZ2VudC5QTEFURk9STV9LTk9XTl8/Z29vZy51c2VyQWdlbnQuQVNTVU1FX0dPMlBIT05FOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNHbzJQaG9uZSgpLGdvb2cudXNlckFnZW50LmRldGVybWluZVZlcnNpb25fPWZ1bmN0aW9uKCl7dmFyIGU9XCJcIix0PWdvb2cudXNlckFnZW50LmdldFZlcnNpb25SZWdleFJlc3VsdF8oKTtyZXR1cm4gdCYmKGU9dD90WzFdOlwiXCIpLGdvb2cudXNlckFnZW50LklFJiZudWxsIT0odD1nb29nLnVzZXJBZ2VudC5nZXREb2N1bWVudE1vZGVfKCkpJiZ0PnBhcnNlRmxvYXQoZSk/U3RyaW5nKHQpOmV9LGdvb2cudXNlckFnZW50LmdldFZlcnNpb25SZWdleFJlc3VsdF89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLnVzZXJBZ2VudC5nZXRVc2VyQWdlbnRTdHJpbmcoKTtyZXR1cm4gZ29vZy51c2VyQWdlbnQuR0VDS08/L3J2OihbXlxcKTtdKykoXFwpfDspLy5leGVjKGUpOmdvb2cudXNlckFnZW50LkVER0U/L0VkZ2VcXC8oW1xcZFxcLl0rKS8uZXhlYyhlKTpnb29nLnVzZXJBZ2VudC5JRT8vXFxiKD86TVNJRXxydilbOiBdKFteXFwpO10rKShcXCl8OykvLmV4ZWMoZSk6Z29vZy51c2VyQWdlbnQuV0VCS0lUPy9XZWJLaXRcXC8oXFxTKykvLmV4ZWMoZSk6Z29vZy51c2VyQWdlbnQuT1BFUkE/Lyg/OlZlcnNpb24pWyBcXC9dPyhcXFMrKS8uZXhlYyhlKTp2b2lkIDB9LGdvb2cudXNlckFnZW50LmdldERvY3VtZW50TW9kZV89ZnVuY3Rpb24oKXt2YXIgZT1nb29nLmdsb2JhbC5kb2N1bWVudDtyZXR1cm4gZT9lLmRvY3VtZW50TW9kZTp2b2lkIDB9LGdvb2cudXNlckFnZW50LlZFUlNJT049Z29vZy51c2VyQWdlbnQuZGV0ZXJtaW5lVmVyc2lvbl8oKSxnb29nLnVzZXJBZ2VudC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGdvb2cuc3RyaW5nLmNvbXBhcmVWZXJzaW9ucyhlLHQpfSxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlckNhY2hlXz17fSxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcj1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy51c2VyQWdlbnQuQVNTVU1FX0FOWV9WRVJTSU9OfHxnb29nLnJlZmxlY3QuY2FjaGUoZ29vZy51c2VyQWdlbnQuaXNWZXJzaW9uT3JIaWdoZXJDYWNoZV8sZSwoZnVuY3Rpb24oKXtyZXR1cm4gMDw9Z29vZy5zdHJpbmcuY29tcGFyZVZlcnNpb25zKGdvb2cudXNlckFnZW50LlZFUlNJT04sZSl9KSl9LGdvb2cudXNlckFnZW50LmlzVmVyc2lvbj1nb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcixnb29nLnVzZXJBZ2VudC5pc0RvY3VtZW50TW9kZU9ySGlnaGVyPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZ29vZy51c2VyQWdlbnQuRE9DVU1FTlRfTU9ERSk+PWV9LGdvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlPWdvb2cudXNlckFnZW50LmlzRG9jdW1lbnRNb2RlT3JIaWdoZXIsZ29vZy51c2VyQWdlbnQuRE9DVU1FTlRfTU9ERT1mdW5jdGlvbigpe2lmKGdvb2cuZ2xvYmFsLmRvY3VtZW50JiZnb29nLnVzZXJBZ2VudC5JRSlyZXR1cm4gZ29vZy51c2VyQWdlbnQuZ2V0RG9jdW1lbnRNb2RlXygpfSgpLGdvb2cudXNlckFnZW50LnByb2R1Y3Q9e30sZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfRklSRUZPWD0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkU9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRD0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9BTkRST0lEPSExLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0NIUk9NRT0hMSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkk9ITEsZ29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz1nb29nLnVzZXJBZ2VudC5BU1NVTUVfSUV8fGdvb2cudXNlckFnZW50LkFTU1VNRV9FREdFfHxnb29nLnVzZXJBZ2VudC5BU1NVTUVfT1BFUkF8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1h8fGdvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0lQSE9ORXx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfSVBBRHx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRHx8Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQ0hST01FfHxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkksZ29vZy51c2VyQWdlbnQucHJvZHVjdC5PUEVSQT1nb29nLnVzZXJBZ2VudC5PUEVSQSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LklFPWdvb2cudXNlckFnZW50LklFLGdvb2cudXNlckFnZW50LnByb2R1Y3QuRURHRT1nb29nLnVzZXJBZ2VudC5FREdFLGdvb2cudXNlckFnZW50LnByb2R1Y3QuRklSRUZPWD1nb29nLnVzZXJBZ2VudC5wcm9kdWN0LlBST0RVQ1RfS05PV05fP2dvb2cudXNlckFnZW50LnByb2R1Y3QuQVNTVU1FX0ZJUkVGT1g6Z29vZy5sYWJzLnVzZXJBZ2VudC5icm93c2VyLmlzRmlyZWZveCgpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNJcGhvbmVPcklwb2RfPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGhvbmUoKXx8Z29vZy5sYWJzLnVzZXJBZ2VudC5wbGF0Zm9ybS5pc0lwb2QoKX0sZ29vZy51c2VyQWdlbnQucHJvZHVjdC5JUEhPTkU9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEhPTkU6Z29vZy51c2VyQWdlbnQucHJvZHVjdC5pc0lwaG9uZU9ySXBvZF8oKSxnb29nLnVzZXJBZ2VudC5wcm9kdWN0LklQQUQ9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9JUEFEOmdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJcGFkKCksZ29vZy51c2VyQWdlbnQucHJvZHVjdC5BTkRST0lEPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQU5EUk9JRDpnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNBbmRyb2lkQnJvd3NlcigpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuQ0hST01FPWdvb2cudXNlckFnZW50LnByb2R1Y3QuUFJPRFVDVF9LTk9XTl8/Z29vZy51c2VyQWdlbnQucHJvZHVjdC5BU1NVTUVfQ0hST01FOmdvb2cubGFicy51c2VyQWdlbnQuYnJvd3Nlci5pc0Nocm9tZSgpLGdvb2cudXNlckFnZW50LnByb2R1Y3QuaXNTYWZhcmlEZXNrdG9wXz1mdW5jdGlvbigpe3JldHVybiBnb29nLmxhYnMudXNlckFnZW50LmJyb3dzZXIuaXNTYWZhcmkoKSYmIWdvb2cubGFicy51c2VyQWdlbnQucGxhdGZvcm0uaXNJb3MoKX0sZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkk9Z29vZy51c2VyQWdlbnQucHJvZHVjdC5QUk9EVUNUX0tOT1dOXz9nb29nLnVzZXJBZ2VudC5wcm9kdWN0LkFTU1VNRV9TQUZBUkk6Z29vZy51c2VyQWdlbnQucHJvZHVjdC5pc1NhZmFyaURlc2t0b3BfKCksZ29vZy5jcnlwdC5iYXNlNjQ9e30sZ29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIixnb29nLmNyeXB0LmJhc2U2NC5FTkNPREVEX1ZBTFM9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fK1wiKy89XCIsZ29vZy5jcnlwdC5iYXNlNjQuRU5DT0RFRF9WQUxTX1dFQlNBRkU9Z29vZy5jcnlwdC5iYXNlNjQuREVGQVVMVF9BTFBIQUJFVF9DT01NT05fK1wiLV8uXCIsZ29vZy5jcnlwdC5iYXNlNjQuQWxwaGFiZXQ9e0RFRkFVTFQ6MCxOT19QQURESU5HOjEsV0VCU0FGRToyLFdFQlNBRkVfRE9UX1BBRERJTkc6MyxXRUJTQUZFX05PX1BBRERJTkc6NH0sZ29vZy5jcnlwdC5iYXNlNjQucGFkZGluZ0NoYXJzXz1cIj0uXCIsZ29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXz1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5zdHJpbmcuY29udGFpbnMoZ29vZy5jcnlwdC5iYXNlNjQucGFkZGluZ0NoYXJzXyxlKX0sZ29vZy5jcnlwdC5iYXNlNjQuYnl0ZVRvQ2hhck1hcHNfPXt9O2dvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfPW51bGwsZ29vZy5jcnlwdC5iYXNlNjQuQVNTVU1FX05BVElWRV9TVVBQT1JUXz1nb29nLnVzZXJBZ2VudC5HRUNLT3x8Z29vZy51c2VyQWdlbnQuV0VCS0lUJiYhZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkl8fGdvb2cudXNlckFnZW50Lk9QRVJBLGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfRU5DT0RFXz1nb29nLmNyeXB0LmJhc2U2NC5BU1NVTUVfTkFUSVZFX1NVUFBPUlRffHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBnb29nLmdsb2JhbC5idG9hLGdvb2cuY3J5cHQuYmFzZTY0LkhBU19OQVRJVkVfREVDT0RFXz1nb29nLmNyeXB0LmJhc2U2NC5BU1NVTUVfTkFUSVZFX1NVUFBPUlRffHwhZ29vZy51c2VyQWdlbnQucHJvZHVjdC5TQUZBUkkmJiFnb29nLnVzZXJBZ2VudC5JRSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZ29vZy5nbG9iYWwuYXRvYixnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXk9ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0KGdvb2cuaXNBcnJheUxpa2UoZSksXCJlbmNvZGVCeXRlQXJyYXkgdGFrZXMgYW4gYXJyYXkgYXMgYSBwYXJhbWV0ZXJcIiksdm9pZCAwPT09dCYmKHQ9Z29vZy5jcnlwdC5iYXNlNjQuQWxwaGFiZXQuREVGQVVMVCksZ29vZy5jcnlwdC5iYXNlNjQuaW5pdF8oKSx0PWdvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzX1t0XTtmb3IodmFyIG89W10scj0wO3I8ZS5sZW5ndGg7cis9Myl7dmFyIG49ZVtyXSxzPXIrMTxlLmxlbmd0aCxpPXM/ZVtyKzFdOjAsYT1yKzI8ZS5sZW5ndGgsZz1hP2VbcisyXTowLHA9bj4+MjtuPSgzJm4pPDw0fGk+PjQsaT0oMTUmaSk8PDJ8Zz4+NixnJj02MyxhfHwoZz02NCxzfHwoaT02NCkpLG8ucHVzaCh0W3BdLHRbbl0sdFtpXXx8XCJcIix0W2ddfHxcIlwiKX1yZXR1cm4gby5qb2luKFwiXCIpfSxnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVTdHJpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ29vZy5jcnlwdC5iYXNlNjQuSEFTX05BVElWRV9FTkNPREVfJiYhdD9nb29nLmdsb2JhbC5idG9hKGUpOmdvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShnb29nLmNyeXB0LnN0cmluZ1RvQnl0ZUFycmF5KGUpLHQpfSxnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihnb29nLmNyeXB0LmJhc2U2NC5IQVNfTkFUSVZFX0RFQ09ERV8mJiF0KXJldHVybiBnb29nLmdsb2JhbC5hdG9iKGUpO3ZhciBvPVwiXCI7cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhlLChmdW5jdGlvbihlKXtvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSkpLG99LGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7dmFyIG89W107cmV0dXJuIGdvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ0ludGVybmFsXyhlLChmdW5jdGlvbihlKXtvLnB1c2goZSl9KSksb30sZ29vZy5jcnlwdC5iYXNlNjQuZGVjb2RlU3RyaW5nVG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoIWdvb2cudXNlckFnZW50LklFfHxnb29nLnVzZXJBZ2VudC5pc1ZlcnNpb25PckhpZ2hlcihcIjEwXCIpLFwiQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5c1wiKTt2YXIgdD1lLmxlbmd0aCxvPTMqdC80O28lMz9vPU1hdGguZmxvb3Iobyk6Z29vZy5jcnlwdC5iYXNlNjQuaXNQYWRkaW5nXyhlW3QtMV0pJiYobz1nb29nLmNyeXB0LmJhc2U2NC5pc1BhZGRpbmdfKGVbdC0yXSk/by0yOm8tMSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkobyksbj0wO3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF8oZSwoZnVuY3Rpb24oZSl7cltuKytdPWV9KSksci5zdWJhcnJheSgwLG4pfSxnb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdJbnRlcm5hbF89ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKHQpe2Zvcig7cjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KHIrKyksbj1nb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwX1tvXTtpZihudWxsIT1uKXJldHVybiBuO2lmKCFnb29nLnN0cmluZy5pc0VtcHR5T3JXaGl0ZXNwYWNlKG8pKXRocm93IEVycm9yKFwiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogXCIrbyl9cmV0dXJuIHR9Z29vZy5jcnlwdC5iYXNlNjQuaW5pdF8oKTtmb3IodmFyIHI9MDs7KXt2YXIgbj1vKC0xKSxzPW8oMCksaT1vKDY0KSxhPW8oNjQpO2lmKDY0PT09YSYmLTE9PT1uKWJyZWFrO3Qobjw8MnxzPj40KSw2NCE9aSYmKHQoczw8NCYyNDB8aT4+MiksNjQhPWEmJnQoaTw8NiYxOTJ8YSkpfX0sZ29vZy5jcnlwdC5iYXNlNjQuaW5pdF89ZnVuY3Rpb24oKXtpZighZ29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF8pe2dvb2cuY3J5cHQuYmFzZTY0LmNoYXJUb0J5dGVNYXBfPXt9O2Zvcih2YXIgZT1nb29nLmNyeXB0LmJhc2U2NC5ERUZBVUxUX0FMUEhBQkVUX0NPTU1PTl8uc3BsaXQoXCJcIiksdD1bXCIrLz1cIixcIisvXCIsXCItXz1cIixcIi1fLlwiLFwiLV9cIl0sbz0wOzU+bztvKyspe3ZhciByPWUuY29uY2F0KHRbb10uc3BsaXQoXCJcIikpO2dvb2cuY3J5cHQuYmFzZTY0LmJ5dGVUb0NoYXJNYXBzX1tvXT1yO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcz1yW25dLGk9Z29vZy5jcnlwdC5iYXNlNjQuY2hhclRvQnl0ZU1hcF9bc107dm9pZCAwPT09aT9nb29nLmNyeXB0LmJhc2U2NC5jaGFyVG9CeXRlTWFwX1tzXT1uOmdvb2cuYXNzZXJ0cy5hc3NlcnQoaT09PW4pfX19fSxqc3BiLnV0aWxzPXt9LGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0VWludDY0PWZ1bmN0aW9uKGUpe3ZhciB0PWU+Pj4wO2U9TWF0aC5mbG9vcigoZS10KS9qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9dCxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWV9LGpzcGIudXRpbHMuc3BsaXRJbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD0wPmUsbz0oZT1NYXRoLmFicyhlKSk+Pj4wO2U9TWF0aC5mbG9vcigoZS1vKS9qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLGU+Pj49MCx0JiYoZT1+ZT4+PjAsNDI5NDk2NzI5NTwobz0xKyh+bz4+PjApKSYmKG89MCw0Mjk0OTY3Mjk1PCsrZSYmKGU9MCkpKSxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9byxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPWV9LGpzcGIudXRpbHMuc3BsaXRaaWd6YWc2ND1mdW5jdGlvbihlKXt2YXIgdD0wPmU7ZT0yKk1hdGguYWJzKGUpLGpzcGIudXRpbHMuc3BsaXRVaW50NjQoZSksZT1qc3BiLnV0aWxzLnNwbGl0NjRMb3c7dmFyIG89anNwYi51dGlscy5zcGxpdDY0SGlnaDt0JiYoMD09ZT8wPT1vP289ZT00Mjk0OTY3Mjk1OihvLS0sZT00Mjk0OTY3Mjk1KTplLS0pLGpzcGIudXRpbHMuc3BsaXQ2NExvdz1lLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9b30sanNwYi51dGlscy5zcGxpdEZsb2F0MzI9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lPzE6MDtpZigwPT09KGU9dD8tZTplKSkwPDEvZT8oanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wKTooanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0yMTQ3NDgzNjQ4KTtlbHNlIGlmKGlzTmFOKGUpKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MjE0NzQ4MzY0NztlbHNlIGlmKGU+anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgpanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0odDw8MzF8MjEzOTA5NTA0MCk+Pj4wO2Vsc2UgaWYoZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01JTillPU1hdGgucm91bmQoZS9NYXRoLnBvdygyLC0xNDkpKSxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTAsanNwYi51dGlscy5zcGxpdDY0TG93PSh0PDwzMXxlKT4+PjA7ZWxzZXt2YXIgbz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKTtlKj1NYXRoLnBvdygyLC1vKSwxNjc3NzIxNjw9KGU9TWF0aC5yb3VuZChlKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMykpJiYrK28sanNwYi51dGlscy5zcGxpdDY0SGlnaD0wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0odDw8MzF8bysxMjc8PDIzfDgzODg2MDcmZSk+Pj4wfX0sanNwYi51dGlscy5zcGxpdEZsb2F0NjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9MD5lPzE6MDtpZigwPT09KGU9dD8tZTplKSlqc3BiLnV0aWxzLnNwbGl0NjRIaWdoPTA8MS9lPzA6MjE0NzQ4MzY0OCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9MDtlbHNlIGlmKGlzTmFOKGUpKWpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9MjE0NzQ4MzY0Nyxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9NDI5NDk2NzI5NTtlbHNlIGlmKGU+anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQ2NF9NQVgpanNwYi51dGlscy5zcGxpdDY0SGlnaD0odDw8MzF8MjE0NjQzNTA3Mik+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz0wO2Vsc2UgaWYoZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01JTil7dmFyIG89ZS9NYXRoLnBvdygyLC0xMDc0KTtlPW8vanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KHQ8PDMxfGUpPj4+MCxqc3BiLnV0aWxzLnNwbGl0NjRMb3c9bz4+PjB9ZWxzZXt2YXIgcj0wO2lmKDI8PShvPWUpKWZvcig7Mjw9byYmMTAyMz5yOylyKyssby89MjtlbHNlIGZvcig7MT5vJiYtMTAyMjxyOylvKj0yLHItLTtlPShvPWUqTWF0aC5wb3coMiwtcikpKmpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18yMCYxMDQ4NTc1LG89bypqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNTI+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2g9KHQ8PDMxfHIrMTAyMzw8MjB8ZSk+Pj4wLGpzcGIudXRpbHMuc3BsaXQ2NExvdz1vfX0sanNwYi51dGlscy5zcGxpdEhhc2g2ND1mdW5jdGlvbihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCksbz1lLmNoYXJDb2RlQXQoMSkscj1lLmNoYXJDb2RlQXQoMiksbj1lLmNoYXJDb2RlQXQoMykscz1lLmNoYXJDb2RlQXQoNCksaT1lLmNoYXJDb2RlQXQoNSksYT1lLmNoYXJDb2RlQXQoNik7ZT1lLmNoYXJDb2RlQXQoNyksanNwYi51dGlscy5zcGxpdDY0TG93PXQrKG88PDgpKyhyPDwxNikrKG48PDI0KT4+PjAsanNwYi51dGlscy5zcGxpdDY0SGlnaD1zKyhpPDw4KSsoYTw8MTYpKyhlPDwyNCk+Pj4wfSxqc3BiLnV0aWxzLmpvaW5VaW50NjQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCpqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIrKGU+Pj4wKX0sanNwYi51dGlscy5qb2luSW50NjQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz0yMTQ3NDgzNjQ4JnQ7cmV0dXJuIG8mJih0PX50Pj4+MCwwPT0oZT0xK35lPj4+MCkmJih0PXQrMT4+PjApKSxlPWpzcGIudXRpbHMuam9pblVpbnQ2NChlLHQpLG8/LWU6ZX0sanNwYi51dGlscy50b1ppZ3phZzY0PWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj10Pj4zMTtyZXR1cm4gbyhlPDwxXnIsKHQ8PDF8ZT4+PjMxKV5yKX0sanNwYi51dGlscy5qb2luWmlnemFnNjQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ganNwYi51dGlscy5mcm9tWmlnemFnNjQoZSx0LGpzcGIudXRpbHMuam9pbkludDY0KX0sanNwYi51dGlscy5mcm9tWmlnemFnNjQ9ZnVuY3Rpb24oZSx0LG8pe3ZhciByPS0oMSZlKTtyZXR1cm4gbygoZT4+PjF8dDw8MzEpXnIsdD4+PjFecil9LGpzcGIudXRpbHMuam9pbkZsb2F0MzI9ZnVuY3Rpb24oZSx0KXt0PTIqKGU+PjMxKSsxO3ZhciBvPWU+Pj4yMyYyNTU7cmV0dXJuIGUmPTgzODg2MDcsMjU1PT1vP2U/TmFOOjEvMCp0OjA9PW8/dCpNYXRoLnBvdygyLC0xNDkpKmU6dCpNYXRoLnBvdygyLG8tMTUwKSooZStNYXRoLnBvdygyLDIzKSl9LGpzcGIudXRpbHMuam9pbkZsb2F0NjQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz0yKih0Pj4zMSkrMSxyPXQ+Pj4yMCYyMDQ3O3JldHVybiBlPWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiooMTA0ODU3NSZ0KStlLDIwNDc9PXI/ZT9OYU46MS8wKm86MD09cj9vKk1hdGgucG93KDIsLTEwNzQpKmU6bypNYXRoLnBvdygyLHItMTA3NSkqKGUranNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzUyKX0sanNwYi51dGlscy5qb2luSGFzaDY0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+PjAmMjU1LGU+Pj44JjI1NSxlPj4+MTYmMjU1LGU+Pj4yNCYyNTUsdD4+PjAmMjU1LHQ+Pj44JjI1NSx0Pj4+MTYmMjU1LHQ+Pj4yNCYyNTUpfSxqc3BiLnV0aWxzLkRJR0lUUz1cIjAxMjM0NTY3ODlhYmNkZWZcIi5zcGxpdChcIlwiKSxqc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFXz00OCxqc3BiLnV0aWxzLkFfQ0hBUl9DT0RFXz05Nyxqc3BiLnV0aWxzLmpvaW5VbnNpZ25lZERlY2ltYWxTdHJpbmc9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU9ZT9TdHJpbmcoZSk6XCJcIix0P1wiMDAwMDAwMFwiLnNsaWNlKGUubGVuZ3RoKStlOmV9aWYoMjA5NzE1MT49dClyZXR1cm5cIlwiK2pzcGIudXRpbHMuam9pblVpbnQ2NChlLHQpO3ZhciByPShlPj4+MjR8dDw8OCk+Pj4wJjE2Nzc3MjE1O3JldHVybiBlPSgxNjc3NzIxNSZlKSs2Nzc3MjE2KnIrNjcxMDY1NioodD10Pj4xNiY2NTUzNSkscis9ODE0NzQ5Nyp0LHQqPTIsMWU3PD1lJiYocis9TWF0aC5mbG9vcihlLzFlNyksZSU9MWU3KSwxZTc8PXImJih0Kz1NYXRoLmZsb29yKHIvMWU3KSxyJT0xZTcpLG8odCwwKStvKHIsdCkrbyhlLDEpfSxqc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG89MjE0NzQ4MzY0OCZ0O3JldHVybiBvJiYodD1+dCsoMD09KGU9MSt+ZT4+PjApPzE6MCk+Pj4wKSxlPWpzcGIudXRpbHMuam9pblVuc2lnbmVkRGVjaW1hbFN0cmluZyhlLHQpLG8/XCItXCIrZTplfSxqc3BiLnV0aWxzLmhhc2g2NFRvRGVjaW1hbFN0cmluZz1mdW5jdGlvbihlLHQpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoZSksZT1qc3BiLnV0aWxzLnNwbGl0NjRMb3c7dmFyIG89anNwYi51dGlscy5zcGxpdDY0SGlnaDtyZXR1cm4gdD9qc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKGUsbyk6anNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGUsbyl9LGpzcGIudXRpbHMuaGFzaDY0QXJyYXlUb0RlY2ltYWxTdHJpbmdzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPUFycmF5KGUubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDtyKyspb1tyXT1qc3BiLnV0aWxzLmhhc2g2NFRvRGVjaW1hbFN0cmluZyhlW3JdLHQpO3JldHVybiBvfSxqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2ND1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7Zm9yKHZhciBvPTA7OD5vJiYoMSE9PWV8fDA8dCk7bysrKXQ9ZSpyW29dK3QscltvXT0yNTUmdCx0Pj4+PTh9Z29vZy5hc3NlcnRzLmFzc2VydCgwPGUubGVuZ3RoKTt2YXIgbz0hMTtcIi1cIj09PWVbMF0mJihvPSEwLGU9ZS5zbGljZSgxKSk7Zm9yKHZhciByPVswLDAsMCwwLDAsMCwwLDBdLG49MDtuPGUubGVuZ3RoO24rKyl0KDEwLGUuY2hhckNvZGVBdChuKS1qc3BiLnV0aWxzLlpFUk9fQ0hBUl9DT0RFXyk7cmV0dXJuIG8mJihmdW5jdGlvbigpe2Zvcih2YXIgZT0wOzg+ZTtlKyspcltlXT0yNTUmfnJbZV19KCksdCgxLDEpKSxnb29nLmNyeXB0LmJ5dGVBcnJheVRvU3RyaW5nKHIpfSxqc3BiLnV0aWxzLnNwbGl0RGVjaW1hbFN0cmluZz1mdW5jdGlvbihlKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGpzcGIudXRpbHMuZGVjaW1hbFN0cmluZ1RvSGFzaDY0KGUpKX0sanNwYi51dGlscy50b0hleERpZ2l0Xz1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgxMD5lP2pzcGIudXRpbHMuWkVST19DSEFSX0NPREVfK2U6anNwYi51dGlscy5BX0NIQVJfQ09ERV8tMTArZSl9LGpzcGIudXRpbHMuZnJvbUhleENoYXJDb2RlXz1mdW5jdGlvbihlKXtyZXR1cm4gZT49anNwYi51dGlscy5BX0NIQVJfQ09ERV8/ZS1qc3BiLnV0aWxzLkFfQ0hBUl9DT0RFXysxMDplLWpzcGIudXRpbHMuWkVST19DSEFSX0NPREVffSxqc3BiLnV0aWxzLmhhc2g2NFRvSGV4U3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5KDE4KTt0WzBdPVwiMFwiLHRbMV09XCJ4XCI7Zm9yKHZhciBvPTA7OD5vO28rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KDctbyk7dFsyKm8rMl09anNwYi51dGlscy50b0hleERpZ2l0XyhyPj40KSx0WzIqbyszXT1qc3BiLnV0aWxzLnRvSGV4RGlnaXRfKDE1JnIpfXJldHVybiB0LmpvaW4oXCJcIil9LGpzcGIudXRpbHMuaGV4U3RyaW5nVG9IYXNoNjQ9ZnVuY3Rpb24oZSl7ZT1lLnRvTG93ZXJDYXNlKCksZ29vZy5hc3NlcnRzLmFzc2VydCgxOD09ZS5sZW5ndGgpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoXCIwXCI9PWVbMF0pLGdvb2cuYXNzZXJ0cy5hc3NlcnQoXCJ4XCI9PWVbMV0pO2Zvcih2YXIgdD1cIlwiLG89MDs4Pm87bysrKXt2YXIgcj1qc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV8oZS5jaGFyQ29kZUF0KDIqbysyKSksbj1qc3BiLnV0aWxzLmZyb21IZXhDaGFyQ29kZV8oZS5jaGFyQ29kZUF0KDIqbyszKSk7dD1TdHJpbmcuZnJvbUNoYXJDb2RlKDE2KnIrbikrdH1yZXR1cm4gdH0sanNwYi51dGlscy5oYXNoNjRUb051bWJlcj1mdW5jdGlvbihlLHQpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoZSksZT1qc3BiLnV0aWxzLnNwbGl0NjRMb3c7dmFyIG89anNwYi51dGlscy5zcGxpdDY0SGlnaDtyZXR1cm4gdD9qc3BiLnV0aWxzLmpvaW5JbnQ2NChlLG8pOmpzcGIudXRpbHMuam9pblVpbnQ2NChlLG8pfSxqc3BiLnV0aWxzLm51bWJlclRvSGFzaDY0PWZ1bmN0aW9uKGUpe3JldHVybiBqc3BiLnV0aWxzLnNwbGl0SW50NjQoZSksanNwYi51dGlscy5qb2luSGFzaDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi51dGlscy5jb3VudFZhcmludHM9ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgcj0wLG49dDtuPG87bisrKXIrPWVbbl0+Pjc7cmV0dXJuIG8tdC1yfSxqc3BiLnV0aWxzLmNvdW50VmFyaW50RmllbGRzPWZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPTA7aWYoMTI4PihyPTgqcitqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpKWZvcig7dDxvJiZlW3QrK109PXI7KWZvcihuKys7Oyl7dmFyIHM9ZVt0KytdO2lmKDA9PSgxMjgmcykpYnJlYWt9ZWxzZSBmb3IoO3Q8bzspe2ZvcihzPXI7MTI4PHM7KXtpZihlW3RdIT0oMTI3JnN8MTI4KSlyZXR1cm4gbjt0Kysscz4+PTd9aWYoZVt0KytdIT1zKWJyZWFrO2ZvcihuKys7MCE9KDEyOCYocz1lW3QrK10pKTspO31yZXR1cm4gbn0sanNwYi51dGlscy5jb3VudEZpeGVkRmllbGRzXz1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBzPTA7aWYoMTI4PnIpZm9yKDt0PG8mJmVbdCsrXT09cjspcysrLHQrPW47ZWxzZSBmb3IoO3Q8bzspe2Zvcih2YXIgaT1yOzEyODxpOyl7aWYoZVt0KytdIT0oMTI3Jml8MTI4KSlyZXR1cm4gcztpPj49N31pZihlW3QrK10hPWkpYnJlYWs7cysrLHQrPW59cmV0dXJuIHN9LGpzcGIudXRpbHMuY291bnRGaXhlZDMyRmllbGRzPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBqc3BiLnV0aWxzLmNvdW50Rml4ZWRGaWVsZHNfKGUsdCxvLDgqcitqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyLDQpfSxqc3BiLnV0aWxzLmNvdW50Rml4ZWQ2NEZpZWxkcz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4ganNwYi51dGlscy5jb3VudEZpeGVkRmllbGRzXyhlLHQsbyw4KnIranNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCw4KX0sanNwYi51dGlscy5jb3VudERlbGltaXRlZEZpZWxkcz1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj0wO2ZvcihyPTgqcitqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQ7dDxvOyl7Zm9yKHZhciBzPXI7MTI4PHM7KXtpZihlW3QrK10hPSgxMjcmc3wxMjgpKXJldHVybiBuO3M+Pj03fWlmKGVbdCsrXSE9cylicmVhaztuKys7Zm9yKHZhciBpPTAsYT0xO2krPSgxMjcmKHM9ZVt0KytdKSkqYSxhKj0xMjgsMCE9KDEyOCZzKTspO3QrPWl9cmV0dXJuIG59LGpzcGIudXRpbHMuZGVidWdCeXRlc1RvVGV4dEZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD0nXCInO2lmKGUpe2U9anNwYi51dGlscy5ieXRlU291cmNlVG9VaW50OEFycmF5KGUpO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKXQrPVwiXFxcXHhcIiwxNj5lW29dJiYodCs9XCIwXCIpLHQrPWVbb10udG9TdHJpbmcoMTYpfXJldHVybiB0KydcIid9LGpzcGIudXRpbHMuZGVidWdTY2FsYXJUb1RleHRGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/Z29vZy5zdHJpbmcucXVvdGUoZSk6ZS50b1N0cmluZygpfSxqc3BiLnV0aWxzLnN0cmluZ1RvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lLmNoYXJDb2RlQXQobyk7aWYoMjU1PHIpdGhyb3cgRXJyb3IoXCJDb252ZXJzaW9uIGVycm9yOiBzdHJpbmcgY29udGFpbnMgY29kZXBvaW50IG91dHNpZGUgb2YgYnl0ZSByYW5nZVwiKTt0W29dPXJ9cmV0dXJuIHR9LGpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheT1mdW5jdGlvbihlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvcj09PVVpbnQ4QXJyYXk/ZTplLmNvbnN0cnVjdG9yPT09QXJyYXlCdWZmZXJ8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXImJmUuY29uc3RydWN0b3I9PT1CdWZmZXJ8fGUuY29uc3RydWN0b3I9PT1BcnJheT9uZXcgVWludDhBcnJheShlKTplLmNvbnN0cnVjdG9yPT09U3RyaW5nP2dvb2cuY3J5cHQuYmFzZTY0LmRlY29kZVN0cmluZ1RvVWludDhBcnJheShlKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJUeXBlIG5vdCBjb252ZXJ0aWJsZSB0byBVaW50OEFycmF5LlwiKSxuZXcgVWludDhBcnJheSgwKSl9LGpzcGIuQmluYXJ5RGVjb2Rlcj1mdW5jdGlvbihlLHQsbyl7dGhpcy5ieXRlc189bnVsbCx0aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTAsdGhpcy5lcnJvcl89ITEsZSYmdGhpcy5zZXRCbG9jayhlLHQsbyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXz1bXSxqc3BiLkJpbmFyeURlY29kZXIuYWxsb2M9ZnVuY3Rpb24oZSx0LG8pe2lmKGpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5sZW5ndGgpe3ZhciByPWpzcGIuQmluYXJ5RGVjb2Rlci5pbnN0YW5jZUNhY2hlXy5wb3AoKTtyZXR1cm4gZSYmci5zZXRCbG9jayhlLHQsbykscn1yZXR1cm4gbmV3IGpzcGIuQmluYXJ5RGVjb2RlcihlLHQsbyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuY2xlYXIoKSwxMDA+anNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCYmanNwYi5CaW5hcnlEZWNvZGVyLmluc3RhbmNlQ2FjaGVfLnB1c2godGhpcyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4ganNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKHRoaXMuYnl0ZXNfLHRoaXMuc3RhcnRfLHRoaXMuZW5kXy10aGlzLnN0YXJ0Xyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmJ5dGVzXz1udWxsLHRoaXMuY3Vyc29yXz10aGlzLmVuZF89dGhpcy5zdGFydF89MCx0aGlzLmVycm9yXz0hMX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ieXRlc199LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuc2V0QmxvY2s9ZnVuY3Rpb24oZSx0LG8pe3RoaXMuYnl0ZXNfPWpzcGIudXRpbHMuYnl0ZVNvdXJjZVRvVWludDhBcnJheShlKSx0aGlzLnN0YXJ0Xz12b2lkIDAhPT10P3Q6MCx0aGlzLmVuZF89dm9pZCAwIT09bz90aGlzLnN0YXJ0XytvOnRoaXMuYnl0ZXNfLmxlbmd0aCx0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oZSl7dGhpcy5lbmRfPWV9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5zZXRDdXJzb3I9ZnVuY3Rpb24oZSl7dGhpcy5jdXJzb3JfPWV9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbihlKXt0aGlzLmN1cnNvcl8rPWUsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUuYXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPT10aGlzLmVuZF99LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucGFzdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl8+dGhpcy5lbmRffSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHwwPnRoaXMuY3Vyc29yX3x8dGhpcy5jdXJzb3JfPnRoaXMuZW5kX30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRWYXJpbnQ2ND1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTI4LG89MCxyPTAsbj0wOzQ+biYmMTI4PD10O24rKylvfD0oMTI3Jih0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSkpPDw3Km47aWYoMTI4PD10JiYob3w9KDEyNyYodD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK10pKTw8Mjgscnw9KDEyNyZ0KT4+NCksMTI4PD10KWZvcihuPTA7NT5uJiYxMjg8PXQ7bisrKXJ8PSgxMjcmKHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdKSk8PDcqbiszO2lmKDEyOD50KXJldHVybiBlKG8+Pj4wLHI+Pj4wKTtnb29nLmFzc2VydHMuZmFpbChcIkZhaWxlZCB0byByZWFkIHZhcmludCwgZW5jb2RpbmcgaXMgaW52YWxpZC5cIiksdGhpcy5lcnJvcl89ITB9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoKGZ1bmN0aW9uKHQsbyl7cmV0dXJuIGpzcGIudXRpbHMuZnJvbVppZ3phZzY0KHQsbyxlKX0pKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXNfLG89dGhpcy5jdXJzb3JfO3RoaXMuY3Vyc29yXys9ODtmb3IodmFyIHI9MCxuPTAscz1vKzc7cz49bztzLS0pcj1yPDw4fHRbc10sbj1uPDw4fHRbcys0XTtyZXR1cm4gZShyLG4pfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnNraXBWYXJpbnQ9ZnVuY3Rpb24oKXtmb3IoOzEyOCZ0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl9dOyl0aGlzLmN1cnNvcl8rKzt0aGlzLmN1cnNvcl8rK30sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS51bnNraXBWYXJpbnQ9ZnVuY3Rpb24oZSl7Zm9yKDsxMjg8ZTspdGhpcy5jdXJzb3JfLS0sZT4+Pj03O3RoaXMuY3Vyc29yXy0tfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc18sdD1lW3RoaXMuY3Vyc29yXyswXSxvPTEyNyZ0O3JldHVybiAxMjg+dD8odGhpcy5jdXJzb3JfKz0xLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pOihvfD0oMTI3Jih0PWVbdGhpcy5jdXJzb3JfKzFdKSk8PDcsMTI4PnQ/KHRoaXMuY3Vyc29yXys9Mixnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxvKToob3w9KDEyNyYodD1lW3RoaXMuY3Vyc29yXysyXSkpPDwxNCwxMjg+dD8odGhpcy5jdXJzb3JfKz0zLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pOihvfD0oMTI3Jih0PWVbdGhpcy5jdXJzb3JfKzNdKSk8PDIxLDEyOD50Pyh0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksbyk6KG98PSgxNSYodD1lW3RoaXMuY3Vyc29yXys0XSkpPDwyOCwxMjg+dD8odGhpcy5jdXJzb3JfKz01LGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8+Pj4wKToodGhpcy5jdXJzb3JfKz01LDEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJjEyODw9ZVt0aGlzLmN1cnNvcl8rK10mJmdvb2cuYXNzZXJ0cy5hc3NlcnQoITEpLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLG8pKSkpKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50MzI9anNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMixqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpLnRvU3RyaW5nKCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiBlPj4+MV4tKDEmZSl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVuc2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5VaW50NjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5JbnQ2NCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luU2lnbmVkRGVjaW1hbFN0cmluZyl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNwbGl0VmFyaW50NjQoanNwYi51dGlscy5qb2luWmlnemFnNjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2NChqc3BiLnV0aWxzLmpvaW5IYXNoNjQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFppZ3phZ1ZhcmludDY0KGpzcGIudXRpbHMuam9pblNpZ25lZERlY2ltYWxTdHJpbmcpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50OD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz0xLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLGV9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSx0PXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTtyZXR1cm4gdGhpcy5jdXJzb3JfKz0yLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLGU8PDB8dDw8OH0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLG89dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLHI9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3JldHVybiB0aGlzLmN1cnNvcl8rPTQsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksKGU8PDB8dDw8OHxvPDwxNnxyPDwyNCk+Pj4wfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5VaW50NjQoZSx0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luVW5zaWduZWREZWNpbWFsU3RyaW5nKGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF07cmV0dXJuIHRoaXMuY3Vyc29yXys9MSxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlPDwyND4+MjR9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLHQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdO3JldHVybiB0aGlzLmN1cnNvcl8rPTIsZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLmN1cnNvcl88PXRoaXMuZW5kXyksKGU8PDB8dDw8OCk8PDE2Pj4xNn0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sdD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV0sbz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMl0scj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rM107cmV0dXJuIHRoaXMuY3Vyc29yXys9NCxnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMuY3Vyc29yXzw9dGhpcy5lbmRfKSxlPDwwfHQ8PDh8bzw8MTZ8cjw8MjR9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luSW50NjQoZSx0KX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVaW50MzIoKSx0PXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBqc3BiLnV0aWxzLmpvaW5TaWduZWREZWNpbWFsU3RyaW5nKGUsdCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZsb2F0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIGpzcGIudXRpbHMuam9pbkZsb2F0MzIoZSwwKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVWludDMyKCksdD10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4ganNwYi51dGlscy5qb2luRmxvYXQ2NChlLHQpfSxqc3BiLkJpbmFyeURlY29kZXIucHJvdG90eXBlLnJlYWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK119LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXNfLG89dGhpcy5jdXJzb3JfO2U9bytlO2Zvcih2YXIgcj1bXSxuPVwiXCI7bzxlOyl7dmFyIHM9dFtvKytdO2lmKDEyOD5zKXIucHVzaChzKTtlbHNle2lmKDE5Mj5zKWNvbnRpbnVlO2lmKDIyND5zKXt2YXIgaT10W28rK107ci5wdXNoKCgzMSZzKTw8Nnw2MyZpKX1lbHNlIGlmKDI0MD5zKXtpPXRbbysrXTt2YXIgYT10W28rK107ci5wdXNoKCgxNSZzKTw8MTJ8KDYzJmkpPDw2fDYzJmEpfWVsc2UgMjQ4PnMmJihzPSg3JnMpPDwxOHwoNjMmKGk9dFtvKytdKSk8PDEyfCg2MyYoYT10W28rK10pKTw8Nnw2MyZ0W28rK10scy09NjU1MzYsci5wdXNoKDU1Mjk2KyhzPj4xMCYxMDIzKSw1NjMyMCsoMTAyMyZzKSkpfTgxOTI8PXIubGVuZ3RoJiYobis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIpLHIubGVuZ3RoPTApfXJldHVybiBuKz1nb29nLmNyeXB0LmJ5dGVBcnJheVRvU3RyaW5nKHIpLHRoaXMuY3Vyc29yXz1vLG59LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFN0cmluZ1dpdGhMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMucmVhZFN0cmluZyhlKX0sanNwYi5CaW5hcnlEZWNvZGVyLnByb3RvdHlwZS5yZWFkQnl0ZXM9ZnVuY3Rpb24oZSl7aWYoMD5lfHx0aGlzLmN1cnNvcl8rZT50aGlzLmJ5dGVzXy5sZW5ndGgpcmV0dXJuIHRoaXMuZXJyb3JfPSEwLGdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCBieXRlIGxlbmd0aCFcIiksbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHQ9dGhpcy5ieXRlc18uc3ViYXJyYXkodGhpcy5jdXJzb3JfLHRoaXMuY3Vyc29yXytlKTtyZXR1cm4gdGhpcy5jdXJzb3JfKz1lLGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5jdXJzb3JfPD10aGlzLmVuZF8pLHR9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuam9pbkhhc2g2NCl9LGpzcGIuQmluYXJ5RGVjb2Rlci5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlc18sdD10aGlzLmN1cnNvcl8sbz1lW3QrMF0scj1lW3QrMV0sbj1lW3QrMl0scz1lW3QrM10saT1lW3QrNF0sYT1lW3QrNV0sZz1lW3QrNl07cmV0dXJuIGU9ZVt0KzddLHRoaXMuY3Vyc29yXys9OCxTdHJpbmcuZnJvbUNoYXJDb2RlKG8scixuLHMsaSxhLGcsZSl9LGpzcGIuQmluYXJ5UmVhZGVyPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmRlY29kZXJfPWpzcGIuQmluYXJ5RGVjb2Rlci5hbGxvYyhlLHQsbyksdGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSx0aGlzLm5leHRGaWVsZF89anNwYi5CaW5hcnlDb25zdGFudHMuSU5WQUxJRF9GSUVMRF9OVU1CRVIsdGhpcy5uZXh0V2lyZVR5cGVfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLklOVkFMSUQsdGhpcy5lcnJvcl89ITEsdGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsfSxqc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXz1bXSxqc3BiLkJpbmFyeVJlYWRlci5hbGxvYz1mdW5jdGlvbihlLHQsbyl7aWYoanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ubGVuZ3RoKXt2YXIgcj1qc3BiLkJpbmFyeVJlYWRlci5pbnN0YW5jZUNhY2hlXy5wb3AoKTtyZXR1cm4gZSYmci5kZWNvZGVyXy5zZXRCbG9jayhlLHQsbykscn1yZXR1cm4gbmV3IGpzcGIuQmluYXJ5UmVhZGVyKGUsdCxvKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmFsbG9jPWpzcGIuQmluYXJ5UmVhZGVyLmFsbG9jLGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5mcmVlPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy5jbGVhcigpLHRoaXMubmV4dEZpZWxkXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5JTlZBTElEX0ZJRUxEX05VTUJFUix0aGlzLm5leHRXaXJlVHlwZV89anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuSU5WQUxJRCx0aGlzLmVycm9yXz0hMSx0aGlzLnJlYWRDYWxsYmFja3NfPW51bGwsMTAwPmpzcGIuQmluYXJ5UmVhZGVyLmluc3RhbmNlQ2FjaGVfLmxlbmd0aCYmanNwYi5CaW5hcnlSZWFkZXIuaW5zdGFuY2VDYWNoZV8ucHVzaCh0aGlzKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkQ3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGRDdXJzb3JffSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dEZpZWxkX30sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldFdpcmVUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlX30sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmlzRGVsaW1pdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuaXNFbmRHcm91cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHx0aGlzLmRlY29kZXJfLmdldEVycm9yKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5zZXRCbG9jaz1mdW5jdGlvbihlLHQsbyl7dGhpcy5kZWNvZGVyXy5zZXRCbG9jayhlLHQsbyksdGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSLHRoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnJlc2V0KCksdGhpcy5uZXh0RmllbGRfPWpzcGIuQmluYXJ5Q29uc3RhbnRzLklOVkFMSURfRklFTERfTlVNQkVSLHRoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5JTlZBTElEfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuYWR2YW5jZT1mdW5jdGlvbihlKXt0aGlzLmRlY29kZXJfLmFkdmFuY2UoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5uZXh0RmllbGQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRlY29kZXJfLmF0RW5kKCkpcmV0dXJuITE7aWYodGhpcy5nZXRFcnJvcigpKXJldHVybiBnb29nLmFzc2VydHMuZmFpbChcIkRlY29kZXIgaGl0IGFuIGVycm9yXCIpLCExO3RoaXMuZmllbGRDdXJzb3JfPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLHQ9ZT4+PjM7cmV0dXJuKGUmPTcpIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzImJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCYmZSE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuU1RBUlRfR1JPVVAmJmUhPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUD8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZTogJXMgKGF0IHBvc2l0aW9uICVzKVwiLGUsdGhpcy5maWVsZEN1cnNvcl8pLHRoaXMuZXJyb3JfPSEwLCExKToodGhpcy5uZXh0RmllbGRfPXQsdGhpcy5uZXh0V2lyZVR5cGVfPWUsITApfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUudW5za2lwSGVhZGVyPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy51bnNraXBWYXJpbnQodGhpcy5uZXh0RmllbGRfPDwzfHRoaXMubmV4dFdpcmVUeXBlXyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwTWF0Y2hpbmdGaWVsZHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5leHRGaWVsZF87Zm9yKHRoaXMudW5za2lwSGVhZGVyKCk7dGhpcy5uZXh0RmllbGQoKSYmdGhpcy5nZXRGaWVsZE51bWJlcigpPT1lOyl0aGlzLnNraXBGaWVsZCgpO3RoaXMuZGVjb2Rlcl8uYXRFbmQoKXx8dGhpcy51bnNraXBIZWFkZXIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBWYXJpbnRGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UPyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwVmFyaW50RmllbGRcIiksdGhpcy5za2lwRmllbGQoKSk6dGhpcy5kZWNvZGVyXy5za2lwVmFyaW50KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRGVsaW1pdGVkRmllbGQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5leHRXaXJlVHlwZV8hPWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRClnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRGVsaW1pdGVkRmllbGRcIiksdGhpcy5za2lwRmllbGQoKTtlbHNle3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTt0aGlzLmRlY29kZXJfLmFkdmFuY2UoZSl9fSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUuc2tpcEZpeGVkMzJGaWVsZD1mdW5jdGlvbigpe3RoaXMubmV4dFdpcmVUeXBlXyE9anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMj8oZ29vZy5hc3NlcnRzLmZhaWwoXCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkMzJGaWVsZFwiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoNCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRml4ZWQ2NEZpZWxkPWZ1bmN0aW9uKCl7dGhpcy5uZXh0V2lyZVR5cGVfIT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0Pyhnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRml4ZWQ2NEZpZWxkXCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg4KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnNraXBHcm91cD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLm5leHRGaWVsZF87Oyl7aWYoIXRoaXMubmV4dEZpZWxkKCkpe2dvb2cuYXNzZXJ0cy5mYWlsKFwiVW5tYXRjaGVkIHN0YXJ0LWdyb3VwIHRhZzogc3RyZWFtIEVPRlwiKSx0aGlzLmVycm9yXz0hMDticmVha31pZih0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCl7dGhpcy5uZXh0RmllbGRfIT1lJiYoZ29vZy5hc3NlcnRzLmZhaWwoXCJVbm1hdGNoZWQgZW5kLWdyb3VwIHRhZ1wiKSx0aGlzLmVycm9yXz0hMCk7YnJlYWt9dGhpcy5za2lwRmllbGQoKX19LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5za2lwRmllbGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5uZXh0V2lyZVR5cGVfKXtjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVDp0aGlzLnNraXBWYXJpbnRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NDp0aGlzLnNraXBGaXhlZDY0RmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRDp0aGlzLnNraXBEZWxpbWl0ZWRGaWVsZCgpO2JyZWFrO2Nhc2UganNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMjp0aGlzLnNraXBGaXhlZDMyRmllbGQoKTticmVhaztjYXNlIGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQOnRoaXMuc2tpcEdyb3VwKCk7YnJlYWs7ZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgd2lyZSBlbmNvZGluZyBmb3IgZmllbGQuXCIpfX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlZ2lzdGVyUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7bnVsbD09PXRoaXMucmVhZENhbGxiYWNrc18mJih0aGlzLnJlYWRDYWxsYmFja3NfPXt9KSxnb29nLmFzc2VydHMuYXNzZXJ0KCF0aGlzLnJlYWRDYWxsYmFja3NfW2VdKSx0aGlzLnJlYWRDYWxsYmFja3NfW2VdPXR9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5ydW5SZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9PXRoaXMucmVhZENhbGxiYWNrc18pLGU9dGhpcy5yZWFkQ2FsbGJhY2tzX1tlXSxnb29nLmFzc2VydHMuYXNzZXJ0KGUpLGUodGhpcyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQW55PWZ1bmN0aW9uKGUpe3RoaXMubmV4dFdpcmVUeXBlXz1qc3BiLkJpbmFyeUNvbnN0YW50cy5GaWVsZFR5cGVUb1dpcmVUeXBlKGUpO3ZhciB0PWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZpZWxkVHlwZTtzd2l0Y2goZSl7Y2FzZSB0LkRPVUJMRTpyZXR1cm4gdGhpcy5yZWFkRG91YmxlKCk7Y2FzZSB0LkZMT0FUOnJldHVybiB0aGlzLnJlYWRGbG9hdCgpO2Nhc2UgdC5JTlQ2NDpyZXR1cm4gdGhpcy5yZWFkSW50NjQoKTtjYXNlIHQuVUlOVDY0OnJldHVybiB0aGlzLnJlYWRVaW50NjQoKTtjYXNlIHQuSU5UMzI6cmV0dXJuIHRoaXMucmVhZEludDMyKCk7Y2FzZSB0LkZJWEVENjQ6cmV0dXJuIHRoaXMucmVhZEZpeGVkNjQoKTtjYXNlIHQuRklYRUQzMjpyZXR1cm4gdGhpcy5yZWFkRml4ZWQzMigpO2Nhc2UgdC5CT09MOnJldHVybiB0aGlzLnJlYWRCb29sKCk7Y2FzZSB0LlNUUklORzpyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKCk7Y2FzZSB0LkdST1VQOmdvb2cuYXNzZXJ0cy5mYWlsKFwiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKVwiKTtjYXNlIHQuTUVTU0FHRTpnb29nLmFzc2VydHMuZmFpbChcIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKVwiKTtjYXNlIHQuQllURVM6cmV0dXJuIHRoaXMucmVhZEJ5dGVzKCk7Y2FzZSB0LlVJTlQzMjpyZXR1cm4gdGhpcy5yZWFkVWludDMyKCk7Y2FzZSB0LkVOVU06cmV0dXJuIHRoaXMucmVhZEVudW0oKTtjYXNlIHQuU0ZJWEVEMzI6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDMyKCk7Y2FzZSB0LlNGSVhFRDY0OnJldHVybiB0aGlzLnJlYWRTZml4ZWQ2NCgpO2Nhc2UgdC5TSU5UMzI6cmV0dXJuIHRoaXMucmVhZFNpbnQzMigpO2Nhc2UgdC5TSU5UNjQ6cmV0dXJuIHRoaXMucmVhZFNpbnQ2NCgpO2Nhc2UgdC5GSEFTSDY0OnJldHVybiB0aGlzLnJlYWRGaXhlZEhhc2g2NCgpO2Nhc2UgdC5WSEFTSDY0OnJldHVybiB0aGlzLnJlYWRWYXJpbnRIYXNoNjQoKTtkZWZhdWx0Omdvb2cuYXNzZXJ0cy5mYWlsKFwiSW52YWxpZCBmaWVsZCB0eXBlIGluIHJlYWRBbnkoKVwiKX1yZXR1cm4gMH0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIG89dGhpcy5kZWNvZGVyXy5nZXRFbmQoKSxyPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCkrcix0aGlzLmRlY29kZXJfLnNldEVuZChyKSx0KGUsdGhpcyksdGhpcy5kZWNvZGVyXy5zZXRDdXJzb3IociksdGhpcy5kZWNvZGVyXy5zZXRFbmQobyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkR3JvdXA9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRGaWVsZF89PWUpLG8odCx0aGlzKSx0aGlzLmVycm9yX3x8dGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVB8fChnb29nLmFzc2VydHMuZmFpbChcIkdyb3VwIHN1Ym1lc3NhZ2UgZGlkIG5vdCBlbmQgd2l0aCBhbiBFTkRfR1JPVVAgdGFnXCIpLHRoaXMuZXJyb3JfPSEwKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLmdldEZpZWxkRGVjb2Rlcj1mdW5jdGlvbigpe2dvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpO3ZhciBlPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSx0PXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCksbz10K2U7cmV0dXJuIGU9anNwYi5CaW5hcnlEZWNvZGVyLmFsbG9jKHRoaXMuZGVjb2Rlcl8uZ2V0QnVmZmVyKCksdCxlKSx0aGlzLmRlY29kZXJfLnNldEN1cnNvcihvKSxlfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkSW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50MzJTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0U3RyaW5nKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFVpbnQ2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRVaW50NjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTZml4ZWQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQzMiksdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKS50b1N0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZygpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5kZWNvZGVyXy5yZWFkRG91YmxlKCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSwhIXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIGU9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTdHJpbmcoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkQnl0ZXM9ZnVuY3Rpb24oKXtnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKTt2YXIgZT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEJ5dGVzKGUpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0KHRoaXMubmV4dFdpcmVUeXBlXz09anNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQoKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRTaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludEhhc2g2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0VmFyaW50NjQoZSl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkU3BsaXRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5kZWNvZGVyXy5yZWFkU3BsaXRWYXJpbnQ2NCgoZnVuY3Rpb24odCxvKXtyZXR1cm4ganNwYi51dGlscy5mcm9tWmlnemFnNjQodCxvLGUpfSkpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIGdvb2cuYXNzZXJ0cy5hc3NlcnQodGhpcy5uZXh0V2lyZVR5cGVfPT1qc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmRlY29kZXJfLnJlYWRGaXhlZEhhc2g2NCgpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZGVjb2Rlcl8ucmVhZFNwbGl0Rml4ZWQ2NChlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaWVsZF89ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCh0aGlzLm5leHRXaXJlVHlwZV89PWpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCk7dmFyIHQ9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3Q9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKSt0O2Zvcih2YXIgbz1bXTt0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpPHQ7KW8ucHVzaChlLmNhbGwodGhpcy5kZWNvZGVyXykpO3JldHVybiBvfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMil9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZyl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFVpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0KX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZEZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVpbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRTZml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkSW50MzIpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0U3RyaW5nKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRGbG9hdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRmxvYXQpfSxqc3BiLkJpbmFyeVJlYWRlci5wcm90b3R5cGUucmVhZFBhY2tlZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRG91YmxlKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRCb29sKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRFbnVtKX0sanNwYi5CaW5hcnlSZWFkZXIucHJvdG90eXBlLnJlYWRQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCl9LGpzcGIuQmluYXJ5UmVhZGVyLnByb3RvdHlwZS5yZWFkUGFja2VkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KX0sanNwYi5CaW5hcnlFbmNvZGVyPWZ1bmN0aW9uKCl7dGhpcy5idWZmZXJfPVtdfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlcl8ubGVuZ3RofSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYnVmZmVyXztyZXR1cm4gdGhpcy5idWZmZXJfPVtdLGV9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCl7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCh0PT1NYXRoLmZsb29yKHQpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PXQmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKTswPHR8fDEyNzxlOyl0aGlzLmJ1ZmZlcl8ucHVzaCgxMjcmZXwxMjgpLGU9KGU+Pj43fHQ8PDI1KT4+PjAsdD4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU3BsaXRGaXhlZDY0PWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KHQ9PU1hdGguZmxvb3IodCkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9ZSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVVaW50MzIoZSksdGhpcy53cml0ZVVpbnQzMih0KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oZSl7Zm9yKGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMik7MTI3PGU7KXRoaXMuYnVmZmVyXy5wdXNoKDEyNyZlfDEyOCksZT4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50MzI9ZnVuY3Rpb24oZSl7aWYoZ29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSwwPD1lKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyKGUpO2Vsc2V7Zm9yKHZhciB0PTA7OT50O3QrKyl0aGlzLmJ1ZmZlcl8ucHVzaCgxMjcmZXwxMjgpLGU+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKDEpfX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVuc2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSxqc3BiLnV0aWxzLnNwbGl0SW50NjQoZSksdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSxqc3BiLnV0aWxzLnNwbGl0SW50NjQoZSksdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50MzI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMigoZTw8MV5lPj4zMSk+Pj4wKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksanNwYi51dGlscy5zcGxpdFppZ3phZzY0KGUpLHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nPWZ1bmN0aW9uKGUpe3RoaXMud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoZSkpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7anNwYi51dGlscy5zcGxpdEhhc2g2NChlKSxqc3BiLnV0aWxzLnRvWmlnemFnNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gsKGZ1bmN0aW9uKGUsbyl7dC53cml0ZVNwbGl0VmFyaW50NjQoZT4+PjAsbz4+PjApfSkpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDg9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJjI1Nj5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDE2PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD1lJiY2NTUzNj5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzI9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMyKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjE2JjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjI0JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50NjQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KDA8PWUmJmU8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzY0KSxqc3BiLnV0aWxzLnNwbGl0VWludDY0KGUpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KSx0aGlzLndyaXRlVWludDMyKGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoLTEyODw9ZSYmMTI4PmUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQxNj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoLTMyNzY4PD1lJiYzMjc2OD5lKSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MCYyNTUpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj44JjI1NSl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQzMj1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMuYnVmZmVyXy5wdXNoKGU+Pj4wJjI1NSksdGhpcy5idWZmZXJfLnB1c2goZT4+PjgmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MTYmMjU1KSx0aGlzLmJ1ZmZlcl8ucHVzaChlPj4+MjQmMjU1KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDY0PWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoZT09TWF0aC5mbG9vcihlKSksZ29vZy5hc3NlcnRzLmFzc2VydChlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiZlPGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyksanNwYi51dGlscy5zcGxpdEludDY0KGUpLHRoaXMud3JpdGVTcGxpdEZpeGVkNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydChlPT1NYXRoLmZsb29yKGUpKSxnb29nLmFzc2VydHMuYXNzZXJ0KCtlPj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzJiYrZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLGpzcGIudXRpbHMuc3BsaXRIYXNoNjQoanNwYi51dGlscy5kZWNpbWFsU3RyaW5nVG9IYXNoNjQoZSkpLHRoaXMud3JpdGVTcGxpdEZpeGVkNjQoanNwYi51dGlscy5zcGxpdDY0TG93LGpzcGIudXRpbHMuc3BsaXQ2NEhpZ2gpfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRmxvYXQ9ZnVuY3Rpb24oZSl7Z29vZy5hc3NlcnRzLmFzc2VydCgxLzA9PT1lfHwtMS8wPT09ZXx8aXNOYU4oZSl8fGU+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDMyX01BWCYmZTw9anNwYi5CaW5hcnlDb25zdGFudHMuRkxPQVQzMl9NQVgpLGpzcGIudXRpbHMuc3BsaXRGbG9hdDMyKGUpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0TG93KX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZURvdWJsZT1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KDEvMD09PWV8fC0xLzA9PT1lfHxpc05hTihlKXx8ZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLkZMT0FUNjRfTUFYJiZlPD1qc3BiLkJpbmFyeUNvbnN0YW50cy5GTE9BVDY0X01BWCksanNwYi51dGlscy5zcGxpdEZsb2F0NjQoZSksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVCb29sPWZ1bmN0aW9uKGUpe2dvb2cuYXNzZXJ0cy5hc3NlcnQoXCJib29sZWFuXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSksdGhpcy5idWZmZXJfLnB1c2goZT8xOjApfSxqc3BiLkJpbmFyeUVuY29kZXIucHJvdG90eXBlLndyaXRlRW51bT1mdW5jdGlvbihlKXtnb29nLmFzc2VydHMuYXNzZXJ0KGU9PU1hdGguZmxvb3IoZSkpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZT49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmZTxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVTaWduZWRWYXJpbnQzMihlKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGUpe3RoaXMuYnVmZmVyXy5wdXNoLmFwcGx5KHRoaXMuYnVmZmVyXyxlKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihlKXtqc3BiLnV0aWxzLnNwbGl0SGFzaDY0KGUpLHRoaXMud3JpdGVTcGxpdFZhcmludDY0KGpzcGIudXRpbHMuc3BsaXQ2NExvdyxqc3BiLnV0aWxzLnNwbGl0NjRIaWdoKX0sanNwYi5CaW5hcnlFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZpeGVkSGFzaDY0PWZ1bmN0aW9uKGUpe2pzcGIudXRpbHMuc3BsaXRIYXNoNjQoZSksdGhpcy53cml0ZVVpbnQzMihqc3BiLnV0aWxzLnNwbGl0NjRMb3cpLHRoaXMud3JpdGVVaW50MzIoanNwYi51dGlscy5zcGxpdDY0SGlnaCl9LGpzcGIuQmluYXJ5RW5jb2Rlci5wcm90b3R5cGUud3JpdGVTdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYnVmZmVyXy5sZW5ndGgsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lLmNoYXJDb2RlQXQobyk7aWYoMTI4PnIpdGhpcy5idWZmZXJfLnB1c2gocik7ZWxzZSBpZigyMDQ4PnIpdGhpcy5idWZmZXJfLnB1c2gocj4+NnwxOTIpLHRoaXMuYnVmZmVyXy5wdXNoKDYzJnJ8MTI4KTtlbHNlIGlmKDY1NTM2PnIpaWYoNTUyOTY8PXImJjU2MzE5Pj1yJiZvKzE8ZS5sZW5ndGgpe3ZhciBuPWUuY2hhckNvZGVBdChvKzEpOzU2MzIwPD1uJiY1NzM0Mz49biYmKHI9MTAyNCooci01NTI5Nikrbi01NjMyMCs2NTUzNix0aGlzLmJ1ZmZlcl8ucHVzaChyPj4xOHwyNDApLHRoaXMuYnVmZmVyXy5wdXNoKHI+PjEyJjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2gocj4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKDYzJnJ8MTI4KSxvKyspfWVsc2UgdGhpcy5idWZmZXJfLnB1c2gocj4+MTJ8MjI0KSx0aGlzLmJ1ZmZlcl8ucHVzaChyPj42JjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goNjMmcnwxMjgpfXJldHVybiB0aGlzLmJ1ZmZlcl8ubGVuZ3RoLXR9LGpzcGIuYXJpdGg9e30sanNwYi5hcml0aC5VSW50NjQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmxvPWUsdGhpcy5oaT10fSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhpPGUuaGl8fHRoaXMuaGk9PWUuaGkmJnRoaXMubG88ZS5sbz8tMTp0aGlzLmhpPT1lLmhpJiZ0aGlzLmxvPT1lLmxvPzA6MX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvPj4+MXwoMSZ0aGlzLmhpKTw8MzEpPj4+MCx0aGlzLmhpPj4+MT4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubGVmdFNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvPDwxPj4+MCwodGhpcy5oaTw8MXx0aGlzLmxvPj4+MzEpPj4+MCl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5tc2I9ZnVuY3Rpb24oKXtyZXR1cm4hISgyMTQ3NDgzNjQ4JnRoaXMuaGkpfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubHNiPWZ1bmN0aW9uKCl7cmV0dXJuISEoMSZ0aGlzLmxvKX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLnplcm89ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5sbyYmMD09dGhpcy5oaX0sanNwYi5hcml0aC5VSW50NjQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguVUludDY0KCh0aGlzLmxvK2UubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrZS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2UubG8/MTowKT4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQoKHRoaXMubG8tZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS1lLmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby1lLmxvPzE6MCk+Pj4wKX0sanNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzI9ZnVuY3Rpb24oZSx0KXt2YXIgbz02NTUzNSZlLHI9NjU1MzUmdCxuPXQ+Pj4xNjtmb3IodD1vKnIrNjU1MzYqKG8qbiY2NTUzNSkrNjU1MzYqKChlPj4+PTE2KSpyJjY1NTM1KSxvPWUqbisobypuPj4+MTYpKyhlKnI+Pj4xNik7NDI5NDk2NzI5Njw9dDspdC09NDI5NDk2NzI5NixvKz0xO3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQodD4+PjAsbz4+PjApfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUpe3ZhciB0PWpzcGIuYXJpdGguVUludDY0Lm11bDMyeDMyKHRoaXMubG8sZSk7cmV0dXJuKGU9anNwYi5hcml0aC5VSW50NjQubXVsMzJ4MzIodGhpcy5oaSxlKSkuaGk9ZS5sbyxlLmxvPTAsdC5hZGQoZSl9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZSl7aWYoMD09ZSlyZXR1cm5bXTt2YXIgdD1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKSxvPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpO2U9bmV3IGpzcGIuYXJpdGguVUludDY0KGUsMCk7Zm9yKHZhciByPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgxLDApOyFlLm1zYigpOyllPWUubGVmdFNoaWZ0KCkscj1yLmxlZnRTaGlmdCgpO2Zvcig7IXIuemVybygpOykwPj1lLmNtcChvKSYmKHQ9dC5hZGQociksbz1vLnN1YihlKSksZT1lLnJpZ2h0U2hpZnQoKSxyPXIucmlnaHRTaGlmdCgpO3JldHVyblt0LG9dfSxqc3BiLmFyaXRoLlVJbnQ2NC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIGU9XCJcIix0PXRoaXM7IXQuemVybygpOyl7dmFyIG89KHQ9dC5kaXYoMTApKVswXTtlPXRbMV0ubG8rZSx0PW99cmV0dXJuXCJcIj09ZSYmKGU9XCIwXCIpLGV9LGpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLG89bmV3IGpzcGIuYXJpdGguVUludDY0KDAsMCkscj0wO3I8ZS5sZW5ndGg7cisrKXtpZihcIjBcIj5lW3JdfHxcIjlcIjxlW3JdKXJldHVybiBudWxsO3ZhciBuPXBhcnNlSW50KGVbcl0sMTApO28ubG89bix0PXQubXVsKDEwKS5hZGQobyl9cmV0dXJuIHR9LGpzcGIuYXJpdGguVUludDY0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcganNwYi5hcml0aC5VSW50NjQodGhpcy5sbyx0aGlzLmhpKX0sanNwYi5hcml0aC5JbnQ2ND1mdW5jdGlvbihlLHQpe3RoaXMubG89ZSx0aGlzLmhpPXR9LGpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoKHRoaXMubG8rZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaStlLmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rZS5sbz8xOjApPj4+MCl9LGpzcGIuYXJpdGguSW50NjQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQoKHRoaXMubG8tZS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS1lLmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby1lLmxvPzE6MCk+Pj4wKX0sanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzcGIuYXJpdGguSW50NjQodGhpcy5sbyx0aGlzLmhpKX0sanNwYi5hcml0aC5JbnQ2NC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wIT0oMjE0NzQ4MzY0OCZ0aGlzLmhpKSx0PW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCh0aGlzLmxvLHRoaXMuaGkpO3JldHVybiBlJiYodD1uZXcganNwYi5hcml0aC5VSW50NjQoMCwwKS5zdWIodCkpLChlP1wiLVwiOlwiXCIpK3QudG9TdHJpbmcoKX0sanNwYi5hcml0aC5JbnQ2NC5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PTA8ZS5sZW5ndGgmJlwiLVwiPT1lWzBdO3JldHVybiB0JiYoZT1lLnN1YnN0cmluZygxKSksbnVsbD09PShlPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcoZSkpP251bGw6KHQmJihlPW5ldyBqc3BiLmFyaXRoLlVJbnQ2NCgwLDApLnN1YihlKSksbmV3IGpzcGIuYXJpdGguSW50NjQoZS5sbyxlLmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyPWZ1bmN0aW9uKCl7dGhpcy5ibG9ja3NfPVtdLHRoaXMudG90YWxMZW5ndGhfPTAsdGhpcy5lbmNvZGVyXz1uZXcganNwYi5CaW5hcnlFbmNvZGVyLHRoaXMuYm9va21hcmtzXz1bXX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmFwcGVuZFVpbnQ4QXJyYXlfPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy5ibG9ja3NfLnB1c2godCksdGhpcy5ibG9ja3NfLnB1c2goZSksdGhpcy50b3RhbExlbmd0aF8rPXQubGVuZ3RoK2UubGVuZ3RofSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuYmVnaW5EZWxpbWl0ZWRfPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSxlPXRoaXMuZW5jb2Rlcl8uZW5kKCksdGhpcy5ibG9ja3NfLnB1c2goZSksdGhpcy50b3RhbExlbmd0aF8rPWUubGVuZ3RoLGUucHVzaCh0aGlzLnRvdGFsTGVuZ3RoXyksZX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmVuZERlbGltaXRlZF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wb3AoKTtmb3IodD10aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpLXQsZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10KTsxMjc8dDspZS5wdXNoKDEyNyZ0fDEyOCksdD4+Pj03LHRoaXMudG90YWxMZW5ndGhfKys7ZS5wdXNoKHQpLHRoaXMudG90YWxMZW5ndGhfKyt9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCxvKXt0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGUuc3ViYXJyYXkodCxvKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5tYXliZVdyaXRlU2VyaWFsaXplZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG8pe251bGwhPWUmJm51bGwhPXQmJm51bGwhPW8mJnRoaXMud3JpdGVTZXJpYWxpemVkTWVzc2FnZShlLHQsbyl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuYmxvY2tzXz1bXSx0aGlzLmVuY29kZXJfLmVuZCgpLHRoaXMudG90YWxMZW5ndGhfPTAsdGhpcy5ib29rbWFya3NfPVtdfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZ2V0UmVzdWx0QnVmZmVyPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPT10aGlzLmJvb2ttYXJrc18ubGVuZ3RoKTtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy50b3RhbExlbmd0aF8rdGhpcy5lbmNvZGVyXy5sZW5ndGgoKSksdD10aGlzLmJsb2Nrc18sbz10Lmxlbmd0aCxyPTAsbj0wO248bztuKyspe3ZhciBzPXRbbl07ZS5zZXQocyxyKSxyKz1zLmxlbmd0aH1yZXR1cm4gdD10aGlzLmVuY29kZXJfLmVuZCgpLGUuc2V0KHQscikscis9dC5sZW5ndGgsZ29vZy5hc3NlcnRzLmFzc2VydChyPT1lLmxlbmd0aCksdGhpcy5ibG9ja3NfPVtlXSxlfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUuZ2V0UmVzdWx0QmFzZTY0U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBnb29nLmNyeXB0LmJhc2U2NC5lbmNvZGVCeXRlQXJyYXkodGhpcy5nZXRSZXN1bHRCdWZmZXIoKSxlKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLmJlZ2luU3ViTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLmJvb2ttYXJrc18ucHVzaCh0aGlzLmJlZ2luRGVsaW1pdGVkXyhlKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS5lbmRTdWJNZXNzYWdlPWZ1bmN0aW9uKCl7Z29vZy5hc3NlcnRzLmFzc2VydCgwPD10aGlzLmJvb2ttYXJrc18ubGVuZ3RoKSx0aGlzLmVuZERlbGltaXRlZF8odGhpcy5ib29rbWFya3NfLnBvcCgpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRmllbGRIZWFkZXJfPWZ1bmN0aW9uKGUsdCl7Z29vZy5hc3NlcnRzLmFzc2VydCgxPD1lJiZlPT1NYXRoLmZsb29yKGUpKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmUrdCl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUFueT1mdW5jdGlvbihlLHQsbyl7dmFyIHI9anNwYi5CaW5hcnlDb25zdGFudHMuRmllbGRUeXBlO3N3aXRjaChlKXtjYXNlIHIuRE9VQkxFOnRoaXMud3JpdGVEb3VibGUodCxvKTticmVhaztjYXNlIHIuRkxPQVQ6dGhpcy53cml0ZUZsb2F0KHQsbyk7YnJlYWs7Y2FzZSByLklOVDY0OnRoaXMud3JpdGVJbnQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5VSU5UNjQ6dGhpcy53cml0ZVVpbnQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5JTlQzMjp0aGlzLndyaXRlSW50MzIodCxvKTticmVhaztjYXNlIHIuRklYRUQ2NDp0aGlzLndyaXRlRml4ZWQ2NCh0LG8pO2JyZWFrO2Nhc2Ugci5GSVhFRDMyOnRoaXMud3JpdGVGaXhlZDMyKHQsbyk7YnJlYWs7Y2FzZSByLkJPT0w6dGhpcy53cml0ZUJvb2wodCxvKTticmVhaztjYXNlIHIuU1RSSU5HOnRoaXMud3JpdGVTdHJpbmcodCxvKTticmVhaztjYXNlIHIuR1JPVVA6Z29vZy5hc3NlcnRzLmZhaWwoXCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKVwiKTticmVhaztjYXNlIHIuTUVTU0FHRTpnb29nLmFzc2VydHMuZmFpbChcIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHdyaXRlQW55KClcIik7YnJlYWs7Y2FzZSByLkJZVEVTOnRoaXMud3JpdGVCeXRlcyh0LG8pO2JyZWFrO2Nhc2Ugci5VSU5UMzI6dGhpcy53cml0ZVVpbnQzMih0LG8pO2JyZWFrO2Nhc2Ugci5FTlVNOnRoaXMud3JpdGVFbnVtKHQsbyk7YnJlYWs7Y2FzZSByLlNGSVhFRDMyOnRoaXMud3JpdGVTZml4ZWQzMih0LG8pO2JyZWFrO2Nhc2Ugci5TRklYRUQ2NDp0aGlzLndyaXRlU2ZpeGVkNjQodCxvKTticmVhaztjYXNlIHIuU0lOVDMyOnRoaXMud3JpdGVTaW50MzIodCxvKTticmVhaztjYXNlIHIuU0lOVDY0OnRoaXMud3JpdGVTaW50NjQodCxvKTticmVhaztjYXNlIHIuRkhBU0g2NDp0aGlzLndyaXRlRml4ZWRIYXNoNjQodCxvKTticmVhaztjYXNlIHIuVkhBU0g2NDp0aGlzLndyaXRlVmFyaW50SGFzaDY0KHQsbyk7YnJlYWs7ZGVmYXVsdDpnb29nLmFzc2VydHMuZmFpbChcIkludmFsaWQgZmllbGQgdHlwZSBpbiB3cml0ZUFueSgpXCIpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVW5zaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50MzJfPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVppZ3phZ1ZhcmludDY0Xz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ189ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nKHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlWmlnemFnVmFyaW50SGFzaDY0Xz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50SGFzaDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50MzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlSW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1wYXJzZUludCh0LDEwKSxnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyh0KSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuVkFSSU5UKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NCh0LmxvLHQuaGkpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzIpLHRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVWludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHQ9cGFyc2VJbnQodCwxMCksZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50NjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182NCksdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGUsdCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVVaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLmFyaXRoLlVJbnQ2NC5mcm9tU3RyaW5nKHQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHQubG8sdC5oaSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50MzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCh0Pj0tanNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzMxJiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSksdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhlLHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ludDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT182MyYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMpLHRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oZSx0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiZ0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0XyhlLHQpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiZ0aGlzLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfKGUsdCl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYoZ29vZy5hc3NlcnRzLmFzc2VydCgwPD10JiZ0PGpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMiksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVEMzIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoMDw9dCYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjQpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJih0PWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQodC5sbyx0LmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNmaXhlZDMyPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlSW50MzIodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTZml4ZWQ2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KHQ+PS1qc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fNjMmJnQ8anNwYi5CaW5hcnlDb25zdGFudHMuVFdPX1RPXzYzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZUludDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLmFyaXRoLkludDY0LmZyb21TdHJpbmcodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQodC5sbyx0LmhpKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUZsb2F0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDMyKSx0aGlzLmVuY29kZXJfLndyaXRlRmxvYXQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVEb3VibGU9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkZJWEVENjQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVEb3VibGUodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVCb29sPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoXCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZUJvb2wodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVFbnVtPWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodD49LWpzcGIuQmluYXJ5Q29uc3RhbnRzLlRXT19UT18zMSYmdDxqc3BiLkJpbmFyeUNvbnN0YW50cy5UV09fVE9fMzEpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMih0KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZz1mdW5jdGlvbihlLHQpe251bGwhPXQmJihlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTdHJpbmcodCksdGhpcy5lbmREZWxpbWl0ZWRfKGUpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlQnl0ZXM9ZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodD1qc3BiLnV0aWxzLmJ5dGVTb3VyY2VUb1VpbnQ4QXJyYXkodCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIodC5sZW5ndGgpLHRoaXMuYXBwZW5kVWludDhBcnJheV8odCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVNZXNzYWdlPWZ1bmN0aW9uKGUsdCxvKXtudWxsIT10JiYoZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKSxvKHQsdGhpcyksdGhpcy5lbmREZWxpbWl0ZWRfKGUpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlTWVzc2FnZVNldD1mdW5jdGlvbihlLHQsbyl7bnVsbCE9dCYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygyLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlZBUklOVCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGUpLGU9dGhpcy5iZWdpbkRlbGltaXRlZF8oMyksbyh0LHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhlKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRU5EX0dST1VQKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZUdyb3VwPWZ1bmN0aW9uKGUsdCxvKXtudWxsIT10JiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLlNUQVJUX0dST1VQKSxvKHQsdGhpcyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkVORF9HUk9VUCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihlLHQpe251bGwhPXQmJihnb29nLmFzc2VydHMuYXNzZXJ0KDg9PXQubGVuZ3RoKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuRklYRUQ2NCksdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KHQpKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7bnVsbCE9dCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQoOD09dC5sZW5ndGgpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQodCkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSx0LG8pe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5GSVhFRDY0KSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KHQsbyl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8pe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KHQsbyl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8pe3RoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5WQVJJTlQpO3ZhciByPXRoaXMuZW5jb2Rlcl87anNwYi51dGlscy50b1ppZ3phZzY0KHQsbywoZnVuY3Rpb24oZSx0KXtyLndyaXRlU3BsaXRWYXJpbnQ2NChlPj4+MCx0Pj4+MCl9KSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRJbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUludDMyU3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLndyaXRlU3BsaXRGaXhlZDY0KGUsbyh0W25dKSxyKHRbbl0pKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy53cml0ZVNwbGl0VmFyaW50NjQoZSxvKHRbbl0pLHIodFtuXSkpfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNwbGl0WmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oZSx0LG8scil7aWYobnVsbCE9dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLndyaXRlU3BsaXRaaWd6YWdWYXJpbnQ2NChlLG8odFtuXSkscih0W25dKSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkSW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVJbnQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFVpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDMyU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVWludDMyU3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkVWludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVVaW50NjRTdHJpbmcoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTaW50SGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlWmlnemFnVmFyaW50SGFzaDY0XyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVGaXhlZDMyKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkRml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZUZpeGVkNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRml4ZWQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZFNmaXhlZDMyPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU2ZpeGVkMzIoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRTZml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy53cml0ZVNmaXhlZDY0KGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVTZml4ZWQ2NFN0cmluZyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZsb2F0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRmxvYXQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWREb3VibGU9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVEb3VibGUoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRCb29sPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlQm9vbChlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEVudW09ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVFbnVtKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkU3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlU3RyaW5nKGUsdFtvXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVJlcGVhdGVkQnl0ZXM9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVCeXRlcyhlLHRbb10pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZE1lc3NhZ2U9ZnVuY3Rpb24oZSx0LG8pe2lmKG51bGwhPXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO28odFtyXSx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8obil9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEdyb3VwPWZ1bmN0aW9uKGUsdCxvKXtpZihudWxsIT10KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5TVEFSVF9HUk9VUCksbyh0W3JdLHRoaXMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5FTkRfR1JPVVApfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVSZXBlYXRlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dClmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLndyaXRlRml4ZWRIYXNoNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUmVwZWF0ZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10KWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMud3JpdGVWYXJpbnRIYXNoNjQoZSx0W29dKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50MzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIocGFyc2VJbnQodFtvXSwxMCkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDY0PWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNwbGl0Rml4ZWQ2ND1mdW5jdGlvbihlLHQsbyxyKXtpZihudWxsIT10KXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQobyh0W25dKSxyKHRbbl0pKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQobyh0W25dKSxyKHRbbl0pKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTcGxpdFppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGUsdCxvLHIpe2lmKG51bGwhPXQpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBuPXRoaXMuZW5jb2Rlcl8scz0wO3M8dC5sZW5ndGg7cysrKWpzcGIudXRpbHMudG9aaWd6YWc2NChvKHRbc10pLHIodFtzXSksKGZ1bmN0aW9uKGUsdCl7bi53cml0ZVNwbGl0VmFyaW50NjQoZT4+PjAsdD4+PjApfSkpO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPWpzcGIuYXJpdGguSW50NjQuZnJvbVN0cmluZyh0W29dKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChyLmxvLHIuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHBhcnNlSW50KHRbb10sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQ2NCh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9anNwYi5hcml0aC5VSW50NjQuZnJvbVN0cmluZyh0W29dKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChyLmxvLHIuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZFNpbnQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMih0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRTaW50NjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpe2U9dGhpcy5iZWdpbkRlbGltaXRlZF8oZSk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludEhhc2g2NChqc3BiLnV0aWxzLmRlY2ltYWxTdHJpbmdUb0hhc2g2NCh0W29dKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ludEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKXtlPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGUpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnRIYXNoNjQodFtvXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGUpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQzMj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMih0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQ2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQ2NCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBvPWpzcGIuYXJpdGguVUludDY0LmZyb21TdHJpbmcodFtlXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChvLmxvLG8uaGkpfX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQzMih0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NFN0cmluZyh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRmxvYXQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhlLGpzcGIuQmluYXJ5Q29uc3RhbnRzLldpcmVUeXBlLkRFTElNSVRFRCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCp0Lmxlbmd0aCksZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVGbG9hdCh0W2VdKX0sanNwYi5CaW5hcnlXcml0ZXIucHJvdG90eXBlLndyaXRlUGFja2VkRG91YmxlPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqdC5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRCb29sPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dCYmdC5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oZSxqc3BiLkJpbmFyeUNvbnN0YW50cy5XaXJlVHlwZS5ERUxJTUlURUQpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUJvb2wodFtlXSl9LGpzcGIuQmluYXJ5V3JpdGVyLnByb3RvdHlwZS53cml0ZVBhY2tlZEVudW09ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlRW51bSh0W29dKTt0aGlzLmVuZERlbGltaXRlZF8oZSl9fSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbihlLHQpe2lmKG51bGwhPXQmJnQubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGUsanNwYi5CaW5hcnlDb25zdGFudHMuV2lyZVR5cGUuREVMSU1JVEVEKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KnQubGVuZ3RoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KHRbZV0pfSxqc3BiLkJpbmFyeVdyaXRlci5wcm90b3R5cGUud3JpdGVQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10JiZ0Lmxlbmd0aCl7ZT10aGlzLmJlZ2luRGVsaW1pdGVkXyhlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLmVuY29kZXJfLndyaXRlVmFyaW50SGFzaDY0KHRbb10pO3RoaXMuZW5kRGVsaW1pdGVkXyhlKX19LGpzcGIuTWFwPWZ1bmN0aW9uKGUsdCl7dGhpcy5hcnJfPWUsdGhpcy52YWx1ZUN0b3JfPXQsdGhpcy5tYXBfPXt9LHRoaXMuYXJyQ2xlYW49ITAsMDx0aGlzLmFycl8ubGVuZ3RoJiZ0aGlzLmxvYWRGcm9tQXJyYXlfKCl9LGpzcGIuTWFwLnByb3RvdHlwZS5sb2FkRnJvbUFycmF5Xz1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5hcnJfLmxlbmd0aDtlKyspe3ZhciB0PXRoaXMuYXJyX1tlXSxvPXRbMF07dGhpcy5tYXBfW28udG9TdHJpbmcoKV09bmV3IGpzcGIuTWFwLkVudHJ5XyhvLHRbMV0pfXRoaXMuYXJyQ2xlYW49ITB9LGpzcGIuTWFwLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJDbGVhbil7aWYodGhpcy52YWx1ZUN0b3JfKXt2YXIgZSx0PXRoaXMubWFwXztmb3IoZSBpbiB0KWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpKXt2YXIgbz10W2VdLnZhbHVlV3JhcHBlcjtvJiZvLnRvQXJyYXkoKX19fWVsc2V7Zm9yKHRoaXMuYXJyXy5sZW5ndGg9MCwodD10aGlzLnN0cmluZ0tleXNfKCkpLnNvcnQoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRoaXMubWFwX1t0W2VdXTsobz1yLnZhbHVlV3JhcHBlcikmJm8udG9BcnJheSgpLHRoaXMuYXJyXy5wdXNoKFtyLmtleSxyLnZhbHVlXSl9dGhpcy5hcnJDbGVhbj0hMH1yZXR1cm4gdGhpcy5hcnJffSxqc3BiLk1hcC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89dGhpcy50b0FycmF5KCkscj1bXSxuPTA7bjxvLmxlbmd0aDtuKyspe3ZhciBzPXRoaXMubWFwX1tvW25dWzBdLnRvU3RyaW5nKCldO3RoaXMud3JhcEVudHJ5XyhzKTt2YXIgaT1zLnZhbHVlV3JhcHBlcjtpPyhnb29nLmFzc2VydHMuYXNzZXJ0KHQpLHIucHVzaChbcy5rZXksdChlLGkpXSkpOnIucHVzaChbcy5rZXkscy52YWx1ZV0pfXJldHVybiByfSxqc3BiLk1hcC5mcm9tT2JqZWN0PWZ1bmN0aW9uKGUsdCxvKXt0PW5ldyBqc3BiLk1hcChbXSx0KTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxzPW8oZVtyXVsxXSk7dC5zZXQobixzKX1yZXR1cm4gdH0sanNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXz1mdW5jdGlvbihlKXt0aGlzLmlkeF89MCx0aGlzLmFycl89ZX0sanNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkeF88dGhpcy5hcnJfLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0aGlzLmFycl9bdGhpcy5pZHhfKytdfTp7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fSxcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiYoanNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksanNwYi5NYXAucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0tleXNfKCkubGVuZ3RofSxqc3BiLk1hcC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcF89e30sdGhpcy5hcnJDbGVhbj0hMX0sanNwYi5NYXAucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtlPWUudG9TdHJpbmcoKTt2YXIgdD10aGlzLm1hcF8uaGFzT3duUHJvcGVydHkoZSk7cmV0dXJuIGRlbGV0ZSB0aGlzLm1hcF9bZV0sdGhpcy5hcnJDbGVhbj0hMSx0fSxqc3BiLk1hcC5wcm90b3R5cGUuZ2V0RW50cnlMaXN0PWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnN0cmluZ0tleXNfKCk7dC5zb3J0KCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRoaXMubWFwX1t0W29dXTtlLnB1c2goW3Iua2V5LHIudmFsdWVdKX1yZXR1cm4gZX0sanNwYi5NYXAucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc3RyaW5nS2V5c18oKTt0LnNvcnQoKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9dGhpcy5tYXBfW3Rbb11dO2UucHVzaChbci5rZXksdGhpcy53cmFwRW50cnlfKHIpXSl9cmV0dXJuIG5ldyBqc3BiLk1hcC5BcnJheUl0ZXJhdG9ySXRlcmFibGVfKGUpfSxqc3BiLk1hcC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zdHJpbmdLZXlzXygpO3Quc29ydCgpO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWUucHVzaCh0aGlzLm1hcF9bdFtvXV0ua2V5KTtyZXR1cm4gbmV3IGpzcGIuTWFwLkFycmF5SXRlcmF0b3JJdGVyYWJsZV8oZSl9LGpzcGIuTWFwLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuc3RyaW5nS2V5c18oKTt0LnNvcnQoKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyllLnB1c2godGhpcy53cmFwRW50cnlfKHRoaXMubWFwX1t0W29dXSkpO3JldHVybiBuZXcganNwYi5NYXAuQXJyYXlJdGVyYXRvckl0ZXJhYmxlXyhlKX0sanNwYi5NYXAucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzLnN0cmluZ0tleXNfKCk7by5zb3J0KCk7Zm9yKHZhciByPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMubWFwX1tvW3JdXTtlLmNhbGwodCx0aGlzLndyYXBFbnRyeV8obiksbi5rZXksdGhpcyl9fSxqc3BiLk1hcC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG89bmV3IGpzcGIuTWFwLkVudHJ5XyhlKTtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhvLnZhbHVlV3JhcHBlcj10LG8udmFsdWU9dC50b0FycmF5KCkpOm8udmFsdWU9dCx0aGlzLm1hcF9bZS50b1N0cmluZygpXT1vLHRoaXMuYXJyQ2xlYW49ITEsdGhpc30sanNwYi5NYXAucHJvdG90eXBlLndyYXBFbnRyeV89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmFsdWVDdG9yXz8oZS52YWx1ZVdyYXBwZXJ8fChlLnZhbHVlV3JhcHBlcj1uZXcgdGhpcy52YWx1ZUN0b3JfKGUudmFsdWUpKSxlLnZhbHVlV3JhcHBlcik6ZS52YWx1ZX0sanNwYi5NYXAucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtpZihlPXRoaXMubWFwX1tlLnRvU3RyaW5nKCldKXJldHVybiB0aGlzLndyYXBFbnRyeV8oZSl9LGpzcGIuTWFwLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKWluIHRoaXMubWFwX30sanNwYi5NYXAucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBzPXRoaXMuc3RyaW5nS2V5c18oKTtzLnNvcnQoKTtmb3IodmFyIGk9MDtpPHMubGVuZ3RoO2krKyl7dmFyIGE9dGhpcy5tYXBfW3NbaV1dO3QuYmVnaW5TdWJNZXNzYWdlKGUpLG8uY2FsbCh0LDEsYS5rZXkpLHRoaXMudmFsdWVDdG9yXz9yLmNhbGwodCwyLHRoaXMud3JhcEVudHJ5XyhhKSxuKTpyLmNhbGwodCwyLGEudmFsdWUpLHQuZW5kU3ViTWVzc2FnZSgpfX0sanNwYi5NYXAuZGVzZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oZSx0LG8scixuLHMsaSl7Zm9yKDt0Lm5leHRGaWVsZCgpJiYhdC5pc0VuZEdyb3VwKCk7KXt2YXIgYT10LmdldEZpZWxkTnVtYmVyKCk7MT09YT9zPW8uY2FsbCh0KToyPT1hJiYoZS52YWx1ZUN0b3JfPyhnb29nLmFzc2VydHMuYXNzZXJ0KG4pLGl8fChpPW5ldyBlLnZhbHVlQ3Rvcl8pLHIuY2FsbCh0LGksbikpOmk9ci5jYWxsKHQpKX1nb29nLmFzc2VydHMuYXNzZXJ0KG51bGwhPXMpLGdvb2cuYXNzZXJ0cy5hc3NlcnQobnVsbCE9aSksZS5zZXQocyxpKX0sanNwYi5NYXAucHJvdG90eXBlLnN0cmluZ0tleXNfPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLm1hcF8sbz1bXTtmb3IoZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiZvLnB1c2goZSk7cmV0dXJuIG99LGpzcGIuTWFwLkVudHJ5Xz1mdW5jdGlvbihlLHQpe3RoaXMua2V5PWUsdGhpcy52YWx1ZT10LHRoaXMudmFsdWVXcmFwcGVyPXZvaWQgMH0sanNwYi5FeHRlbnNpb25GaWVsZEluZm89ZnVuY3Rpb24oZSx0LG8scixuKXt0aGlzLmZpZWxkSW5kZXg9ZSx0aGlzLmZpZWxkTmFtZT10LHRoaXMuY3Rvcj1vLHRoaXMudG9PYmplY3RGbj1yLHRoaXMuaXNSZXBlYXRlZD1ufSxqc3BiLkV4dGVuc2lvbkZpZWxkQmluYXJ5SW5mbz1mdW5jdGlvbihlLHQsbyxyLG4scyl7dGhpcy5maWVsZEluZm89ZSx0aGlzLmJpbmFyeVJlYWRlckZuPXQsdGhpcy5iaW5hcnlXcml0ZXJGbj1vLHRoaXMuYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuPXIsdGhpcy5iaW5hcnlNZXNzYWdlRGVzZXJpYWxpemVGbj1uLHRoaXMuaXNQYWNrZWQ9c30sanNwYi5FeHRlbnNpb25GaWVsZEluZm8ucHJvdG90eXBlLmlzTWVzc2FnZVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY3Rvcn0sanNwYi5NZXNzYWdlPWZ1bmN0aW9uKCl7fSxqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fT0JKRUNUPSEwLGpzcGIuTWVzc2FnZS5HRU5FUkFURV9GUk9NX09CSkVDVD0hZ29vZy5ESVNBTExPV19URVNUX09OTFlfQ09ERSxqc3BiLk1lc3NhZ2UuR0VORVJBVEVfVE9fU1RSSU5HPSEwLGpzcGIuTWVzc2FnZS5BU1NVTUVfTE9DQUxfQVJSQVlTPSExLGpzcGIuTWVzc2FnZS5TRVJJQUxJWkVfRU1QVFlfVFJBSUxJTkdfRklFTERTPSEwLGpzcGIuTWVzc2FnZS5TVVBQT1JUU19VSU5UOEFSUkFZXz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuZ2V0SnNQYk1lc3NhZ2VJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VJZF99LGpzcGIuTWVzc2FnZS5nZXRJbmRleF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCtlLmFycmF5SW5kZXhPZmZzZXRffSxqc3BiLk1lc3NhZ2UuaGlkZGVuRVM2UHJvcGVydHlfPWZ1bmN0aW9uKCl7fSxqc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQtZS5hcnJheUluZGV4T2Zmc2V0X30sanNwYi5NZXNzYWdlLmluaXRpYWxpemU9ZnVuY3Rpb24oZSx0LG8scixuLHMpe2lmKGUud3JhcHBlcnNfPW51bGwsdHx8KHQ9bz9bb106W10pLGUubWVzc2FnZUlkXz1vP1N0cmluZyhvKTp2b2lkIDAsZS5hcnJheUluZGV4T2Zmc2V0Xz0wPT09bz8tMTowLGUuYXJyYXk9dCxqc3BiLk1lc3NhZ2UuaW5pdFBpdm90QW5kRXh0ZW5zaW9uT2JqZWN0XyhlLHIpLGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fSxqc3BiLk1lc3NhZ2UuU0VSSUFMSVpFX0VNUFRZX1RSQUlMSU5HX0ZJRUxEU3x8KGUucmVwZWF0ZWRGaWVsZHM9biksbilmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKShvPW5bdF0pPGUucGl2b3RfPyhvPWpzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSxvKSxlLmFycmF5W29dPWUuYXJyYXlbb118fGpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXyk6KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oZSksZS5leHRlbnNpb25PYmplY3RfW29dPWUuZXh0ZW5zaW9uT2JqZWN0X1tvXXx8anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfKTtpZihzJiZzLmxlbmd0aClmb3IodD0wO3Q8cy5sZW5ndGg7dCsrKWpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKGUsc1t0XSl9LGpzcGIuTWVzc2FnZS5FTVBUWV9MSVNUX1NFTlRJTkVMXz1nb29nLkRFQlVHJiZPYmplY3QuZnJlZXplP09iamVjdC5mcmVlemUoW10pOltdLGpzcGIuTWVzc2FnZS5pc0FycmF5Xz1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLkFTU1VNRV9MT0NBTF9BUlJBWVM/ZSBpbnN0YW5jZW9mIEFycmF5OkFycmF5LmlzQXJyYXkoZSl9LGpzcGIuTWVzc2FnZS5pc0V4dGVuc2lvbk9iamVjdF89ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGV8fGpzcGIuTWVzc2FnZS5pc0FycmF5XyhlKXx8anNwYi5NZXNzYWdlLlNVUFBPUlRTX1VJTlQ4QVJSQVlfJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSl9LGpzcGIuTWVzc2FnZS5pbml0UGl2b3RBbmRFeHRlbnNpb25PYmplY3RfPWZ1bmN0aW9uKGUsdCl7dmFyIG89ZS5hcnJheS5sZW5ndGgscj0tMTtpZihvJiYocj1vLTEsbz1lLmFycmF5W3JdLGpzcGIuTWVzc2FnZS5pc0V4dGVuc2lvbk9iamVjdF8obykpKXJldHVybiBlLnBpdm90Xz1qc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfKGUsciksdm9pZChlLmV4dGVuc2lvbk9iamVjdF89byk7LTE8dD8oZS5waXZvdF89TWF0aC5tYXgodCxqc3BiLk1lc3NhZ2UuZ2V0RmllbGROdW1iZXJfKGUscisxKSksZS5leHRlbnNpb25PYmplY3RfPW51bGwpOmUucGl2b3RfPU51bWJlci5NQVhfVkFMVUV9LGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF89ZnVuY3Rpb24oZSl7dmFyIHQ9anNwYi5NZXNzYWdlLmdldEluZGV4XyhlLGUucGl2b3RfKTtlLmFycmF5W3RdfHwoZS5leHRlbnNpb25PYmplY3RfPWUuYXJyYXlbdF09e30pfSxqc3BiLk1lc3NhZ2UudG9PYmplY3RMaXN0PWZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXJbbl09dC5jYWxsKGVbbl0sbyxlW25dKTtyZXR1cm4gcn0sanNwYi5NZXNzYWdlLnRvT2JqZWN0RXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCxvLHIsbil7Zm9yKHZhciBzIGluIG8pe3ZhciBpPW9bc10sYT1yLmNhbGwoZSxpKTtpZihudWxsIT1hKXtmb3IodmFyIGcgaW4gaS5maWVsZE5hbWUpaWYoaS5maWVsZE5hbWUuaGFzT3duUHJvcGVydHkoZykpYnJlYWs7dFtnXT1pLnRvT2JqZWN0Rm4/aS5pc1JlcGVhdGVkP2pzcGIuTWVzc2FnZS50b09iamVjdExpc3QoYSxpLnRvT2JqZWN0Rm4sbik6aS50b09iamVjdEZuKG4sYSk6YX19fSxqc3BiLk1lc3NhZ2Uuc2VyaWFsaXplQmluYXJ5RXh0ZW5zaW9ucz1mdW5jdGlvbihlLHQsbyxyKXtmb3IodmFyIG4gaW4gbyl7dmFyIHM9b1tuXSxpPXMuZmllbGRJbmZvO2lmKCFzLmJpbmFyeVdyaXRlckZuKXRocm93IEVycm9yKFwiTWVzc2FnZSBleHRlbnNpb24gcHJlc2VudCB0aGF0IHdhcyBnZW5lcmF0ZWQgd2l0aG91dCBiaW5hcnkgc2VyaWFsaXphdGlvbiBzdXBwb3J0XCIpO3ZhciBhPXIuY2FsbChlLGkpO2lmKG51bGwhPWEpaWYoaS5pc01lc3NhZ2VUeXBlKCkpe2lmKCFzLmJpbmFyeU1lc3NhZ2VTZXJpYWxpemVGbil0aHJvdyBFcnJvcihcIk1lc3NhZ2UgZXh0ZW5zaW9uIHByZXNlbnQgaG9sZGluZyBzdWJtZXNzYWdlIHdpdGhvdXQgYmluYXJ5IHN1cHBvcnQgZW5hYmxlZCwgYW5kIG1lc3NhZ2UgaXMgYmVpbmcgc2VyaWFsaXplZCB0byBiaW5hcnkgZm9ybWF0XCIpO3MuYmluYXJ5V3JpdGVyRm4uY2FsbCh0LGkuZmllbGRJbmRleCxhLHMuYmluYXJ5TWVzc2FnZVNlcmlhbGl6ZUZuKX1lbHNlIHMuYmluYXJ5V3JpdGVyRm4uY2FsbCh0LGkuZmllbGRJbmRleCxhKX19LGpzcGIuTWVzc2FnZS5yZWFkQmluYXJ5RXh0ZW5zaW9uPWZ1bmN0aW9uKGUsdCxvLHIsbil7dmFyIHM9b1t0LmdldEZpZWxkTnVtYmVyKCldO2lmKHMpe2lmKG89cy5maWVsZEluZm8sIXMuYmluYXJ5UmVhZGVyRm4pdGhyb3cgRXJyb3IoXCJEZXNlcmlhbGl6aW5nIGV4dGVuc2lvbiB3aG9zZSBnZW5lcmF0ZWQgY29kZSBkb2VzIG5vdCBzdXBwb3J0IGJpbmFyeSBmb3JtYXRcIik7aWYoby5pc01lc3NhZ2VUeXBlKCkpe3ZhciBpPW5ldyBvLmN0b3I7cy5iaW5hcnlSZWFkZXJGbi5jYWxsKHQsaSxzLmJpbmFyeU1lc3NhZ2VEZXNlcmlhbGl6ZUZuKX1lbHNlIGk9cy5iaW5hcnlSZWFkZXJGbi5jYWxsKHQpO28uaXNSZXBlYXRlZCYmIXMuaXNQYWNrZWQ/KHQ9ci5jYWxsKGUsbykpP3QucHVzaChpKTpuLmNhbGwoZSxvLFtpXSk6bi5jYWxsKGUsbyxpKX1lbHNlIHQuc2tpcEZpZWxkKCl9LGpzcGIuTWVzc2FnZS5nZXRGaWVsZD1mdW5jdGlvbihlLHQpe2lmKHQ8ZS5waXZvdF8pe3Q9anNwYi5NZXNzYWdlLmdldEluZGV4XyhlLHQpO3ZhciBvPWUuYXJyYXlbdF07cmV0dXJuIG89PT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8/ZS5hcnJheVt0XT1bXTpvfWlmKGUuZXh0ZW5zaW9uT2JqZWN0XylyZXR1cm4obz1lLmV4dGVuc2lvbk9iamVjdF9bdF0pPT09anNwYi5NZXNzYWdlLkVNUFRZX0xJU1RfU0VOVElORUxfP2UuZXh0ZW5zaW9uT2JqZWN0X1t0XT1bXTpvfSxqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZD1mdW5jdGlvbihlLHQpe3JldHVybiBqc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KX0sanNwYi5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpKT9lOitlfSxqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PShlPWpzcGIuTWVzc2FnZS5nZXRGaWVsZChlLHQpKT9lOiEhZX0sanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmxvYXRpbmdQb2ludEZpZWxkPWZ1bmN0aW9uKGUsdCl7dmFyIG89anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSx0KTtpZihlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc198fChlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e30pLCFlLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bdF0pe2Zvcih2YXIgcj0wO3I8by5sZW5ndGg7cisrKW9bcl09K29bcl07ZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW3RdPSEwfXJldHVybiBvfSxqc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRCb29sZWFuRmllbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLHQpO2lmKGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX3x8KGUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fSksIWUuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1t0XSl7Zm9yKHZhciByPTA7cjxvLmxlbmd0aDtyKyspb1tyXT0hIW9bcl07ZS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfW3RdPSEwfXJldHVybiBvfSxqc3BiLk1lc3NhZ2UuYnl0ZXNBc0I2ND1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2dvb2cuY3J5cHQuYmFzZTY0LmVuY29kZUJ5dGVBcnJheShlKTooZ29vZy5hc3NlcnRzLmZhaWwoXCJDYW5ub3QgY29lcmNlIHRvIGI2NCBzdHJpbmc6IFwiK2dvb2cudHlwZU9mKGUpKSxudWxsKX0sanNwYi5NZXNzYWdlLmJ5dGVzQXNVOD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZT9nb29nLmNyeXB0LmJhc2U2NC5kZWNvZGVTdHJpbmdUb1VpbnQ4QXJyYXkoZSk6KGdvb2cuYXNzZXJ0cy5mYWlsKFwiQ2Fubm90IGNvZXJjZSB0byBVaW50OEFycmF5OiBcIitnb29nLnR5cGVPZihlKSksbnVsbCl9LGpzcGIuTWVzc2FnZS5ieXRlc0xpc3RBc0I2ND1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLmFzc2VydENvbnNpc3RlbnRUeXBlc18oZSksZS5sZW5ndGgmJlwic3RyaW5nXCIhPXR5cGVvZiBlWzBdP2dvb2cuYXJyYXkubWFwKGUsanNwYi5NZXNzYWdlLmJ5dGVzQXNCNjQpOmV9LGpzcGIuTWVzc2FnZS5ieXRlc0xpc3RBc1U4PWZ1bmN0aW9uKGUpe3JldHVybiBqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXyhlKSwhZS5sZW5ndGh8fGVbMF1pbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpnb29nLmFycmF5Lm1hcChlLGpzcGIuTWVzc2FnZS5ieXRlc0FzVTgpfSxqc3BiLk1lc3NhZ2UuYXNzZXJ0Q29uc2lzdGVudFR5cGVzXz1mdW5jdGlvbihlKXtpZihnb29nLkRFQlVHJiZlJiYxPGUubGVuZ3RoKXt2YXIgdD1nb29nLnR5cGVPZihlWzBdKTtnb29nLmFycmF5LmZvckVhY2goZSwoZnVuY3Rpb24oZSl7Z29vZy50eXBlT2YoZSkhPXQmJmdvb2cuYXNzZXJ0cy5mYWlsKFwiSW5jb25zaXN0ZW50IHR5cGUgaW4gSlNQQiByZXBlYXRlZCBmaWVsZCBhcnJheS4gR290IFwiK2dvb2cudHlwZU9mKGUpK1wiIGV4cGVjdGVkIFwiK3QpfSkpfX0sanNwYi5NZXNzYWdlLmdldEZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KSk/bzplfSxqc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkV2l0aERlZmF1bHQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBudWxsPT0oZT1qc3BiLk1lc3NhZ2UuZ2V0Qm9vbGVhbkZpZWxkKGUsdCkpP286ZX0sanNwYi5NZXNzYWdlLmdldEZsb2F0aW5nUG9pbnRGaWVsZFdpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gbnVsbD09KGU9anNwYi5NZXNzYWdlLmdldE9wdGlvbmFsRmxvYXRpbmdQb2ludEZpZWxkKGUsdCkpP286ZX0sanNwYi5NZXNzYWdlLmdldEZpZWxkUHJvdG8zPWpzcGIuTWVzc2FnZS5nZXRGaWVsZFdpdGhEZWZhdWx0LGpzcGIuTWVzc2FnZS5nZXRNYXBGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtpZihlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KSx0IGluIGUud3JhcHBlcnNfKXJldHVybiBlLndyYXBwZXJzX1t0XTt2YXIgbj1qc3BiLk1lc3NhZ2UuZ2V0RmllbGQoZSx0KTtpZighbil7aWYobylyZXR1cm47bj1bXSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSx0LG4pfXJldHVybiBlLndyYXBwZXJzX1t0XT1uZXcganNwYi5NYXAobixyKX0sanNwYi5NZXNzYWdlLnNldEZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLHQ8ZS5waXZvdF8/ZS5hcnJheVtqc3BiLk1lc3NhZ2UuZ2V0SW5kZXhfKGUsdCldPW86KGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8oZSksZS5leHRlbnNpb25PYmplY3RfW3RdPW8pLGV9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNJbnRGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sMCl9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNGbG9hdEZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0XyhlLHQsbywwKX0sanNwYi5NZXNzYWdlLnNldFByb3RvM0Jvb2xlYW5GaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sITEpfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLFwiXCIpfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zQnl0ZXNGaWVsZD1mdW5jdGlvbihlLHQsbyl7cmV0dXJuIGpzcGIuTWVzc2FnZS5zZXRGaWVsZElnbm9yaW5nRGVmYXVsdF8oZSx0LG8sXCJcIil9LGpzcGIuTWVzc2FnZS5zZXRQcm90bzNFbnVtRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLDApfSxqc3BiLk1lc3NhZ2Uuc2V0UHJvdG8zU3RyaW5nSW50RmllbGQ9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBqc3BiLk1lc3NhZ2Uuc2V0RmllbGRJZ25vcmluZ0RlZmF1bHRfKGUsdCxvLFwiMFwiKX0sanNwYi5NZXNzYWdlLnNldEZpZWxkSWdub3JpbmdEZWZhdWx0Xz1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLG8hPT1yP2pzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQsbyk6dDxlLnBpdm90Xz9lLmFycmF5W2pzcGIuTWVzc2FnZS5nZXRJbmRleF8oZSx0KV09bnVsbDooanNwYi5NZXNzYWdlLm1heWJlSW5pdEVtcHR5RXh0ZW5zaW9uT2JqZWN0XyhlKSxkZWxldGUgZS5leHRlbnNpb25PYmplY3RfW3RdKSxlfSxqc3BiLk1lc3NhZ2UuYWRkVG9SZXBlYXRlZEZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiBnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksdD1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLHQpLG51bGwhPXI/dC5zcGxpY2UociwwLG8pOnQucHVzaChvKSxlfSxqc3BiLk1lc3NhZ2Uuc2V0T25lb2ZGaWVsZD1mdW5jdGlvbihlLHQsbyxyKXtyZXR1cm4gZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLChvPWpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlKGUsbykpJiZvIT09dCYmdm9pZCAwIT09ciYmKGUud3JhcHBlcnNfJiZvIGluIGUud3JhcHBlcnNfJiYoZS53cmFwcGVyc19bb109dm9pZCAwKSxqc3BiLk1lc3NhZ2Uuc2V0RmllbGQoZSxvLHZvaWQgMCkpLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQscil9LGpzcGIuTWVzc2FnZS5jb21wdXRlT25lb2ZDYXNlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvLHIsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcz10W25dLGk9anNwYi5NZXNzYWdlLmdldEZpZWxkKGUscyk7bnVsbCE9aSYmKG89cyxyPWksanNwYi5NZXNzYWdlLnNldEZpZWxkKGUscyx2b2lkIDApKX1yZXR1cm4gbz8oanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsbyxyKSxvKTowfSxqc3BiLk1lc3NhZ2UuZ2V0V3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pLCFlLndyYXBwZXJzX1tvXSl7dmFyIG49anNwYi5NZXNzYWdlLmdldEZpZWxkKGUsbyk7KHJ8fG4pJiYoZS53cmFwcGVyc19bb109bmV3IHQobikpfXJldHVybiBlLndyYXBwZXJzX1tvXX0sanNwYi5NZXNzYWdlLmdldFJlcGVhdGVkV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4ganNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXyhlLHQsbyksKHQ9ZS53cmFwcGVyc19bb10pPT1qc3BiLk1lc3NhZ2UuRU1QVFlfTElTVF9TRU5USU5FTF8mJih0PWUud3JhcHBlcnNfW29dPVtdKSx0fSxqc3BiLk1lc3NhZ2Uud3JhcFJlcGVhdGVkRmllbGRfPWZ1bmN0aW9uKGUsdCxvKXtpZihlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KSwhZS53cmFwcGVyc19bb10pe2Zvcih2YXIgcj1qc3BiLk1lc3NhZ2UuZ2V0UmVwZWF0ZWRGaWVsZChlLG8pLG49W10scz0wO3M8ci5sZW5ndGg7cysrKW5bc109bmV3IHQocltzXSk7ZS53cmFwcGVyc19bb109bn19LGpzcGIuTWVzc2FnZS5zZXRXcmFwcGVyRmllbGQ9ZnVuY3Rpb24oZSx0LG8pe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KTt2YXIgcj1vP28udG9BcnJheSgpOm87cmV0dXJuIGUud3JhcHBlcnNfW3RdPW8sanNwYi5NZXNzYWdlLnNldEZpZWxkKGUsdCxyKX0sanNwYi5NZXNzYWdlLnNldE9uZW9mV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIpe2dvb2cuYXNzZXJ0cy5hc3NlcnRJbnN0YW5jZW9mKGUsanNwYi5NZXNzYWdlKSxlLndyYXBwZXJzX3x8KGUud3JhcHBlcnNfPXt9KTt2YXIgbj1yP3IudG9BcnJheSgpOnI7cmV0dXJuIGUud3JhcHBlcnNfW3RdPXIsanNwYi5NZXNzYWdlLnNldE9uZW9mRmllbGQoZSx0LG8sbil9LGpzcGIuTWVzc2FnZS5zZXRSZXBlYXRlZFdyYXBwZXJGaWVsZD1mdW5jdGlvbihlLHQsbyl7Z29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YoZSxqc3BiLk1lc3NhZ2UpLGUud3JhcHBlcnNffHwoZS53cmFwcGVyc189e30pLG89b3x8W107Zm9yKHZhciByPVtdLG49MDtuPG8ubGVuZ3RoO24rKylyW25dPW9bbl0udG9BcnJheSgpO3JldHVybiBlLndyYXBwZXJzX1t0XT1vLGpzcGIuTWVzc2FnZS5zZXRGaWVsZChlLHQscil9LGpzcGIuTWVzc2FnZS5hZGRUb1JlcGVhdGVkV3JhcHBlckZpZWxkPWZ1bmN0aW9uKGUsdCxvLHIsbil7anNwYi5NZXNzYWdlLndyYXBSZXBlYXRlZEZpZWxkXyhlLHIsdCk7dmFyIHM9ZS53cmFwcGVyc19bdF07cmV0dXJuIHN8fChzPWUud3JhcHBlcnNfW3RdPVtdKSxvPW98fG5ldyByLGU9anNwYi5NZXNzYWdlLmdldFJlcGVhdGVkRmllbGQoZSx0KSxudWxsIT1uPyhzLnNwbGljZShuLDAsbyksZS5zcGxpY2UobiwwLG8udG9BcnJheSgpKSk6KHMucHVzaChvKSxlLnB1c2goby50b0FycmF5KCkpKSxvfSxqc3BiLk1lc3NhZ2UudG9NYXA9ZnVuY3Rpb24oZSx0LG8scil7Zm9yKHZhciBuPXt9LHM9MDtzPGUubGVuZ3RoO3MrKyluW3QuY2FsbChlW3NdKV09bz9vLmNhbGwoZVtzXSxyLGVbc10pOmVbc107cmV0dXJuIG59LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuc3luY01hcEZpZWxkc189ZnVuY3Rpb24oKXtpZih0aGlzLndyYXBwZXJzXylmb3IodmFyIGUgaW4gdGhpcy53cmFwcGVyc18pe3ZhciB0PXRoaXMud3JhcHBlcnNfW2VdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdFtvXSYmdFtvXS50b0FycmF5KCk7ZWxzZSB0JiZ0LnRvQXJyYXkoKX19LGpzcGIuTWVzc2FnZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN5bmNNYXBGaWVsZHNfKCksdGhpcy5hcnJheX0sanNwYi5NZXNzYWdlLkdFTkVSQVRFX1RPX1NUUklORyYmKGpzcGIuTWVzc2FnZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeW5jTWFwRmllbGRzXygpLHRoaXMuYXJyYXkudG9TdHJpbmcoKX0pLGpzcGIuTWVzc2FnZS5wcm90b3R5cGUuZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZXh0ZW5zaW9uT2JqZWN0Xyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7dmFyIHQ9ZS5maWVsZEluZGV4O2lmKGUuaXNSZXBlYXRlZCl7aWYoZS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIHRoaXMud3JhcHBlcnNfW3RdfHwodGhpcy53cmFwcGVyc19bdF09Z29vZy5hcnJheS5tYXAodGhpcy5leHRlbnNpb25PYmplY3RfW3RdfHxbXSwoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlLmN0b3IodCl9KSkpLHRoaXMud3JhcHBlcnNfW3RdfWVsc2UgaWYoZS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIXRoaXMud3JhcHBlcnNfW3RdJiZ0aGlzLmV4dGVuc2lvbk9iamVjdF9bdF0mJih0aGlzLndyYXBwZXJzX1t0XT1uZXcgZS5jdG9yKHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1t0XSkpLHRoaXMud3JhcHBlcnNfW3RdO3JldHVybiB0aGlzLmV4dGVuc2lvbk9iamVjdF9bdF19fSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLnNldEV4dGVuc2lvbj1mdW5jdGlvbihlLHQpe3RoaXMud3JhcHBlcnNffHwodGhpcy53cmFwcGVyc189e30pLGpzcGIuTWVzc2FnZS5tYXliZUluaXRFbXB0eUV4dGVuc2lvbk9iamVjdF8odGhpcyk7dmFyIG89ZS5maWVsZEluZGV4O3JldHVybiBlLmlzUmVwZWF0ZWQ/KHQ9dHx8W10sZS5pc01lc3NhZ2VUeXBlKCk/KHRoaXMud3JhcHBlcnNfW29dPXQsdGhpcy5leHRlbnNpb25PYmplY3RfW29dPWdvb2cuYXJyYXkubWFwKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvQXJyYXkoKX0pKSk6dGhpcy5leHRlbnNpb25PYmplY3RfW29dPXQpOmUuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tvXT10LHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tvXT10P3QudG9BcnJheSgpOnQpOnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tvXT10LHRoaXN9LGpzcGIuTWVzc2FnZS5kaWZmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdC5jb25zdHJ1Y3RvcikpdGhyb3cgRXJyb3IoXCJNZXNzYWdlcyBoYXZlIGRpZmZlcmVudCB0eXBlcy5cIik7dmFyIG89ZS50b0FycmF5KCk7dD10LnRvQXJyYXkoKTt2YXIgcj1bXSxuPTAscz1vLmxlbmd0aD50Lmxlbmd0aD9vLmxlbmd0aDp0Lmxlbmd0aDtmb3IoZS5nZXRKc1BiTWVzc2FnZUlkKCkmJihyWzBdPWUuZ2V0SnNQYk1lc3NhZ2VJZCgpLG49MSk7bjxzO24rKylqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhvW25dLHRbbl0pfHwocltuXT10W25dKTtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3Iocil9LGpzcGIuTWVzc2FnZS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09dHx8ISghZXx8IXQpJiZlIGluc3RhbmNlb2YgdC5jb25zdHJ1Y3RvciYmanNwYi5NZXNzYWdlLmNvbXBhcmVGaWVsZHMoZS50b0FycmF5KCksdC50b0FycmF5KCkpfSxqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnM9ZnVuY3Rpb24oZSx0KXtlPWV8fHt9LHQ9dHx8e307dmFyIG8scj17fTtmb3IobyBpbiBlKXJbb109MDtmb3IobyBpbiB0KXJbb109MDtmb3IobyBpbiByKWlmKCFqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcyhlW29dLHRbb10pKXJldHVybiExO3JldHVybiEwfSxqc3BiLk1lc3NhZ2UuY29tcGFyZUZpZWxkcz1mdW5jdGlvbihlLHQpe2lmKGU9PXQpcmV0dXJuITA7aWYoIWdvb2cuaXNPYmplY3QoZSl8fCFnb29nLmlzT2JqZWN0KHQpKXJldHVybiEhKFwibnVtYmVyXCI9PXR5cGVvZiBlJiZpc05hTihlKXx8XCJudW1iZXJcIj09dHlwZW9mIHQmJmlzTmFOKHQpKSYmU3RyaW5nKGUpPT1TdHJpbmcodCk7aWYoZS5jb25zdHJ1Y3RvciE9dC5jb25zdHJ1Y3RvcilyZXR1cm4hMTtpZihqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUuY29uc3RydWN0b3I9PT1VaW50OEFycmF5KXtpZihlLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYoZVtvXSE9dFtvXSlyZXR1cm4hMTtyZXR1cm4hMH1pZihlLmNvbnN0cnVjdG9yPT09QXJyYXkpe3ZhciByPXZvaWQgMCxuPXZvaWQgMCxzPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKTtmb3Iobz0wO288cztvKyspe3ZhciBpPWVbb10sYT10W29dO2lmKGkmJmkuY29uc3RydWN0b3I9PU9iamVjdCYmKGdvb2cuYXNzZXJ0cy5hc3NlcnQodm9pZCAwPT09ciksZ29vZy5hc3NlcnRzLmFzc2VydChvPT09ZS5sZW5ndGgtMSkscj1pLGk9dm9pZCAwKSxhJiZhLmNvbnN0cnVjdG9yPT1PYmplY3QmJihnb29nLmFzc2VydHMuYXNzZXJ0KHZvaWQgMD09PW4pLGdvb2cuYXNzZXJ0cy5hc3NlcnQobz09PXQubGVuZ3RoLTEpLG49YSxhPXZvaWQgMCksIWpzcGIuTWVzc2FnZS5jb21wYXJlRmllbGRzKGksYSkpcmV0dXJuITF9cmV0dXJuIXImJiFufHwocj1yfHx7fSxuPW58fHt9LGpzcGIuTWVzc2FnZS5jb21wYXJlRXh0ZW5zaW9ucyhyLG4pKX1pZihlLmNvbnN0cnVjdG9yPT09T2JqZWN0KXJldHVybiBqc3BiLk1lc3NhZ2UuY29tcGFyZUV4dGVuc2lvbnMoZSx0KTt0aHJvdyBFcnJvcihcIkludmFsaWQgdHlwZSBpbiBKU1BCIGFycmF5XCIpfSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmNsb25lTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBqc3BiLk1lc3NhZ2UuY2xvbmVNZXNzYWdlKHRoaXMpfSxqc3BiLk1lc3NhZ2UucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGpzcGIuTWVzc2FnZS5jbG9uZU1lc3NhZ2UodGhpcyl9LGpzcGIuTWVzc2FnZS5jbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4ganNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZShlKX0sanNwYi5NZXNzYWdlLmNsb25lTWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IoanNwYi5NZXNzYWdlLmNsb25lXyhlLnRvQXJyYXkoKSkpfSxqc3BiLk1lc3NhZ2UuY29weUludG89ZnVuY3Rpb24oZSx0KXtnb29nLmFzc2VydHMuYXNzZXJ0SW5zdGFuY2VvZihlLGpzcGIuTWVzc2FnZSksZ29vZy5hc3NlcnRzLmFzc2VydEluc3RhbmNlb2YodCxqc3BiLk1lc3NhZ2UpLGdvb2cuYXNzZXJ0cy5hc3NlcnQoZS5jb25zdHJ1Y3Rvcj09dC5jb25zdHJ1Y3RvcixcIkNvcHkgc291cmNlIGFuZCB0YXJnZXQgbWVzc2FnZSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0eXBlLlwiKSxlPWpzcGIuTWVzc2FnZS5jbG9uZShlKTtmb3IodmFyIG89dC50b0FycmF5KCkscj1lLnRvQXJyYXkoKSxuPW8ubGVuZ3RoPTA7bjxyLmxlbmd0aDtuKyspb1tuXT1yW25dO3Qud3JhcHBlcnNfPWUud3JhcHBlcnNfLHQuZXh0ZW5zaW9uT2JqZWN0Xz1lLmV4dGVuc2lvbk9iamVjdF99LGpzcGIuTWVzc2FnZS5jbG9uZV89ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PUFycmF5KGUubGVuZ3RoKSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWVbb107bnVsbCE9ciYmKHRbb109XCJvYmplY3RcIj09dHlwZW9mIHI/anNwYi5NZXNzYWdlLmNsb25lXyhnb29nLmFzc2VydHMuYXNzZXJ0KHIpKTpyKX1yZXR1cm4gdH1pZihqc3BiLk1lc3NhZ2UuU1VQUE9SVFNfVUlOVDhBUlJBWV8mJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShlKTtmb3IobyBpbiB0PXt9LGUpbnVsbCE9KHI9ZVtvXSkmJih0W29dPVwib2JqZWN0XCI9PXR5cGVvZiByP2pzcGIuTWVzc2FnZS5jbG9uZV8oZ29vZy5hc3NlcnRzLmFzc2VydChyKSk6cik7cmV0dXJuIHR9LGpzcGIuTWVzc2FnZS5yZWdpc3Rlck1lc3NhZ2VUeXBlPWZ1bmN0aW9uKGUsdCl7dC5tZXNzYWdlSWQ9ZX0sanNwYi5NZXNzYWdlLm1lc3NhZ2VTZXRFeHRlbnNpb25zPXt9LGpzcGIuTWVzc2FnZS5tZXNzYWdlU2V0RXh0ZW5zaW9uc0JpbmFyeT17fSxqc3BiLkV4cG9ydD17fSxleHBvcnRzLk1hcD1qc3BiLk1hcCxleHBvcnRzLk1lc3NhZ2U9anNwYi5NZXNzYWdlLGV4cG9ydHMuQmluYXJ5UmVhZGVyPWpzcGIuQmluYXJ5UmVhZGVyLGV4cG9ydHMuQmluYXJ5V3JpdGVyPWpzcGIuQmluYXJ5V3JpdGVyLGV4cG9ydHMuRXh0ZW5zaW9uRmllbGRJbmZvPWpzcGIuRXh0ZW5zaW9uRmllbGRJbmZvLGV4cG9ydHMuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvPWpzcGIuRXh0ZW5zaW9uRmllbGRCaW5hcnlJbmZvLGV4cG9ydHMuZXhwb3J0U3ltYm9sPWdvb2cuZXhwb3J0U3ltYm9sLGV4cG9ydHMuaW5oZXJpdHM9Z29vZy5pbmhlcml0cyxleHBvcnRzLm9iamVjdD17ZXh0ZW5kOmdvb2cub2JqZWN0LmV4dGVuZH0sZXhwb3J0cy50eXBlT2Y9Z29vZy50eXBlT2Z9LDQwOmZ1bmN0aW9uKGUsdCxvKXt2YXIgcjtmdW5jdGlvbiBuKGUpe3ZhciB0PTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ8ZS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6ZVt0KytdfTp7ZG9uZTohMH19fXZhciBzPVwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbyl7ZSE9QXJyYXkucHJvdG90eXBlJiZlIT1PYmplY3QucHJvdG90eXBlJiYoZVt0XT1vLnZhbHVlKX0saT1mdW5jdGlvbihlKXtlPVtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3csXCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYsXCJvYmplY3RcIj09dHlwZW9mIG8uZyYmby5nLGVdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXt2YXIgcj1lW3RdO2lmKHImJnIuTWF0aD09TWF0aClyZXR1cm4gcn10aHJvdyBFcnJvcihcIkNhbm5vdCBmaW5kIGdsb2JhbCBvYmplY3RcIil9KHRoaXMpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7fSxpLlN5bWJvbHx8KGkuU3ltYm9sPWwpfWZ1bmN0aW9uIGcoZSx0KXt0aGlzLmE9ZSxzKHRoaXMsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfWcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX07dmFyIHAsbD0ocD0wLGZ1bmN0aW9uIGUodCl7aWYodGhpcyBpbnN0YW5jZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbmV3IGcoXCJqc2NvbXBfc3ltYm9sX1wiKyh0fHxcIlwiKStcIl9cIitwKyssdCl9KTtmdW5jdGlvbiB1KCl7YSgpO3ZhciBlPWkuU3ltYm9sLml0ZXJhdG9yO2V8fChlPWkuU3ltYm9sLml0ZXJhdG9yPWkuU3ltYm9sKFwiU3ltYm9sLml0ZXJhdG9yXCIpKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBBcnJheS5wcm90b3R5cGVbZV0mJnMoQXJyYXkucHJvdG90eXBlLGUse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdSgpLChlPXtuZXh0OmV9KVtpLlN5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZX0obih0aGlzKSl9fSksdT1mdW5jdGlvbigpe319ZnVuY3Rpb24gYyhlKXt2YXIgdD1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJmVbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6e25leHQ6bihlKX19dmFyIGQseT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGU9ZSxuZXcgdH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LnNldFByb3RvdHlwZU9mKWQ9T2JqZWN0LnNldFByb3RvdHlwZU9mO2Vsc2V7dmFyIGY7ZTp7dmFyIGI9e307dHJ5e2IuX19wcm90b19fPXtWOiEwfSxmPWIuVjticmVhayBlfWNhdGNoKGVlKXt9Zj0hMX1kPWY/ZnVuY3Rpb24oZSx0KXtpZihlLl9fcHJvdG9fXz10LGUuX19wcm90b19fIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKGUrXCIgaXMgbm90IGV4dGVuc2libGVcIik7cmV0dXJuIGV9Om51bGx9dmFyIGg9ZDtmdW5jdGlvbiBfKGUsdCl7aWYoZS5wcm90b3R5cGU9eSh0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxoKWgoZSx0KTtlbHNlIGZvcih2YXIgbyBpbiB0KWlmKFwicHJvdG90eXBlXCIhPW8paWYoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxvKTtyJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHIpfWVsc2UgZVtvXT10W29dO2UuTz10LnByb3RvdHlwZX1mdW5jdGlvbiB2KGUsdCl7aWYodCl7dmFyIG89aTtlPWUuc3BsaXQoXCIuXCIpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGgtMTtyKyspe3ZhciBuPWVbcl07biBpbiBvfHwob1tuXT17fSksbz1vW25dfSh0PXQocj1vW2U9ZVtlLmxlbmd0aC0xXV0pKSE9ciYmbnVsbCE9dCYmcyhvLGUse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fXYoXCJBcnJheS5wcm90b3R5cGUua2V5c1wiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt1KCksZSBpbnN0YW5jZW9mIFN0cmluZyYmKGUrPVwiXCIpO3ZhciBvPTAscj17bmV4dDpmdW5jdGlvbigpe2lmKG88ZS5sZW5ndGgpe3ZhciBuPW8rKztyZXR1cm57dmFsdWU6dChuLGVbbl0pLGRvbmU6ITF9fXJldHVybiByLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fSxyLm5leHQoKX19O3JldHVybiByW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gcn0scn0odGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSl9fSkpLHYoXCJBcnJheS5wcm90b3R5cGUuZmluZFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXtlOnt2YXIgbz10aGlzO28gaW5zdGFuY2VvZiBTdHJpbmcmJihvPVN0cmluZyhvKSk7Zm9yKHZhciByPW8ubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgcz1vW25dO2lmKGUuY2FsbCh0LHMsbixvKSl7ZT1zO2JyZWFrIGV9fWU9dm9pZCAwfXJldHVybiBlfX0pKSx2KFwiT2JqZWN0LmlzXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfHxmdW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MS9lPT0xL3Q6ZSE9ZSYmdCE9dH19KSksdihcIkFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1wiLChmdW5jdGlvbihlKXtyZXR1cm4gZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbz10aGlzO28gaW5zdGFuY2VvZiBTdHJpbmcmJihvPVN0cmluZyhvKSk7dmFyIHI9by5sZW5ndGg7Zm9yKDA+KHQ9dHx8MCkmJih0PU1hdGgubWF4KHQrciwwKSk7dDxyO3QrKyl7dmFyIG49b1t0XTtpZihuPT09ZXx8T2JqZWN0LmlzKG4sZSkpcmV0dXJuITB9cmV0dXJuITF9fSkpLHYoXCJQcm9taXNlXCIsKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5iPTAsdGhpcy5jPXZvaWQgMCx0aGlzLmE9W107dmFyIHQ9dGhpcy5mKCk7dHJ5e2UodC5yZXNvbHZlLHQucmVqZWN0KX1jYXRjaChlKXt0LnJlamVjdChlKX19ZnVuY3Rpb24gbygpe3RoaXMuYT1udWxsfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0P2U6bmV3IHQoKGZ1bmN0aW9uKHQpe3QoZSl9KSl9aWYoZSlyZXR1cm4gZTtvLnByb3RvdHlwZS5iPWZ1bmN0aW9uKGUpe2lmKG51bGw9PXRoaXMuYSl7dGhpcy5hPVtdO3ZhciB0PXRoaXM7dGhpcy5jKChmdW5jdGlvbigpe3QuZygpfSkpfXRoaXMuYS5wdXNoKGUpfTt2YXIgbj1pLnNldFRpbWVvdXQ7by5wcm90b3R5cGUuYz1mdW5jdGlvbihlKXtuKGUsMCl9LG8ucHJvdG90eXBlLmc9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYSYmdGhpcy5hLmxlbmd0aDspe3ZhciBlPXRoaXMuYTt0aGlzLmE9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDsrK3Qpe3ZhciBvPWVbdF07ZVt0XT1udWxsO3RyeXtvKCl9Y2F0Y2goZSl7dGhpcy5mKGUpfX19dGhpcy5hPW51bGx9LG8ucHJvdG90eXBlLmY9ZnVuY3Rpb24oZSl7dGhpcy5jKChmdW5jdGlvbigpe3Rocm93IGV9KSl9LHQucHJvdG90eXBlLmY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBmdW5jdGlvbihyKXtvfHwobz0hMCxlLmNhbGwodCxyKSl9fXZhciB0PXRoaXMsbz0hMTtyZXR1cm57cmVzb2x2ZTplKHRoaXMucykscmVqZWN0OmUodGhpcy5nKX19LHQucHJvdG90eXBlLnM9ZnVuY3Rpb24oZSl7aWYoZT09PXRoaXMpdGhpcy5nKG5ldyBUeXBlRXJyb3IoXCJBIFByb21pc2UgY2Fubm90IHJlc29sdmUgdG8gaXRzZWxmXCIpKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiB0KXRoaXMudihlKTtlbHNle2U6c3dpdGNoKHR5cGVvZiBlKXtjYXNlXCJvYmplY3RcIjp2YXIgbz1udWxsIT1lO2JyZWFrIGU7Y2FzZVwiZnVuY3Rpb25cIjpvPSEwO2JyZWFrIGU7ZGVmYXVsdDpvPSExfW8/dGhpcy5tKGUpOnRoaXMuaChlKX19LHQucHJvdG90eXBlLm09ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwO3RyeXt0PWUudGhlbn1jYXRjaChlKXtyZXR1cm4gdm9pZCB0aGlzLmcoZSl9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90aGlzLncodCxlKTp0aGlzLmgoZSl9LHQucHJvdG90eXBlLmc9ZnVuY3Rpb24oZSl7dGhpcy5pKDIsZSl9LHQucHJvdG90eXBlLmg9ZnVuY3Rpb24oZSl7dGhpcy5pKDEsZSl9LHQucHJvdG90eXBlLmk9ZnVuY3Rpb24oZSx0KXtpZigwIT10aGlzLmIpdGhyb3cgRXJyb3IoXCJDYW5ub3Qgc2V0dGxlKFwiK2UrXCIsIFwiK3QrXCIpOiBQcm9taXNlIGFscmVhZHkgc2V0dGxlZCBpbiBzdGF0ZVwiK3RoaXMuYik7dGhpcy5iPWUsdGhpcy5jPXQsdGhpcy5sKCl9LHQucHJvdG90eXBlLmw9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmEpe2Zvcih2YXIgZT0wO2U8dGhpcy5hLmxlbmd0aDsrK2Upcy5iKHRoaXMuYVtlXSk7dGhpcy5hPW51bGx9fTt2YXIgcz1uZXcgbztyZXR1cm4gdC5wcm90b3R5cGUudj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmYoKTtlLkYodC5yZXNvbHZlLHQucmVqZWN0KX0sdC5wcm90b3R5cGUudz1mdW5jdGlvbihlLHQpe3ZhciBvPXRoaXMuZigpO3RyeXtlLmNhbGwodCxvLnJlc29sdmUsby5yZWplY3QpfWNhdGNoKGUpe28ucmVqZWN0KGUpfX0sdC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLG8pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQpe3RyeXtuKGUodCkpfWNhdGNoKGUpe3MoZSl9fTp0fXZhciBuLHMsaT1uZXcgdCgoZnVuY3Rpb24oZSx0KXtuPWUscz10fSkpO3JldHVybiB0aGlzLkYocihlLG4pLHIobyxzKSksaX0sdC5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9LHQucHJvdG90eXBlLkY9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKCl7c3dpdGNoKHIuYil7Y2FzZSAxOmUoci5jKTticmVhaztjYXNlIDI6dChyLmMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXCJVbmV4cGVjdGVkIHN0YXRlOiBcIityLmIpfX12YXIgcj10aGlzO251bGw9PXRoaXMuYT9zLmIobyk6dGhpcy5hLnB1c2gobyl9LHQucmVzb2x2ZT1yLHQucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxvKXtvKGUpfSkpfSx0LnJhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG8pe2Zvcih2YXIgbj1jKGUpLHM9bi5uZXh0KCk7IXMuZG9uZTtzPW4ubmV4dCgpKXIocy52YWx1ZSkuRih0LG8pfSkpfSx0LmFsbD1mdW5jdGlvbihlKXt2YXIgbz1jKGUpLG49by5uZXh0KCk7cmV0dXJuIG4uZG9uZT9yKFtdKTpuZXcgdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihvKXtpW3RdPW8sMD09LS1hJiZlKGkpfX12YXIgaT1bXSxhPTA7ZG97aS5wdXNoKHZvaWQgMCksYSsrLHIobi52YWx1ZSkuRihzKGkubGVuZ3RoLTEpLHQpLG49by5uZXh0KCl9d2hpbGUoIW4uZG9uZSl9KSl9LHR9KSk7dmFyIEU9RXx8e30sbT10aGlzfHxzZWxmO2Z1bmN0aW9uIFQoZSx0KXtlPWUuc3BsaXQoXCIuXCIpLHQ9dHx8bTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpZihudWxsPT0odD10W2Vbb11dKSlyZXR1cm4gbnVsbDtyZXR1cm4gdH1mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIFMoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuXCJvYmplY3RcIj09dCYmbnVsbCE9ZXx8XCJmdW5jdGlvblwiPT10fXZhciBBPVwiY2xvc3VyZV91aWRfXCIrKDFlOSpNYXRoLnJhbmRvbSgpPj4+MCksTT0wO2Z1bmN0aW9uIEkoZSx0LG8pe3JldHVybiBlLmNhbGwuYXBwbHkoZS5iaW5kLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTyhlLHQsbyl7aWYoIWUpdGhyb3cgRXJyb3IoKTtpZigyPGFyZ3VtZW50cy5sZW5ndGgpe3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShvLHIpLGUuYXBwbHkodCxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX1mdW5jdGlvbiB3KGUsdCxvKXtyZXR1cm4odz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCYmLTEhPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCkuaW5kZXhPZihcIm5hdGl2ZSBjb2RlXCIpP0k6TykuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIEQoZSx0KXtmdW5jdGlvbiBvKCl7fW8ucHJvdG90eXBlPXQucHJvdG90eXBlLGUuTz10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbyxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIEYoKXt0aGlzLmE9e319ZnVuY3Rpb24gQyhlLHQsbyxyKXt0aGlzLmY9ZSx0aGlzLmM9dCx0aGlzLmI9byx0aGlzLmE9cn1mdW5jdGlvbiBMKGUsdCxvLHIpe289dm9pZCAwPT09bz97fTpvLHRoaXMuYz1lLHRoaXMuYT1vLHRoaXMuYj10LHRoaXMuZj12b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBOKGUsdCxvKXtvPXZvaWQgMD09PW8/e306bzt2YXIgcj12b2lkIDA9PT1yP25ldyBGOnI7cmV0dXJuIG5ldyBDKHQsZSxvLHIpfWZ1bmN0aW9uIGooZSx0LG8pe289dm9pZCAwPT09bz97fTpvLHQ9RXJyb3IuY2FsbCh0aGlzLHQpLHRoaXMubWVzc2FnZT10Lm1lc3NhZ2UsXCJzdGFja1wiaW4gdCYmKHRoaXMuc3RhY2s9dC5zdGFjayksdGhpcy5jb2RlPWUsdGhpcy5tZXRhZGF0YT1vfWZ1bmN0aW9uIEIoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVShlKXtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLFUpO2Vsc2V7dmFyIHQ9RXJyb3IoKS5zdGFjazt0JiYodGhpcy5zdGFjaz10KX1lJiYodGhpcy5tZXNzYWdlPVN0cmluZyhlKSl9ZnVuY3Rpb24gUChlLHQpe2Zvcih2YXIgbz1cIlwiLHI9KGU9ZS5zcGxpdChcIiVzXCIpKS5sZW5ndGgtMSxuPTA7bjxyO24rKylvKz1lW25dKyhuPHQubGVuZ3RoP3Rbbl06XCIlc1wiKTtVLmNhbGwodGhpcyxvK2Vbcl0pfWZ1bmN0aW9uIFcoKXt0aGlzLmw9bnVsbCx0aGlzLmk9W10sdGhpcy5tPTAsdGhpcy5iPVYsdGhpcy5mPXRoaXMuYT10aGlzLmg9MCx0aGlzLmM9bnVsbCx0aGlzLmc9MH1GLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYVtlXX0sRi5wcm90b3R5cGUuRz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmEpfSxDLnByb3RvdHlwZS5nZXRSZXF1ZXN0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LEMucHJvdG90eXBlLmdldE1ldGhvZERlc2NyaXB0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxDLnByb3RvdHlwZS5nZXRNZXRhZGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LEMucHJvdG90eXBlLmdldENhbGxPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sTC5wcm90b3R5cGUuZ2V0UmVzcG9uc2VNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sTC5wcm90b3R5cGUuZ2V0TWV0YWRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxMLnByb3RvdHlwZS5nZXRNZXRob2REZXNjcmlwdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sTC5wcm90b3R5cGUuZ2V0U3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sXyhqLEVycm9yKSxqLnByb3RvdHlwZS5uYW1lPVwiUnBjRXJyb3JcIixCLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3JldHVyblwiZGF0YVwiPT1lfHxcImVycm9yXCI9PWU/dGhpczp0aGlzLmEub24oZSx0KX0sQi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5hLnJlbW92ZUxpc3RlbmVyKGUsdCl9LEIucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMuYS5jYW5jZWwoKX0sRChVLEVycm9yKSxVLnByb3RvdHlwZS5uYW1lPVwiQ3VzdG9tRXJyb3JcIixEKFAsVSksUC5wcm90b3R5cGUubmFtZT1cIkFzc2VydGlvbkVycm9yXCI7dmFyIFY9MCx4PTEyODtmdW5jdGlvbiB6KGUsdCxvLHIpe3Rocm93IGUuYj0zLGUubD1cIlRoZSBzdHJlYW0gaXMgYnJva2VuIEBcIitlLm0rXCIvXCIrbytcIi4gRXJyb3I6IFwiK3IrXCIuIFdpdGggaW5wdXQ6XFxuXCIrdCxFcnJvcihlLmwpfXZhciBrLEg9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsdm9pZCAwKX06ZnVuY3Rpb24oZSx0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdHx8MSE9dC5sZW5ndGg/LTE6ZS5pbmRleE9mKHQsMCk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYobyBpbiBlJiZlW29dPT09dClyZXR1cm4gbztyZXR1cm4tMX0sRz1TdHJpbmcucHJvdG90eXBlLnRyaW0/ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbSgpfTpmdW5jdGlvbihlKXtyZXR1cm4vXltcXHNcXHhhMF0qKFtcXHNcXFNdKj8pW1xcc1xceGEwXSokLy5leGVjKGUpWzFdfTtmdW5jdGlvbiBxKGUsdCl7cmV0dXJuLTEhPWUuaW5kZXhPZih0KX1mdW5jdGlvbiBZKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTowfWU6e3ZhciBRPW0ubmF2aWdhdG9yO2lmKFEpe3ZhciBLPVEudXNlckFnZW50O2lmKEspe2s9SzticmVhayBlfX1rPVwiXCJ9dmFyICQ9XCJjb25zdHJ1Y3RvciBoYXNPd25Qcm9wZXJ0eSBpc1Byb3RvdHlwZU9mIHByb3BlcnR5SXNFbnVtZXJhYmxlIHRvTG9jYWxlU3RyaW5nIHRvU3RyaW5nIHZhbHVlT2ZcIi5zcGxpdChcIiBcIik7ZnVuY3Rpb24gWChlKXt2YXIgdD0xO2U9ZS5zcGxpdChcIjpcIik7Zm9yKHZhciBvPVtdOzA8dCYmZS5sZW5ndGg7KW8ucHVzaChlLnNoaWZ0KCkpLHQtLTtyZXR1cm4gZS5sZW5ndGgmJm8ucHVzaChlLmpvaW4oXCI6XCIpKSxvfWZ1bmN0aW9uIFooZSl7cmV0dXJuIFpbXCIgXCJdKGUpLGV9WltcIiBcIl09Ujt2YXIgSixlZSx0ZT1xKGssXCJPcGVyYVwiKSxvZT1xKGssXCJUcmlkZW50XCIpfHxxKGssXCJNU0lFXCIpLHJlPXEoayxcIkVkZ2VcIiksbmU9cShrLFwiR2Vja29cIikmJiEocShrLnRvTG93ZXJDYXNlKCksXCJ3ZWJraXRcIikmJiFxKGssXCJFZGdlXCIpKSYmIShxKGssXCJUcmlkZW50XCIpfHxxKGssXCJNU0lFXCIpKSYmIXEoayxcIkVkZ2VcIiksc2U9cShrLnRvTG93ZXJDYXNlKCksXCJ3ZWJraXRcIikmJiFxKGssXCJFZGdlXCIpO2U6e3ZhciBpZT1cIlwiLGFlPShlZT1rLG5lPy9ydjooW15cXCk7XSspKFxcKXw7KS8uZXhlYyhlZSk6cmU/L0VkZ2VcXC8oW1xcZFxcLl0rKS8uZXhlYyhlZSk6b2U/L1xcYig/Ok1TSUV8cnYpWzogXShbXlxcKTtdKykoXFwpfDspLy5leGVjKGVlKTpzZT8vV2ViS2l0XFwvKFxcUyspLy5leGVjKGVlKTp0ZT8vKD86VmVyc2lvbilbIFxcL10/KFxcUyspLy5leGVjKGVlKTp2b2lkIDApO2lmKGFlJiYoaWU9YWU/YWVbMV06XCJcIiksb2Upe3ZhciBnZSxwZT1tLmRvY3VtZW50O2lmKG51bGwhPShnZT1wZT9wZS5kb2N1bWVudE1vZGU6dm9pZCAwKSYmZ2U+cGFyc2VGbG9hdChpZSkpe0o9U3RyaW5nKGdlKTticmVhayBlfX1KPWllfXZhciBsZT17fTtmdW5jdGlvbiB1ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1sZTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsOSk/dFs5XTp0WzldPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD1HKFN0cmluZyhKKSkuc3BsaXQoXCIuXCIpLG89RyhcIjlcIikuc3BsaXQoXCIuXCIpLHI9TWF0aC5tYXgodC5sZW5ndGgsby5sZW5ndGgpLG49MDswPT1lJiZuPHI7bisrKXt2YXIgcz10W25dfHxcIlwiLGk9b1tuXXx8XCJcIjtkb3tpZihzPS8oXFxkKikoXFxEKikoLiopLy5leGVjKHMpfHxbXCJcIixcIlwiLFwiXCIsXCJcIl0saT0vKFxcZCopKFxcRCopKC4qKS8uZXhlYyhpKXx8W1wiXCIsXCJcIixcIlwiLFwiXCJdLDA9PXNbMF0ubGVuZ3RoJiYwPT1pWzBdLmxlbmd0aClicmVhaztlPVkoMD09c1sxXS5sZW5ndGg/MDpwYXJzZUludChzWzFdLDEwKSwwPT1pWzFdLmxlbmd0aD8wOnBhcnNlSW50KGlbMV0sMTApKXx8WSgwPT1zWzJdLmxlbmd0aCwwPT1pWzJdLmxlbmd0aCl8fFkoc1syXSxpWzJdKSxzPXNbM10saT1pWzNdfXdoaWxlKDA9PWUpfXJldHVybiAwPD1lfSgpfSgpfWZ1bmN0aW9uIGNlKCl7MCE9ZGUmJihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcyxBKSYmdGhpc1tBXXx8KHRoaXNbQV09KytNKSksdGhpcy5LPXRoaXMuS312YXIgZGU9MDtjZS5wcm90b3R5cGUuSz0hMTt2YXIgeWU9T2JqZWN0LmZyZWV6ZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIGZlKGUsdCl7dGhpcy50eXBlPWUsdGhpcy5hPXRoaXMudGFyZ2V0PXQsdGhpcy5kZWZhdWx0UHJldmVudGVkPSExfWZlLnByb3RvdHlwZS5iPWZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfTt2YXIgYmU9ZnVuY3Rpb24oKXtpZighbS5hZGRFdmVudExpc3RlbmVyfHwhT2JqZWN0LmRlZmluZVByb3BlcnR5KXJldHVybiExO3ZhciBlPSExLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtlPSEwfX0pO3RyeXttLmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUix0KSxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUix0KX1jYXRjaChlKXt9cmV0dXJuIGV9KCk7ZnVuY3Rpb24gaGUoZSx0KXtpZihmZS5jYWxsKHRoaXMsZT9lLnR5cGU6XCJcIiksdGhpcy5yZWxhdGVkVGFyZ2V0PXRoaXMuYT10aGlzLnRhcmdldD1udWxsLHRoaXMuYnV0dG9uPXRoaXMuc2NyZWVuWT10aGlzLnNjcmVlblg9dGhpcy5jbGllbnRZPXRoaXMuY2xpZW50WD0wLHRoaXMua2V5PVwiXCIsdGhpcy5tZXRhS2V5PXRoaXMuc2hpZnRLZXk9dGhpcy5hbHRLZXk9dGhpcy5jdHJsS2V5PSExLHRoaXMucG9pbnRlcklkPTAsdGhpcy5wb2ludGVyVHlwZT1cIlwiLHRoaXMuYz1udWxsLGUpe3ZhciBvPXRoaXMudHlwZT1lLnR5cGUscj1lLmNoYW5nZWRUb3VjaGVzJiZlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD9lLmNoYW5nZWRUb3VjaGVzWzBdOm51bGw7aWYodGhpcy50YXJnZXQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVudCx0aGlzLmE9dCx0PWUucmVsYXRlZFRhcmdldCl7aWYobmUpe2U6e3RyeXtaKHQubm9kZU5hbWUpO3ZhciBuPSEwO2JyZWFrIGV9Y2F0Y2goZSl7fW49ITF9bnx8KHQ9bnVsbCl9fWVsc2VcIm1vdXNlb3ZlclwiPT1vP3Q9ZS5mcm9tRWxlbWVudDpcIm1vdXNlb3V0XCI9PW8mJih0PWUudG9FbGVtZW50KTt0aGlzLnJlbGF0ZWRUYXJnZXQ9dCxyPyh0aGlzLmNsaWVudFg9dm9pZCAwIT09ci5jbGllbnRYP3IuY2xpZW50WDpyLnBhZ2VYLHRoaXMuY2xpZW50WT12b2lkIDAhPT1yLmNsaWVudFk/ci5jbGllbnRZOnIucGFnZVksdGhpcy5zY3JlZW5YPXIuc2NyZWVuWHx8MCx0aGlzLnNjcmVlblk9ci5zY3JlZW5ZfHwwKToodGhpcy5jbGllbnRYPXZvaWQgMCE9PWUuY2xpZW50WD9lLmNsaWVudFg6ZS5wYWdlWCx0aGlzLmNsaWVudFk9dm9pZCAwIT09ZS5jbGllbnRZP2UuY2xpZW50WTplLnBhZ2VZLHRoaXMuc2NyZWVuWD1lLnNjcmVlblh8fDAsdGhpcy5zY3JlZW5ZPWUuc2NyZWVuWXx8MCksdGhpcy5idXR0b249ZS5idXR0b24sdGhpcy5rZXk9ZS5rZXl8fFwiXCIsdGhpcy5jdHJsS2V5PWUuY3RybEtleSx0aGlzLmFsdEtleT1lLmFsdEtleSx0aGlzLnNoaWZ0S2V5PWUuc2hpZnRLZXksdGhpcy5tZXRhS2V5PWUubWV0YUtleSx0aGlzLnBvaW50ZXJJZD1lLnBvaW50ZXJJZHx8MCx0aGlzLnBvaW50ZXJUeXBlPVwic3RyaW5nXCI9PXR5cGVvZiBlLnBvaW50ZXJUeXBlP2UucG9pbnRlclR5cGU6X2VbZS5wb2ludGVyVHlwZV18fFwiXCIsdGhpcy5jPWUsZS5kZWZhdWx0UHJldmVudGVkJiZoZS5PLmIuY2FsbCh0aGlzKX19RChoZSxmZSk7dmFyIF9lPXllKHsyOlwidG91Y2hcIiwzOlwicGVuXCIsNDpcIm1vdXNlXCJ9KTtoZS5wcm90b3R5cGUuYj1mdW5jdGlvbigpe2hlLk8uYi5jYWxsKHRoaXMpO3ZhciBlPXRoaXMuYztlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExfTt2YXIgdmU9XCJjbG9zdXJlX2xpc3RlbmFibGVfXCIrKDFlNipNYXRoLnJhbmRvbSgpfDApLEVlPTA7ZnVuY3Rpb24gbWUoZSx0LG8scixuKXt0aGlzLmxpc3RlbmVyPWUsdGhpcy5wcm94eT1udWxsLHRoaXMuc3JjPXQsdGhpcy50eXBlPW8sdGhpcy5jYXB0dXJlPSEhcix0aGlzLkg9bix0aGlzLmtleT0rK0VlLHRoaXMuQT10aGlzLkQ9ITF9ZnVuY3Rpb24gVGUoZSl7ZS5BPSEwLGUubGlzdGVuZXI9bnVsbCxlLnByb3h5PW51bGwsZS5zcmM9bnVsbCxlLkg9bnVsbH1mdW5jdGlvbiBSZShlKXt0aGlzLnNyYz1lLHRoaXMuYT17fSx0aGlzLmI9MH1mdW5jdGlvbiBTZShlLHQpe3ZhciBvPXQudHlwZTtpZihvIGluIGUuYSl7dmFyIHIsbj1lLmFbb10scz1IKG4sdCk7KHI9MDw9cykmJkFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChuLHMsMSksciYmKFRlKHQpLDA9PWUuYVtvXS5sZW5ndGgmJihkZWxldGUgZS5hW29dLGUuYi0tKSl9fWZ1bmN0aW9uIEFlKGUsdCxvLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcz1lW25dO2lmKCFzLkEmJnMubGlzdGVuZXI9PXQmJnMuY2FwdHVyZT09ISFvJiZzLkg9PXIpcmV0dXJuIG59cmV0dXJuLTF9UmUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBzPWUudG9TdHJpbmcoKTsoZT10aGlzLmFbc10pfHwoZT10aGlzLmFbc109W10sdGhpcy5iKyspO3ZhciBpPUFlKGUsdCxyLG4pO3JldHVybi0xPGk/KHQ9ZVtpXSxvfHwodC5EPSExKSk6KCh0PW5ldyBtZSh0LHRoaXMuc3JjLHMsISFyLG4pKS5EPW8sZS5wdXNoKHQpKSx0fSxSZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUsdCxvLHIpe2lmKCEoKGU9ZS50b1N0cmluZygpKWluIHRoaXMuYSkpcmV0dXJuITE7dmFyIG49dGhpcy5hW2VdO3JldHVybi0xPCh0PUFlKG4sdCxvLHIpKSYmKFRlKG5bdF0pLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChuLHQsMSksMD09bi5sZW5ndGgmJihkZWxldGUgdGhpcy5hW2VdLHRoaXMuYi0tKSwhMCl9O3ZhciBNZT1cImNsb3N1cmVfbG1fXCIrKDFlNipNYXRoLnJhbmRvbSgpfDApLEllPXt9O2Z1bmN0aW9uIE9lKGUsdCxvLHIsbil7aWYociYmci5vbmNlKURlKGUsdCxvLHIsbik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKU9lKGUsdFtzXSxvLHIsbik7ZWxzZSBvPVVlKG8pLGUmJmVbdmVdP2UuZi5hZGQoU3RyaW5nKHQpLG8sITEsUyhyKT8hIXIuY2FwdHVyZTohIXIsbik6d2UoZSx0LG8sITEscixuKX1mdW5jdGlvbiB3ZShlLHQsbyxyLG4scyl7aWYoIXQpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGV2ZW50IHR5cGVcIik7dmFyIGk9UyhuKT8hIW4uY2FwdHVyZTohIW4sYT1qZShlKTtpZihhfHwoZVtNZV09YT1uZXcgUmUoZSkpLCEobz1hLmFkZCh0LG8scixpLHMpKS5wcm94eSlpZihyPWZ1bmN0aW9uKCl7dmFyIGU9TmU7cmV0dXJuIGZ1bmN0aW9uIHQobyl7cmV0dXJuIGUuY2FsbCh0LnNyYyx0Lmxpc3RlbmVyLG8pfX0oKSxvLnByb3h5PXIsci5zcmM9ZSxyLmxpc3RlbmVyPW8sZS5hZGRFdmVudExpc3RlbmVyKWJlfHwobj1pKSx2b2lkIDA9PT1uJiYobj0hMSksZS5hZGRFdmVudExpc3RlbmVyKHQudG9TdHJpbmcoKSxyLG4pO2Vsc2UgaWYoZS5hdHRhY2hFdmVudCllLmF0dGFjaEV2ZW50KExlKHQudG9TdHJpbmcoKSkscik7ZWxzZXtpZighZS5hZGRMaXN0ZW5lcnx8IWUucmVtb3ZlTGlzdGVuZXIpdGhyb3cgRXJyb3IoXCJhZGRFdmVudExpc3RlbmVyIGFuZCBhdHRhY2hFdmVudCBhcmUgdW5hdmFpbGFibGUuXCIpO2UuYWRkTGlzdGVuZXIocil9fWZ1bmN0aW9uIERlKGUsdCxvLHIsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylEZShlLHRbc10sbyxyLG4pO2Vsc2Ugbz1VZShvKSxlJiZlW3ZlXT9lLmYuYWRkKFN0cmluZyh0KSxvLCEwLFMocik/ISFyLmNhcHR1cmU6ISFyLG4pOndlKGUsdCxvLCEwLHIsbil9ZnVuY3Rpb24gRmUoZSx0LG8scixuKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKUZlKGUsdFtzXSxvLHIsbik7ZWxzZSByPVMocik/ISFyLmNhcHR1cmU6ISFyLG89VWUobyksZSYmZVt2ZV0/ZS5mLnJlbW92ZShTdHJpbmcodCksbyxyLG4pOmUmJihlPWplKGUpKSYmKHQ9ZS5hW3QudG9TdHJpbmcoKV0sZT0tMSx0JiYoZT1BZSh0LG8scixuKSksKG89LTE8ZT90W2VdOm51bGwpJiZDZShvKSl9ZnVuY3Rpb24gQ2UoZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUmJmUmJiFlLkEpe3ZhciB0PWUuc3JjO2lmKHQmJnRbdmVdKVNlKHQuZixlKTtlbHNle3ZhciBvPWUudHlwZSxyPWUucHJveHk7dC5yZW1vdmVFdmVudExpc3RlbmVyP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLHIsZS5jYXB0dXJlKTp0LmRldGFjaEV2ZW50P3QuZGV0YWNoRXZlbnQoTGUobykscik6dC5hZGRMaXN0ZW5lciYmdC5yZW1vdmVMaXN0ZW5lciYmdC5yZW1vdmVMaXN0ZW5lcihyKSwobz1qZSh0KSk/KFNlKG8sZSksMD09by5iJiYoby5zcmM9bnVsbCx0W01lXT1udWxsKSk6VGUoZSl9fX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZSBpbiBJZT9JZVtlXTpJZVtlXT1cIm9uXCIrZX1mdW5jdGlvbiBOZShlLHQpe2lmKGUuQSllPSEwO2Vsc2V7dD1uZXcgaGUodCx0aGlzKTt2YXIgbz1lLmxpc3RlbmVyLHI9ZS5IfHxlLnNyYztlLkQmJkNlKGUpLGU9by5jYWxsKHIsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gamUoZSl7cmV0dXJuKGU9ZVtNZV0paW5zdGFuY2VvZiBSZT9lOm51bGx9dmFyIEJlPVwiX19jbG9zdXJlX2V2ZW50c19mbl9cIisoMWU5Kk1hdGgucmFuZG9tKCk+Pj4wKTtmdW5jdGlvbiBVZShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6KGVbQmVdfHwoZVtCZV09ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFuZGxlRXZlbnQodCl9KSxlW0JlXSl9ZnVuY3Rpb24gUGUoKXtjZS5jYWxsKHRoaXMpLHRoaXMuZj1uZXcgUmUodGhpcyksdGhpcy5VPXRoaXN9ZnVuY3Rpb24gV2UoZSx0KXtlPWUuVTt2YXIgbz10LnR5cGV8fHQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD1uZXcgZmUodCxlKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBmZSl0LnRhcmdldD10LnRhcmdldHx8ZTtlbHNle3ZhciByPXQ7IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvLHIsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe2ZvcihvIGluIHI9YXJndW1lbnRzW25dKWVbb109cltvXTtmb3IodmFyIHM9MDtzPCQubGVuZ3RoO3MrKylvPSRbc10sT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJihlW29dPXJbb10pfX0odD1uZXcgZmUobyxlKSxyKX1WZShlPXQuYT1lLG8sITAsdCksVmUoZSxvLCExLHQpfWZ1bmN0aW9uIFZlKGUsdCxvLHIpe2lmKHQ9ZS5mLmFbU3RyaW5nKHQpXSl7dD10LmNvbmNhdCgpO2Zvcih2YXIgbj0hMCxzPTA7czx0Lmxlbmd0aDsrK3Mpe3ZhciBpPXRbc107aWYoaSYmIWkuQSYmaS5jYXB0dXJlPT1vKXt2YXIgYT1pLmxpc3RlbmVyLGc9aS5IfHxpLnNyYztpLkQmJlNlKGUuZixpKSxuPSExIT09YS5jYWxsKGcscikmJm59fX19ZnVuY3Rpb24geGUoZSx0LG8pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpbyYmKGU9dyhlLG8pKTtlbHNle2lmKCFlfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLmhhbmRsZUV2ZW50KXRocm93IEVycm9yKFwiSW52YWxpZCBsaXN0ZW5lciBhcmd1bWVudFwiKTtlPXcoZS5oYW5kbGVFdmVudCxlKX1yZXR1cm4gMjE0NzQ4MzY0NzxOdW1iZXIodCk/LTE6bS5zZXRUaW1lb3V0KGUsdHx8MCl9ZnVuY3Rpb24gemUoZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLnZhbHVlPXR9RChQZSxjZSksUGUucHJvdG90eXBlW3ZlXT0hMCxQZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbyxyKXtPZSh0aGlzLGUsdCxvLHIpfSxQZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbyxyKXtGZSh0aGlzLGUsdCxvLHIpfSx6ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfTt2YXIga2UsSGUsR2UscWU9bmV3IHplKFwiT0ZGXCIsMS8wKSxZZT1uZXcgemUoXCJTRVZFUkVcIiwxZTMpLFFlPW5ldyB6ZShcIkNPTkZJR1wiLDcwMCksS2U9bmV3IHplKFwiRklORVwiLDUwMCk7ZnVuY3Rpb24gJGUoKXt0aGlzLmNsZWFyKCl9ZnVuY3Rpb24gWGUoZSx0LG8pe3RoaXMucmVzZXQoZXx8cWUsdCxvLHZvaWQgMCx2b2lkIDApfWZ1bmN0aW9uIFplKGUsdCl7dGhpcy5hPW51bGwsdGhpcy5mPVtdLHRoaXMuYj0odm9pZCAwPT09dD9udWxsOnQpfHxudWxsLHRoaXMuYz1bXSx0aGlzLmc9e2E6ZnVuY3Rpb24oKXtyZXR1cm4gZX19fWZ1bmN0aW9uIEplKGUpe3JldHVybiBlLmE/ZS5hOmUuYj9KZShlLmIpOihmdW5jdGlvbihlLHQpe3Rocm93IG5ldyBQKFwiRmFpbHVyZVwiKyhlP1wiOiBcIitlOlwiXCIpLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9KFwiUm9vdCBsb2dnZXIgaGFzIG5vIGxldmVsIHNldC5cIikscWUpfWZ1bmN0aW9uIGV0KCl7dGhpcy5lbnRyaWVzPXt9O3ZhciBlPW5ldyBaZShcIlwiKTtlLmE9UWUsdGhpcy5lbnRyaWVzW1wiXCJdPWV9ZnVuY3Rpb24gdHQoZSx0LG8pe3ZhciByPWUuZW50cmllc1t0XTtpZihyKXJldHVybiB2b2lkIDAhPT1vJiYoci5hPW8pLHI7cj10dChlLHQuc3Vic3RyKDAsdC5sYXN0SW5kZXhPZihcIi5cIikpKTt2YXIgbj1uZXcgWmUodCxyKTtyZXR1cm4gZS5lbnRyaWVzW3RdPW4sci5jLnB1c2gobiksdm9pZCAwIT09byYmKG4uYT1vKSxufWZ1bmN0aW9uIG90KCl7cmV0dXJuIEhlfHwoSGU9bmV3IGV0KSxIZX1mdW5jdGlvbiBydChlLHQsbyl7dmFyIHI7KHI9ZSkmJihyPWUmJnQpJiYocj0ocj10LnZhbHVlKT49KGU/SmUodHQob3QoKSxlLmEoKSkpOnFlKS52YWx1ZSksciYmKHQ9dHx8cWUscj10dChvdCgpLGUuYSgpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiYobz1vKCkpLGtlfHwoa2U9bmV3ICRlKSxmdW5jdGlvbihlLHQpe2Zvcig7ZTspZS5mLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSksZT1lLmJ9KHIsZT1uZXcgWGUodCxvLGUuYSgpKSkpfWZ1bmN0aW9uIG50KGUsdCl7ZSYmcnQoZSxLZSx0KX1mdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBpdChlKXt2YXIgdDtyZXR1cm4odD1lLmEpfHwodD17fSxwdChlKSYmKHRbMF09ITAsdFsxXT0hMCksdD1lLmE9dCksdH1mdW5jdGlvbiBhdCgpe31mdW5jdGlvbiBndChlKXtyZXR1cm4oZT1wdChlKSk/bmV3IEFjdGl2ZVhPYmplY3QoZSk6bmV3IFhNTEh0dHBSZXF1ZXN0fWZ1bmN0aW9uIHB0KGUpe2lmKCFlLmImJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFjdGl2ZVhPYmplY3Qpe2Zvcih2YXIgdD1bXCJNU1hNTDIuWE1MSFRUUC42LjBcIixcIk1TWE1MMi5YTUxIVFRQLjMuMFwiLFwiTVNYTUwyLlhNTEhUVFBcIixcIk1pY3Jvc29mdC5YTUxIVFRQXCJdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9dFtvXTt0cnl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KHIpLGUuYj1yfWNhdGNoKGUpe319dGhyb3cgRXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIEFjdGl2ZVhPYmplY3QuIEFjdGl2ZVggbWlnaHQgYmUgZGlzYWJsZWQsIG9yIE1TWE1MIG1pZ2h0IG5vdCBiZSBpbnN0YWxsZWRcIil9cmV0dXJuIGUuYn1mdW5jdGlvbiBsdChlLHQpe3RoaXMuYj1lW20uU3ltYm9sLml0ZXJhdG9yXSgpLHRoaXMuYz10LHRoaXMuZj0wfSRlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe30sWGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7fSxzdC5wcm90b3R5cGUuYT1udWxsLEQoYXQsc3QpLEdlPW5ldyBhdCxhKCksdSgpLGx0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGx0LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iLm5leHQoKTtyZXR1cm57dmFsdWU6ZS5kb25lP3ZvaWQgMDp0aGlzLmMuY2FsbCh2b2lkIDAsZS52YWx1ZSx0aGlzLmYrKyksZG9uZTplLmRvbmV9fSxhKCksdSgpLGEoKSx1KCk7dmFyIHV0PVwiU3RvcEl0ZXJhdGlvblwiaW4gbT9tLlN0b3BJdGVyYXRpb246e21lc3NhZ2U6XCJTdG9wSXRlcmF0aW9uXCIsc3RhY2s6XCJcIn07ZnVuY3Rpb24gY3QoKXt9ZnVuY3Rpb24gZHQoZSl7aWYoZSBpbnN0YW5jZW9mIGZ0fHxlIGluc3RhbmNlb2YgYnR8fGUgaW5zdGFuY2VvZiBodClyZXR1cm4gZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIG5ldyBmdCgoZnVuY3Rpb24oKXtyZXR1cm4geXQoZSl9KSk7aWYoYSgpLHUoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIGEoKSx1KCksbmV3IGZ0KChmdW5jdGlvbigpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKX0pKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnUpcmV0dXJuIG5ldyBmdCgoZnVuY3Rpb24oKXtyZXR1cm4geXQoZS51KCkpfSkpO3Rocm93IEVycm9yKFwiTm90IGFuIGl0ZXJhdG9yIG9yIGl0ZXJhYmxlLlwiKX1mdW5jdGlvbiB5dChlKXtpZighKGUgaW5zdGFuY2VvZiBjdCkpcmV0dXJuIGU7dmFyIHQ9ITE7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIG87IXQ7KXRyeXtvPWUuYSgpO2JyZWFrfWNhdGNoKGUpe2lmKGUhPT11dCl0aHJvdyBlO3Q9ITB9cmV0dXJue3ZhbHVlOm8sZG9uZTp0fX19fWZ1bmN0aW9uIGZ0KGUpe3RoaXMuYj1lfWZ1bmN0aW9uIGJ0KGUpe3RoaXMuYj1lfWZ1bmN0aW9uIGh0KGUpe2Z0LmNhbGwodGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKSx0aGlzLmY9ZX1mdW5jdGlvbiBfdChlLHQpe3RoaXMubz17fSx0aGlzLmo9W10sdGhpcy5CPXRoaXMuc2l6ZT0wO3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg7aWYoMTxvKXtpZihvJTIpdGhyb3cgRXJyb3IoXCJVbmV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtmb3IodmFyIHI9MDtyPG87cis9Mil0aGlzLnNldChhcmd1bWVudHNbcl0sYXJndW1lbnRzW3IrMV0pfWVsc2UgZSYmdGhpcy5hZGRBbGwoZSl9ZnVuY3Rpb24gdnQoZSl7aWYoZS5zaXplIT1lLmoubGVuZ3RoKXtmb3IodmFyIHQ9MCxvPTA7dDxlLmoubGVuZ3RoOyl7dmFyIHI9ZS5qW3RdO0V0KGUubyxyKSYmKGUualtvKytdPXIpLHQrK31lLmoubGVuZ3RoPW99aWYoZS5zaXplIT1lLmoubGVuZ3RoKXt2YXIgbj17fTtmb3Iobz10PTA7dDxlLmoubGVuZ3RoOylFdChuLHI9ZS5qW3RdKXx8KGUualtvKytdPXIsbltyXT0xKSx0Kys7ZS5qLmxlbmd0aD1vfX1mdW5jdGlvbiBFdChlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1jdC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiBjdC5wcm90b3R5cGUuYS5jYWxsKHRoaXMpfSxjdC5wcm90b3R5cGUuYT1mdW5jdGlvbigpe3Rocm93IHV0fSxjdC5wcm90b3R5cGUudT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhKCksdSgpLGZ0LnByb3RvdHlwZS51PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBidCh0aGlzLmIoKSl9LGZ0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBodCh0aGlzLmIoKSl9LGZ0LnByb3RvdHlwZS5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBodCh0aGlzLmIoKSl9LGEoKSx1KCksXyhidCxjdCksYnQucHJvdG90eXBlLmE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmIubmV4dCgpO2lmKGUuZG9uZSl0aHJvdyB1dDtyZXR1cm4gZS52YWx1ZX0sYnQucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gYnQucHJvdG90eXBlLmEuY2FsbCh0aGlzKX0sYnQucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGh0KHRoaXMuYil9LGJ0LnByb3RvdHlwZS5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBodCh0aGlzLmIpfSxfKGh0LGZ0KSxodC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmYubmV4dCgpfSwocj1fdC5wcm90b3R5cGUpLkc9ZnVuY3Rpb24oKXtyZXR1cm4gdnQodGhpcyksdGhpcy5qLmNvbmNhdCgpfSxyLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gRXQodGhpcy5vLGUpfSxyLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5vPXt9LHRoaXMuQj10aGlzLnNpemU9dGhpcy5qLmxlbmd0aD0wfSxyLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kZWxldGUoZSl9LHIuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiEhRXQodGhpcy5vLGUpJiYoZGVsZXRlIHRoaXMub1tlXSwtLXRoaXMuc2l6ZSx0aGlzLkIrKyx0aGlzLmoubGVuZ3RoPjIqdGhpcy5zaXplJiZ2dCh0aGlzKSwhMCl9LHIuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEV0KHRoaXMubyxlKT90aGlzLm9bZV06dH0sci5zZXQ9ZnVuY3Rpb24oZSx0KXtFdCh0aGlzLm8sZSl8fCh0aGlzLnNpemUrPTEsdGhpcy5qLnB1c2goZSksdGhpcy5CKyspLHRoaXMub1tlXT10fSxyLmFkZEFsbD1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgX3QpZm9yKHZhciB0PWUuRygpLG89MDtvPHQubGVuZ3RoO28rKyl0aGlzLnNldCh0W29dLGUuZ2V0KHRbb10pKTtlbHNlIGZvcih0IGluIGUpdGhpcy5zZXQodCxlW3RdKX0sci5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPXRoaXMuRygpLHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIG49b1tyXSxzPXRoaXMuZ2V0KG4pO2UuY2FsbCh0LHMsbix0aGlzKX19LHIuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF90KHRoaXMpfSxyLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gZHQodGhpcy51KCEwKSkuYygpfSxyLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBkdCh0aGlzLnUoITEpKS5jKCl9LHIuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBsdChlLHQpfSh0aGlzLmtleXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuW3QsZS5nZXQodCldfSkpfSxyLnU9ZnVuY3Rpb24oZSl7dnQodGhpcyk7dmFyIHQ9MCxvPXRoaXMuQixyPXRoaXMsbj1uZXcgY3Q7cmV0dXJuIG4uYT1mdW5jdGlvbigpe2lmKG8hPXIuQil0aHJvdyBFcnJvcihcIlRoZSBtYXAgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGl0ZXJhdG9yIHdhcyBjcmVhdGVkXCIpO2lmKHQ+PXIuai5sZW5ndGgpdGhyb3cgdXQ7dmFyIG49ci5qW3QrK107cmV0dXJuIGU/bjpyLm9bbl19LG4ubmV4dD1uLmEuYmluZChuKSxufTt2YXIgbXQ9L14oPzooW146Lz8jLl0rKTopPyg/OlxcL1xcLyg/OihbXlxcXFwvPyNdKilAKT8oW15cXFxcLz8jXSo/KSg/OjooWzAtOV0rKSk/KD89W1xcXFwvPyNdfCQpKT8oW14/I10rKT8oPzpcXD8oW14jXSopKT8oPzojKFtcXHNcXFNdKikpPyQvO2Z1bmN0aW9uIFR0KGUpe1BlLmNhbGwodGhpcyksdGhpcy5oZWFkZXJzPW5ldyBfdCx0aGlzLkM9ZXx8bnVsbCx0aGlzLmM9ITEsdGhpcy5KPXRoaXMuYT1udWxsLHRoaXMuUD10aGlzLnY9XCJcIix0aGlzLmc9MCx0aGlzLmw9XCJcIix0aGlzLmk9dGhpcy5OPXRoaXMucz10aGlzLkw9ITEsdGhpcy5oPTAsdGhpcy53PW51bGwsdGhpcy5tPVJ0LHRoaXMuST10aGlzLk09ITF9RChUdCxQZSk7dmFyIFJ0PVwiXCI7VHQucHJvdG90eXBlLmI9dHQob3QoKSxcImdvb2cubmV0LlhocklvXCIsdm9pZCAwKS5nO3ZhciBTdD0vXmh0dHBzPyQvaSxBdD1bXCJQT1NUXCIsXCJQVVRcIl07ZnVuY3Rpb24gTXQoZSx0KXtlLmM9ITEsZS5hJiYoZS5pPSEwLGUuYS5hYm9ydCgpLGUuaT0hMSksZS5sPXQsZS5nPTUsSXQoZSksd3QoZSl9ZnVuY3Rpb24gSXQoZSl7ZS5MfHwoZS5MPSEwLFdlKGUsXCJjb21wbGV0ZVwiKSxXZShlLFwiZXJyb3JcIikpfWZ1bmN0aW9uIE90KGUpe2lmKGUuYyYmdm9pZCAwIT09RSlpZihlLkpbMV0mJjQ9PUZ0KGUpJiYyPT1lLmdldFN0YXR1cygpKW50KGUuYixMdChlLFwiTG9jYWwgcmVxdWVzdCBlcnJvciBkZXRlY3RlZCBhbmQgaWdub3JlZFwiKSk7ZWxzZSBpZihlLnMmJjQ9PUZ0KGUpKXhlKGUuUiwwLGUpO2Vsc2UgaWYoV2UoZSxcInJlYWR5c3RhdGVjaGFuZ2VcIiksND09RnQoZSkpe250KGUuYixMdChlLFwiUmVxdWVzdCBjb21wbGV0ZVwiKSksZS5jPSExO3RyeXt2YXIgdCxvPWUuZ2V0U3RhdHVzKCk7ZTpzd2l0Y2gobyl7Y2FzZSAyMDA6Y2FzZSAyMDE6Y2FzZSAyMDI6Y2FzZSAyMDQ6Y2FzZSAyMDY6Y2FzZSAzMDQ6Y2FzZSAxMjIzOnZhciByPSEwO2JyZWFrIGU7ZGVmYXVsdDpyPSExfWlmKCEodD1yKSl7dmFyIG47aWYobj0wPT09byl7dmFyIHM9U3RyaW5nKGUudikubWF0Y2gobXQpWzFdfHxudWxsO2lmKCFzJiZtLnNlbGYmJm0uc2VsZi5sb2NhdGlvbil7dmFyIGk9bS5zZWxmLmxvY2F0aW9uLnByb3RvY29sO3M9aS5zdWJzdHIoMCxpLmxlbmd0aC0xKX1uPSFTdC50ZXN0KHM/cy50b0xvd2VyQ2FzZSgpOlwiXCIpfXQ9bn1pZih0KVdlKGUsXCJjb21wbGV0ZVwiKSxXZShlLFwic3VjY2Vzc1wiKTtlbHNle2UuZz02O3RyeXt2YXIgYT0yPEZ0KGUpP2UuYS5zdGF0dXNUZXh0OlwiXCJ9Y2F0Y2godCl7bnQoZS5iLFwiQ2FuIG5vdCBnZXQgc3RhdHVzOiBcIit0Lm1lc3NhZ2UpLGE9XCJcIn1lLmw9YStcIiBbXCIrZS5nZXRTdGF0dXMoKStcIl1cIixJdChlKX19ZmluYWxseXt3dChlKX19fWZ1bmN0aW9uIHd0KGUpe2lmKGUuYSl7RHQoZSk7dmFyIHQ9ZS5hLG89ZS5KWzBdP1I6bnVsbDtlLmE9bnVsbCxlLko9bnVsbCxXZShlLFwicmVhZHlcIik7dHJ5e3Qub25yZWFkeXN0YXRlY2hhbmdlPW99Y2F0Y2godCl7KGU9ZS5iKSYmcnQoZSxZZSxcIlByb2JsZW0gZW5jb3VudGVyZWQgcmVzZXR0aW5nIG9ucmVhZHlzdGF0ZWNoYW5nZTogXCIrdC5tZXNzYWdlKX19fWZ1bmN0aW9uIER0KGUpe2UuYSYmZS5JJiYoZS5hLm9udGltZW91dD1udWxsKSxlLncmJihtLmNsZWFyVGltZW91dChlLncpLGUudz1udWxsKX1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZS5hP2UuYS5yZWFkeVN0YXRlOjB9ZnVuY3Rpb24gQ3QoZSx0KXtpZihlLmEmJjQ9PUZ0KGUpKXJldHVybiBudWxsPT09KGU9ZS5hLmdldFJlc3BvbnNlSGVhZGVyKHQpKT92b2lkIDA6ZX1mdW5jdGlvbiBMdChlLHQpe3JldHVybiB0K1wiIFtcIitlLlArXCIgXCIrZS52K1wiIFwiK2UuZ2V0U3RhdHVzKCkrXCJdXCJ9KHI9VHQucHJvdG90eXBlKS5UPWZ1bmN0aW9uKCl7dm9pZCAwIT09RSYmdGhpcy5hJiYodGhpcy5sPVwiVGltZWQgb3V0IGFmdGVyIFwiK3RoaXMuaCtcIm1zLCBhYm9ydGluZ1wiLHRoaXMuZz04LG50KHRoaXMuYixMdCh0aGlzLHRoaXMubCkpLFdlKHRoaXMsXCJ0aW1lb3V0XCIpLHRoaXMuYWJvcnQoOCkpfSxyLmFib3J0PWZ1bmN0aW9uKGUpe3RoaXMuYSYmdGhpcy5jJiYobnQodGhpcy5iLEx0KHRoaXMsXCJBYm9ydGluZ1wiKSksdGhpcy5jPSExLHRoaXMuaT0hMCx0aGlzLmEuYWJvcnQoKSx0aGlzLmk9ITEsdGhpcy5nPWV8fDcsV2UodGhpcyxcImNvbXBsZXRlXCIpLFdlKHRoaXMsXCJhYm9ydFwiKSx3dCh0aGlzKSl9LHIuUj1mdW5jdGlvbigpe3RoaXMuS3x8KHRoaXMuTnx8dGhpcy5zfHx0aGlzLmk/T3QodGhpcyk6dGhpcy5XKCkpfSxyLlc9ZnVuY3Rpb24oKXtPdCh0aGlzKX0sci5nZXRTdGF0dXM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIDI8RnQodGhpcyk/dGhpcy5hLnN0YXR1czotMX1jYXRjaChlKXtyZXR1cm4tMX19O3ZhciBOdD17fSxqdD1udWxsO2Z1bmN0aW9uIEJ0KCl7aWYoIWp0KXtqdD17fTtmb3IodmFyIGU9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiLnNwbGl0KFwiXCIpLHQ9W1wiKy89XCIsXCIrL1wiLFwiLV89XCIsXCItXy5cIixcIi1fXCJdLG89MDs1Pm87bysrKXt2YXIgcj1lLmNvbmNhdCh0W29dLnNwbGl0KFwiXCIpKTtOdFtvXT1yO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcz1yW25dO3ZvaWQgMD09PWp0W3NdJiYoanRbc109bil9fX19dmFyIFV0PVtcImNvbnRlbnQtdHlwZVwiLFwiZ3JwYy1zdGF0dXNcIixcImdycGMtbWVzc2FnZVwiXTtmdW5jdGlvbiBQdChlKXt0aGlzLmE9ZS5aLHRoaXMubT1udWxsLHRoaXMuYj1bXSx0aGlzLmg9W10sdGhpcy5nPVtdLHRoaXMuZj1bXSx0aGlzLmM9W10sdGhpcy5sPSExLHRoaXMuaT0wLHRoaXMucz1uZXcgVzt2YXIgdD10aGlzO09lKHRoaXMuYSxcInJlYWR5c3RhdGVjaGFuZ2VcIiwoZnVuY3Rpb24oKXt2YXIgZT10LmE7aWYoZT1lLmE/ZS5hLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpOm51bGwpe2lmKDA9PShlPWUudG9Mb3dlckNhc2UoKSkubGFzdEluZGV4T2YoXCJhcHBsaWNhdGlvbi9ncnBjLXdlYi10ZXh0XCIsMCkpe2U9dC5hO3RyeXt2YXIgbz1lLmE/ZS5hLnJlc3BvbnNlVGV4dDpcIlwifWNhdGNoKHQpe250KGUuYixcIkNhbiBub3QgZ2V0IHJlc3BvbnNlVGV4dDogXCIrdC5tZXNzYWdlKSxvPVwiXCJ9aWYobz0oZT1vfHxcIlwiKS5sZW5ndGgtZS5sZW5ndGglNCwwPT0oZT1lLnN1YnN0cih0Lmksby10LmkpKS5sZW5ndGgpcmV0dXJuO3QuaT1vLGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbz0zKnQvNDtvJTM/bz1NYXRoLmZsb29yKG8pOnEoXCI9LlwiLGVbdC0xXSkmJihvPXEoXCI9LlwiLGVbdC0yXSk/by0yOm8tMSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkobyksbj0wO3JldHVybiBmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8odCl7Zm9yKDtyPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQocisrKSxuPWp0W29dO2lmKG51bGwhPW4pcmV0dXJuIG47aWYoIS9eW1xcc1xceGEwXSokLy50ZXN0KG8pKXRocm93IEVycm9yKFwiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogXCIrbyl9cmV0dXJuIHR9QnQoKTtmb3IodmFyIHI9MDs7KXt2YXIgbj1vKC0xKSxzPW8oMCksaT1vKDY0KSxhPW8oNjQpO2lmKDY0PT09YSYmLTE9PT1uKWJyZWFrO3Qobjw8MnxzPj40KSw2NCE9aSYmKHQoczw8NCYyNDB8aT4+MiksNjQhPWEmJnQoaTw8NiYxOTJ8YSkpfX0oZSwoZnVuY3Rpb24oZSl7cltuKytdPWV9KSksci5zdWJhcnJheSgwLG4pfShlKX1lbHNle2lmKDAhPWUubGFzdEluZGV4T2YoXCJhcHBsaWNhdGlvbi9ncnBjXCIsMCkpcmV0dXJuIHZvaWQgVnQodCxuZXcgaigyLFwiVW5rbm93biBDb250ZW50LXR5cGUgcmVjZWl2ZWQuXCIpKTtlPW5ldyBVaW50OEFycmF5KGZ1bmN0aW9uKGUpe3RyeXtpZighZS5hKXJldHVybiBudWxsO2lmKFwicmVzcG9uc2VcImluIGUuYSlyZXR1cm4gZS5hLnJlc3BvbnNlO3N3aXRjaChlLm0pe2Nhc2UgUnQ6Y2FzZVwidGV4dFwiOnJldHVybiBlLmEucmVzcG9uc2VUZXh0O2Nhc2VcImFycmF5YnVmZmVyXCI6aWYoXCJtb3pSZXNwb25zZUFycmF5QnVmZmVyXCJpbiBlLmEpcmV0dXJuIGUuYS5tb3pSZXNwb25zZUFycmF5QnVmZmVyfXZhciB0PWUuYjtyZXR1cm4gdCYmcnQodCxZZSxcIlJlc3BvbnNlIHR5cGUgXCIrZS5tK1wiIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBicm93c2VyXCIpLG51bGx9Y2F0Y2godCl7cmV0dXJuIG50KGUuYixcIkNhbiBub3QgZ2V0IHJlc3BvbnNlOiBcIit0Lm1lc3NhZ2UpLG51bGx9fSh0LmEpKX1vPW51bGw7dHJ5e289ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKGUpe2EuZisrLGEuYT0oYS5hPDw4KStlLDQ9PWEuZiYmKGEuYj0yLGEuZz0wLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P2EuYz1uZXcgVWludDhBcnJheShhLmEpOmEuYz1BcnJheShhLmEpLDA9PWEuYSYmbigpKX1mdW5jdGlvbiByKGUpe2EuY1thLmcrK109ZSxhLmc9PWEuYSYmbigpfWZ1bmN0aW9uIG4oKXt2YXIgZT17fTtlW2EuaF09YS5jLGEuaS5wdXNoKGUpLGEuYj1WfXZhciBzLGksYT1lLGc9MDtmb3Iocz10IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIEFycmF5P3Q6bmV3IFVpbnQ4QXJyYXkodCk7ZzxzLmxlbmd0aDspe3N3aXRjaChhLmIpe2Nhc2UgMzp6KGEscyxnLFwic3RyZWFtIGFscmVhZHkgYnJva2VuXCIpO2JyZWFrO2Nhc2UgVjowPT0oaT1zW2ddKXx8aT09eD9hLmg9aTp6KGEscyxnLFwiaW52YWxpZCBmcmFtZSBieXRlXCIpLGEuYj0xLGEuYT0wLGEuZj0wO2JyZWFrO2Nhc2UgMTpvKHNbZ10pO2JyZWFrO2Nhc2UgMjpyKHNbZ10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXCJ1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZTogXCIrYS5iKX1hLm0rKyxnKyt9cmV0dXJuIGU9YS5pLGEuaT1bXSwwPGUubGVuZ3RoP2U6bnVsbH0odC5zLGUpfWNhdGNoKGUpe1Z0KHQsbmV3IGooMixcIkVycm9yIGluIHBhcnNpbmcgcmVzcG9uc2UgYm9keVwiKSl9aWYobylmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXtpZigwIGluIG9bZV0pe3ZhciByPW9bZV1bMF07aWYocil7dmFyIG49dm9pZCAwO3RyeXtuPXQubShyKX1jYXRjaChlKXtWdCh0LG5ldyBqKDEzLFwiRXJyb3Igd2hlbiBkZXNlcmlhbGl6aW5nIHJlc3BvbnNlIGRhdGE6IFwiK24pKX1pZihuKXtyPXQ7Zm9yKHZhciBzPTA7czxyLmIubGVuZ3RoO3MrKylyLmJbc10obil9fX1pZih4IGluIG9bZV0mJjA8b1tlXVt4XS5sZW5ndGgpe2ZvcihyPVwiXCIsbj0wO248b1tlXVt4XS5sZW5ndGg7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUob1tlXVt4XVtuXSk7Zm9yKHI9ci50cmltKCkuc3BsaXQoXCJcXHJcXG5cIiksbj17fSxzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBpPXJbc10uaW5kZXhPZihcIjpcIik7bltyW3NdLnN1YnN0cmluZygwLGkpLnRyaW0oKV09cltzXS5zdWJzdHJpbmcoaSsxKS50cmltKCl9cj1uLG49MCxzPVwiXCIsXCJncnBjLXN0YXR1c1wiaW4gciYmKG49TnVtYmVyKHJbXCJncnBjLXN0YXR1c1wiXSksZGVsZXRlIHJbXCJncnBjLXN0YXR1c1wiXSksXCJncnBjLW1lc3NhZ2VcImluIHImJihzPXJbXCJncnBjLW1lc3NhZ2VcIl0sZGVsZXRlIHJbXCJncnBjLW1lc3NhZ2VcIl0pLFZ0KHQsbmV3IGoobixzLHIpKX19fX0pKSxPZSh0aGlzLmEsXCJjb21wbGV0ZVwiLChmdW5jdGlvbigpe3ZhciBlPXQuYS5nLG89MixyPVwiXCIsbj17fSxzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2U9KGUuYSYmND09RnQoZSkmJmUuYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8XCJcIikuc3BsaXQoXCJcXHJcXG5cIik7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYoIS9eW1xcc1xceGEwXSokLy50ZXN0KGVbb10pKXt2YXIgcj1YKGVbb10pLG49clswXTtpZihcInN0cmluZ1wiPT10eXBlb2Yocj1yWzFdKSl7cj1yLnRyaW0oKTt2YXIgcz10W25dfHxbXTt0W25dPXMscy5wdXNoKHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbyxyPXt9O2ZvcihvIGluIGUpcltvXT10LmNhbGwodm9pZCAwLGVbb10sbyxlKTtyZXR1cm4gcn0odCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuam9pbihcIiwgXCIpfSkpfSh0LmEpO2lmKE9iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe1V0LmluY2x1ZGVzKGUpfHwobltlXT1zW2VdKX0pKSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbz0wO288ZS5nLmxlbmd0aDtvKyspZS5nW29dKHQpfSh0LG4pLDAhPWUpe3N3aXRjaChlKXtjYXNlIDc6bz0xMDticmVhaztjYXNlIDg6bz00O2JyZWFrO2Nhc2UgNjpvPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDIwMDpyZXR1cm4gMDtjYXNlIDQwMDpyZXR1cm4gMztjYXNlIDQwMTpyZXR1cm4gMTY7Y2FzZSA0MDM6cmV0dXJuIDc7Y2FzZSA0MDQ6cmV0dXJuIDU7Y2FzZSA0MDk6cmV0dXJuIDEwO2Nhc2UgNDEyOnJldHVybiA5O2Nhc2UgNDI5OnJldHVybiA4O2Nhc2UgNDk5OnJldHVybiAxO2Nhc2UgNTAwOmRlZmF1bHQ6cmV0dXJuIDI7Y2FzZSA1MDE6cmV0dXJuIDEyO2Nhc2UgNTAzOnJldHVybiAxNDtjYXNlIDUwNDpyZXR1cm4gNH19KHQuYS5nZXRTdGF0dXMoKSk7YnJlYWs7ZGVmYXVsdDpvPTE0fTEwPT1vJiZ0Lmx8fFZ0KHQsbmV3IGoobyxmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVyblwiTm8gRXJyb3JcIjtjYXNlIDE6cmV0dXJuXCJBY2Nlc3MgZGVuaWVkIHRvIGNvbnRlbnQgZG9jdW1lbnRcIjtjYXNlIDI6cmV0dXJuXCJGaWxlIG5vdCBmb3VuZFwiO2Nhc2UgMzpyZXR1cm5cIkZpcmVmb3ggc2lsZW50bHkgZXJyb3JlZFwiO2Nhc2UgNDpyZXR1cm5cIkFwcGxpY2F0aW9uIGN1c3RvbSBlcnJvclwiO2Nhc2UgNTpyZXR1cm5cIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZFwiO2Nhc2UgNjpyZXR1cm5cIkh0dHAgcmVzcG9uc2UgYXQgNDAwIG9yIDUwMCBsZXZlbFwiO2Nhc2UgNzpyZXR1cm5cIlJlcXVlc3Qgd2FzIGFib3J0ZWRcIjtjYXNlIDg6cmV0dXJuXCJSZXF1ZXN0IHRpbWVkIG91dFwiO2Nhc2UgOTpyZXR1cm5cIlRoZSByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlIG9mZmxpbmVcIjtkZWZhdWx0OnJldHVyblwiVW5yZWNvZ25pemVkIGVycm9yIGNvZGVcIn19KGUpKSl9ZWxzZSBlPSExLFwiZ3JwYy1zdGF0dXNcImluIHMmJihvPU51bWJlcihDdCh0LmEsXCJncnBjLXN0YXR1c1wiKSksXCJncnBjLW1lc3NhZ2VcImluIHMmJihyPUN0KHQuYSxcImdycGMtbWVzc2FnZVwiKSksMCE9byYmKFZ0KHQsbmV3IGoobyxyfHxcIlwiLHMpKSxlPSEwKSksZXx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmMubGVuZ3RoO3QrKyllLmNbdF0oKX0odCl9KSl9ZnVuY3Rpb24gV3QoZSx0KXstMTwodD1lLmluZGV4T2YodCkpJiZlLnNwbGljZSh0LDEpfWZ1bmN0aW9uIFZ0KGUsdCl7aWYoMCE9dC5jb2RlKWZvcih2YXIgbz1uZXcgaih0LmNvZGUsZGVjb2RlVVJJQ29tcG9uZW50KHQubWVzc2FnZXx8XCJcIiksdC5tZXRhZGF0YSkscj0wO3I8ZS5mLmxlbmd0aDtyKyspZS5mW3JdKG8pO2Zvcih0PXtjb2RlOnQuY29kZSxkZXRhaWxzOmRlY29kZVVSSUNvbXBvbmVudCh0Lm1lc3NhZ2V8fFwiXCIpLG1ldGFkYXRhOnQubWV0YWRhdGF9LG89MDtvPGUuaC5sZW5ndGg7bysrKWUuaFtvXSh0KX1mdW5jdGlvbiB4dChlLHQpe2U9dm9pZCAwPT09ZT97fTplLHRoaXMuYT1lLmZvcm1hdHx8VChcImZvcm1hdFwiLGUpfHxcInRleHRcIix0aGlzLmc9ZS5hYXx8VChcInN1cHByZXNzQ29yc1ByZWZsaWdodFwiLGUpfHwhMSx0aGlzLmY9ZS53aXRoQ3JlZGVudGlhbHN8fFQoXCJ3aXRoQ3JlZGVudGlhbHNcIixlKXx8ITEsdGhpcy5iPWUuJHx8VChcInN0cmVhbUludGVyY2VwdG9yc1wiLGUpfHxbXSx0aGlzLmg9ZS5iYXx8VChcInVuYXJ5SW50ZXJjZXB0b3JzXCIsZSl8fFtdLHRoaXMuYz10fHxudWxsfWZ1bmN0aW9uIHp0KGUsdCxvKXt2YXIgcj10LmdldE1ldGhvZERlc2NyaXB0b3IoKSxuPW8rci5uYW1lOyhvPWUuYz9lLmM6bmV3IFR0KS5NPWUuZjt2YXIgcz1uZXcgUHQoe1o6b30pO3MubT1yLmI7dmFyIGk9dC5nZXRNZXRhZGF0YSgpO2ZvcihhIGluIGkpby5oZWFkZXJzLnNldChhLGlbYV0pO2lmKFwidGV4dFwiPT1lLmE/KG8uaGVhZGVycy5zZXQoXCJDb250ZW50LVR5cGVcIixcImFwcGxpY2F0aW9uL2dycGMtd2ViLXRleHRcIiksby5oZWFkZXJzLnNldChcIkFjY2VwdFwiLFwiYXBwbGljYXRpb24vZ3JwYy13ZWItdGV4dFwiKSk6by5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLFwiYXBwbGljYXRpb24vZ3JwYy13ZWIrcHJvdG9cIiksby5oZWFkZXJzLnNldChcIlgtVXNlci1BZ2VudFwiLFwiZ3JwYy13ZWItamF2YXNjcmlwdC8wLjFcIiksby5oZWFkZXJzLnNldChcIlgtR3JwYy1XZWJcIixcIjFcIiksby5oZWFkZXJzLmhhcyhcImRlYWRsaW5lXCIpKXt2YXIgYT1OdW1iZXIoby5oZWFkZXJzLmdldChcImRlYWRsaW5lXCIpKTthPU1hdGguY2VpbChhLShuZXcgRGF0ZSkuZ2V0VGltZSgpKSxvLmhlYWRlcnMuZGVsZXRlKFwiZGVhZGxpbmVcIiksMS8wPT09YSYmKGE9MCksMDxhJiYoby5oZWFkZXJzLnNldChcImdycGMtdGltZW91dFwiLGErXCJtXCIpLG8uaD1NYXRoLm1heCgwLE1hdGgubWF4KDFlMyxNYXRoLmNlaWwoMS4xKmEpKSkpfWlmKGUuZyl7YT17fTtmb3IodmFyIGc9YygoaT1vLmhlYWRlcnMpLmtleXMoKSkscD1nLm5leHQoKTshcC5kb25lO3A9Zy5uZXh0KCkpYVtwPXAudmFsdWVdPWkuZ2V0KHApO28uaGVhZGVycy5jbGVhcigpO2U6e2ZvcihsIGluIGEpe3ZhciBsPSExO2JyZWFrIGV9bD0hMH1sfHwoYT1mdW5jdGlvbihlKXt2YXIgdD1cIlwiO3JldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgbyBpbiBlKXQuY2FsbCh2b2lkIDAsZVtvXSxvLGUpfShlLChmdW5jdGlvbihlLG8pe3QrPW8sdCs9XCI6XCIsdCs9ZSx0Kz1cIlxcclxcblwifSkpLHR9KGEpLFwic3RyaW5nXCI9PXR5cGVvZiBuPyhsPWVuY29kZVVSSUNvbXBvbmVudChcIiRodHRwSGVhZGVyc1wiKSwobCs9YT1udWxsIT1hP1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoYSkpOlwiXCIpJiYoMD4oYT1uLmluZGV4T2YoXCIjXCIpKSYmKGE9bi5sZW5ndGgpLDA+KGk9bi5pbmRleE9mKFwiP1wiKSl8fGk+YT8oaT1hLGc9XCJcIik6Zz1uLnN1YnN0cmluZyhpKzEsYSksYT0obj1bbi5zdWJzdHIoMCxpKSxnLG4uc3Vic3RyKGEpXSlbMV0sblsxXT1sP2E/YStcIiZcIitsOmw6YSxuPW5bMF0rKG5bMV0/XCI/XCIrblsxXTpcIlwiKStuWzJdKSk6bi5hKFwiJGh0dHBIZWFkZXJzXCIsYSkpfWZvcihyPSh0PSgwLHIuYSkodC5nZXRSZXF1ZXN0TWVzc2FnZSgpKSkubGVuZ3RoLGw9WzAsMCwwLDBdLGE9bmV3IFVpbnQ4QXJyYXkoNStyKSxpPTM7MDw9aTtpLS0pbFtpXT1yJTI1NixyPj4+PTg7aWYoYS5zZXQobmV3IFVpbnQ4QXJyYXkobCksMSksYS5zZXQodCw1KSx0PWEsXCJ0ZXh0XCI9PWUuYSl7dmFyIHU7Zm9yKGU9dCx2b2lkIDA9PT11JiYodT0wKSxCdCgpLHU9TnRbdV0sdD1BcnJheShNYXRoLmZsb29yKGUubGVuZ3RoLzMpKSxyPXVbNjRdfHxcIlwiLGw9YT0wO2E8ZS5sZW5ndGgtMjthKz0zKXtwPWVbYV07dmFyIGQ9ZVthKzFdO2c9ZVthKzJdLGk9dVtwPj4yXSxwPXVbKDMmcCk8PDR8ZD4+NF0sZD11WygxNSZkKTw8MnxnPj42XSxnPXVbNjMmZ10sdFtsKytdPWkrcCtkK2d9c3dpdGNoKGk9MCxnPXIsZS5sZW5ndGgtYSl7Y2FzZSAyOmc9dVsoMTUmKGk9ZVthKzFdKSk8PDJdfHxyO2Nhc2UgMTplPWVbYV0sdFtsXT11W2U+PjJdK3VbKDMmZSk8PDR8aT4+NF0rZytyfXQ9dC5qb2luKFwiXCIpfWVsc2VcImJpbmFyeVwiPT1lLmEmJihvLm09XCJhcnJheWJ1ZmZlclwiKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG8pe2lmKGUuYSl0aHJvdyBFcnJvcihcIltnb29nLm5ldC5YaHJJb10gT2JqZWN0IGlzIGFjdGl2ZSB3aXRoIGFub3RoZXIgcmVxdWVzdD1cIitlLnYrXCI7IG5ld1VyaT1cIit0KTtlLnY9dCxlLmw9XCJcIixlLmc9MCxlLlA9XCJQT1NUXCIsZS5MPSExLGUuYz0hMCxlLmE9ZS5DP2d0KGUuQyk6Z3QoR2UpLGUuSj1lLkM/aXQoZS5DKTppdChHZSksZS5hLm9ucmVhZHlzdGF0ZWNoYW5nZT13KGUuUixlKTt0cnl7bnQoZS5iLEx0KGUsXCJPcGVuaW5nIFhoclwiKSksZS5OPSEwLGUuYS5vcGVuKFwiUE9TVFwiLFN0cmluZyh0KSwhMCksZS5OPSExfWNhdGNoKHQpe3JldHVybiBudChlLmIsTHQoZSxcIkVycm9yIG9wZW5pbmcgWGhyOiBcIit0Lm1lc3NhZ2UpKSx2b2lkIE10KGUsdCl9dD1vfHxcIlwiO3ZhciByPShvPWUuaGVhZGVycy5jbG9uZSgpKS5HKCkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuXCJjb250ZW50LXR5cGVcIj09ZS50b0xvd2VyQ2FzZSgpfSkpLG49bS5Gb3JtRGF0YSYmdCBpbnN0YW5jZW9mIG0uRm9ybURhdGE7ISgwPD1IKEF0LFwiUE9TVFwiKSl8fHJ8fG58fG8uc2V0KFwiQ29udGVudC1UeXBlXCIsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOFwiKSxvLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dGhpcy5hLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pLGUpLGUubSYmKGUuYS5yZXNwb25zZVR5cGU9ZS5tKSxcIndpdGhDcmVkZW50aWFsc1wiaW4gZS5hJiZlLmEud2l0aENyZWRlbnRpYWxzIT09ZS5NJiYoZS5hLndpdGhDcmVkZW50aWFscz1lLk0pO3RyeXtEdChlKSwwPGUuaCYmKGUuST1mdW5jdGlvbihlKXtyZXR1cm4gb2UmJnVlKCkmJlwibnVtYmVyXCI9PXR5cGVvZiBlLnRpbWVvdXQmJnZvaWQgMCE9PWUub250aW1lb3V0fShlLmEpLG50KGUuYixMdChlLFwiV2lsbCBhYm9ydCBhZnRlciBcIitlLmgrXCJtcyBpZiBpbmNvbXBsZXRlLCB4aHIyIFwiK2UuSSkpLGUuST8oZS5hLnRpbWVvdXQ9ZS5oLGUuYS5vbnRpbWVvdXQ9dyhlLlQsZSkpOmUudz14ZShlLlQsZS5oLGUpKSxudChlLmIsTHQoZSxcIlNlbmRpbmcgcmVxdWVzdFwiKSksZS5zPSEwLGUuYS5zZW5kKHQpLGUucz0hMX1jYXRjaCh0KXtudChlLmIsTHQoZSxcIlNlbmQgZXJyb3I6IFwiK3QubWVzc2FnZSkpLE10KGUsdCl9fShvLG4sdCksc31mdW5jdGlvbiBrdChlLHQsbyl7dmFyIHI9ITEsbj1udWxsLHM9ITE7ZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oZSl7cj0hMCxuPWV9KSksZS5vbihcImVycm9yXCIsKGZ1bmN0aW9uKGUpezA9PWUuY29kZXx8c3x8KHM9ITAsdChlLG51bGwpKX0pKSxlLm9uKFwic3RhdHVzXCIsKGZ1bmN0aW9uKGUpezA9PWUuY29kZXx8cz9vJiZ0KG51bGwsbnVsbCxlKToocz0hMCx0KHtjb2RlOmUuY29kZSxtZXNzYWdlOmUuZGV0YWlscyxtZXRhZGF0YTplLm1ldGFkYXRhfSxudWxsKSl9KSksbyYmZS5vbihcIm1ldGFkYXRhXCIsKGZ1bmN0aW9uKGUpe3QobnVsbCxudWxsLG51bGwsZSl9KSksZS5vbihcImVuZFwiLChmdW5jdGlvbigpe3N8fChyP3QobnVsbCxuKTp0KHtjb2RlOjIsbWVzc2FnZTpcIkluY29tcGxldGUgcmVzcG9uc2VcIn0pKSxvJiZ0KG51bGwsbnVsbCl9KSl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbz1lO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW87bz1mdW5jdGlvbihvKXtyZXR1cm4gZS5pbnRlcmNlcHQobyx0KX19KSksb31QdC5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImRhdGFcIj09ZT90aGlzLmIucHVzaCh0KTpcInN0YXR1c1wiPT1lP3RoaXMuaC5wdXNoKHQpOlwibWV0YWRhdGFcIj09ZT90aGlzLmcucHVzaCh0KTpcImVuZFwiPT1lP3RoaXMuYy5wdXNoKHQpOlwiZXJyb3JcIj09ZSYmdGhpcy5mLnB1c2godCksdGhpc30sUHQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJkYXRhXCI9PWU/V3QodGhpcy5iLHQpOlwic3RhdHVzXCI9PWU/V3QodGhpcy5oLHQpOlwibWV0YWRhdGFcIj09ZT9XdCh0aGlzLmcsdCk6XCJlbmRcIj09ZT9XdCh0aGlzLmMsdCk6XCJlcnJvclwiPT1lJiZXdCh0aGlzLmYsdCksdGhpc30sUHQucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMubD0hMCx0aGlzLmEuYWJvcnQoKX0sUHQucHJvdG90eXBlLmNhbmNlbD1QdC5wcm90b3R5cGUuY2FuY2VsLFB0LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1QdC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsUHQucHJvdG90eXBlLm9uPVB0LnByb3RvdHlwZS5vbix4dC5wcm90b3R5cGUuWD1mdW5jdGlvbihlLHQsbyxyLG4pe3ZhciBzPXRoaXMsaT1lLnN1YnN0cigwLGUubGVuZ3RoLXIubmFtZS5sZW5ndGgpO3JldHVybiBrdChlPUh0KChmdW5jdGlvbihlKXtyZXR1cm4genQocyxlLGkpfSksdGhpcy5iKS5jYWxsKHRoaXMsTihyLHQsbykpLG4sITEpLG5ldyBCKGUpfSx4dC5wcm90b3R5cGUuUz1mdW5jdGlvbihlLHQsbyxyKXt2YXIgbj10aGlzLHM9ZS5zdWJzdHIoMCxlLmxlbmd0aC1yLm5hbWUubGVuZ3RoKTtyZXR1cm4gSHQoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxvKXt2YXIgcixpLGE7a3QoenQobixlLHMpLChmdW5jdGlvbihuLHMsZyxwKXtuP28obik6cz9hPXM6Zz9pPWc6cD9yPXA6KG49ZS5nZXRNZXRob2REZXNjcmlwdG9yKCksdChuZXcgTChhLG4scz12b2lkIDA9PT0ocz1yKT97fTpzLHZvaWQgMD09PWk/bnVsbDppKSkpfSksITApfSkpfSksdGhpcy5oKS5jYWxsKHRoaXMsTihyLHQsbykpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFJlc3BvbnNlTWVzc2FnZSgpfSkpfSx4dC5wcm90b3R5cGUudW5hcnlDYWxsPWZ1bmN0aW9uKGUsdCxvLHIpe3JldHVybiB0aGlzLlMoZSx0LG8scil9LHh0LnByb3RvdHlwZS5ZPWZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBuPXRoaXMscz1lLnN1YnN0cigwLGUubGVuZ3RoLXIubmFtZS5sZW5ndGgpO3JldHVybiBIdCgoZnVuY3Rpb24oZSl7cmV0dXJuIHp0KG4sZSxzKX0pLHRoaXMuYikuY2FsbCh0aGlzLE4ocix0LG8pKX0seHQucHJvdG90eXBlLnNlcnZlclN0cmVhbWluZz14dC5wcm90b3R5cGUuWSx4dC5wcm90b3R5cGUudW5hcnlDYWxsPXh0LnByb3RvdHlwZS51bmFyeUNhbGwseHQucHJvdG90eXBlLnRoZW5hYmxlQ2FsbD14dC5wcm90b3R5cGUuUyx4dC5wcm90b3R5cGUucnBjQ2FsbD14dC5wcm90b3R5cGUuWCxlLmV4cG9ydHMuR3JwY1dlYkNsaWVudEJhc2U9eHQsZS5leHBvcnRzLlN0YXR1c0NvZGU9e09LOjAsQ0FOQ0VMTEVEOjEsVU5LTk9XTjoyLElOVkFMSURfQVJHVU1FTlQ6MyxERUFETElORV9FWENFRURFRDo0LE5PVF9GT1VORDo1LEFMUkVBRFlfRVhJU1RTOjYsUEVSTUlTU0lPTl9ERU5JRUQ6NyxVTkFVVEhFTlRJQ0FURUQ6MTYsUkVTT1VSQ0VfRVhIQVVTVEVEOjgsRkFJTEVEX1BSRUNPTkRJVElPTjo5LEFCT1JURUQ6MTAsT1VUX09GX1JBTkdFOjExLFVOSU1QTEVNRU5URUQ6MTIsSU5URVJOQUw6MTMsVU5BVkFJTEFCTEU6MTQsREFUQV9MT1NTOjE1fSxlLmV4cG9ydHMuTWV0aG9kRGVzY3JpcHRvcj1mdW5jdGlvbihlLHQsbyxyLG4scyl7dGhpcy5uYW1lPWUsdGhpcy5hPW4sdGhpcy5iPXN9LGUuZXhwb3J0cy5NZXRob2RUeXBlPXtVTkFSWTpcInVuYXJ5XCIsU0VSVkVSX1NUUkVBTUlORzpcInNlcnZlcl9zdHJlYW1pbmdcIixCSURJX1NUUkVBTUlORzpcImJpZGlfc3RyZWFtaW5nXCJ9fX0sX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fPXt9O2Z1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18oZSl7dmFyIHQ9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbz1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bZV09e2V4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW2VdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pLG8uZXhwb3J0c31fX3dlYnBhY2tfcmVxdWlyZV9fLmQ9KGUsdCk9Pntmb3IodmFyIG8gaW4gdClfX3dlYnBhY2tfcmVxdWlyZV9fLm8odCxvKSYmIV9fd2VicGFja19yZXF1aXJlX18ubyhlLG8pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHtlbnVtZXJhYmxlOiEwLGdldDp0W29dfSl9LF9fd2VicGFja19yZXF1aXJlX18uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLF9fd2VicGFja19yZXF1aXJlX18ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksX193ZWJwYWNrX3JlcXVpcmVfXy5yPWU9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgX193ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se0VudGl0eTooKT0+aSxFbnRpdHlBQ0k6KCk9PmQsRW50aXR5QUNMOigpPT55LFByb3BlcnR5OigpPT5yLFRyYW5zYWN0aW9uU2VydmljZTooKT0+TX0pO3ZhciBlPV9fd2VicGFja19yZXF1aXJlX18oMzQ3KTtmdW5jdGlvbiB0KGUsdCl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb107ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiBvKHQpe3ZhciBvPWUuaC52MS5TY2FsYXJWYWx1ZS5TY2FsYXJWYWx1ZUNhc2U7c3dpdGNoKHQuZ2V0U2NhbGFyVmFsdWVDYXNlKCkpe2Nhc2Ugby5TQ0FMQVJfVkFMVUVfTk9UX1NFVDpyZXR1cm47Y2FzZSBvLklOVEVHRVJfVkFMVUU6cmV0dXJuIHQuZ2V0SW50ZWdlclZhbHVlKCk7Y2FzZSBvLkRPVUJMRV9WQUxVRTpyZXR1cm4gdC5nZXREb3VibGVWYWx1ZSgpO2Nhc2Ugby5CT09MRUFOX1ZBTFVFOnJldHVybiB0LmdldEJvb2xlYW5WYWx1ZSgpO2Nhc2Ugby5TVFJJTkdfVkFMVUU6cmV0dXJuIHQuZ2V0U3RyaW5nVmFsdWUoKTtjYXNlIG8uU1BFQ0lBTF9WQUxVRTpyZXR1cm4gdC5nZXRTcGVjaWFsVmFsdWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVua293biB2YWx1ZSB0eXBlIFwiLmNvbmNhdCh0LmdldFNjYWxhclZhbHVlQ2FzZSgpLFwiLlwiKSl9fXZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHIpLHRoaXMud3JhcHBlZFByb3BlcnR5PWV9dmFyIG4scztyZXR1cm4gbj1yLChzPVt7a2V5OlwiZ2V0TmFtZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZFByb3BlcnR5LmdldE5hbWUoKX19LHtrZXk6XCJnZXRJZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZFByb3BlcnR5LmdldElkKCl9fSx7a2V5OlwiZ2V0VW5pdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZFByb3BlcnR5LmdldFVuaXQoKX19LHtrZXk6XCJnZXRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53cmFwcGVkUHJvcGVydHkuZ2V0VmFsdWUoKTtpZih2b2lkIDAhPT10KXt2YXIgcj1lLmgudjEuVmFsdWUuVmFsdWVDYXNlO3N3aXRjaCh0LmdldFZhbHVlQ2FzZSgpKXtjYXNlIHIuVkFMVUVfTk9UX1NFVDpyZXR1cm47Y2FzZSByLlNDQUxBUl9WQUxVRTpyZXR1cm4gbyh0LmdldFNjYWxhclZhbHVlKCkpO2Nhc2Ugci5MSVNUX1ZBTFVFUzpyZXR1cm4gdC5nZXRMaXN0VmFsdWVzKCkuZ2V0VmFsdWVzTGlzdCgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHZhbHVlIHR5cGUgXCIuY29uY2F0KHQuZ2V0VmFsdWVDYXNlKCksXCIuXCIpKX19fX0se2tleTpcImlzTGlzdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZFByb3BlcnR5LmdldERhdGFUeXBlKCkuZ2V0RGF0YVR5cGVDYXNlKCk9PT1lLmgudjEuRGF0YVR5cGUuRGF0YVR5cGVDYXNlLkxJU1RfREFUQV9UWVBFfX0se2tleTpcImlzUmVmZXJlbmNlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndyYXBwZWRQcm9wZXJ0eS5nZXREYXRhVHlwZSgpLG89dC5nZXREYXRhVHlwZUNhc2UoKTtyZXR1cm4gbz09PWUuaC52MS5EYXRhVHlwZS5EYXRhVHlwZUNhc2UuUkVGRVJFTkNFX0RBVEFfVFlQRXx8bz09PWUuaC52MS5EYXRhVHlwZS5EYXRhVHlwZUNhc2UuTElTVF9EQVRBX1RZUEUmJnQuZ2V0TGlzdERhdGFUeXBlKCkuZ2V0TGlzdERhdGFUeXBlQ2FzZSgpPT09ZS5oLnYxLkxpc3REYXRhVHlwZS5MaXN0RGF0YVR5cGVDYXNlLlJFRkVSRU5DRV9EQVRBX1RZUEV9fV0pJiZ0KG4ucHJvdG90eXBlLHMpLHJ9KCk7ZnVuY3Rpb24gbihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbz0wLHI9bmV3IEFycmF5KHQpO288dDtvKyspcltvXT1lW29dO3JldHVybiByfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHI9dFtvXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpLHRoaXMud3JhcHBlZEVudGl0eT1lfXZhciBvLGk7cmV0dXJuIG89dCwoaT1be2tleTpcImdldERlc2NyaXB0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwcGVkRW50aXR5LmdldERlc2NyaXB0aW9uKCl9fSx7a2V5OlwiZ2V0RmlsZVBhdGhcIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmlzRmlsZSgpKXRocm93IG5ldyBFcnJvcihcIk9ubHkgRklMRSBlbnRpdGllcyBjYW4gaGF2ZSBhIGZpbGUgcGF0aC5cIik7cmV0dXJuIHRoaXMud3JhcHBlZEVudGl0eS5nZXRGaWxlRGVzY3JpcHRvcigpLmdldFBhdGgoKX19LHtrZXk6XCJnZXRJZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3JhcHBlZEVudGl0eS5nZXRJZCgpfX0se2tleTpcImdldE5hbWVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRFbnRpdHkuZ2V0TmFtZSgpfX0se2tleTpcImdldFBhcmVudHNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRFbnRpdHkuZ2V0UGFyZW50c0xpc3QoKX19LHtrZXk6XCJnZXRQcm9wZXJ0aWVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwcGVkRW50aXR5LmdldFByb3BlcnRpZXNMaXN0KCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9KSl9fSx7a2V5OlwiZ2V0UHJvcGVydHlcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFByb3BlcnRpZXMoKTtpZih0KXt2YXIgbyxyPWZ1bmN0aW9uKGUsdCl7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZighbyl7aWYoQXJyYXkuaXNBcnJheShlKXx8KG89ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbihlLHQpO3ZhciBvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09byYmZS5jb25zdHJ1Y3RvciYmKG89ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09b3x8XCJTZXRcIj09PW8/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09b3x8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobyk/bihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXtvJiYoZT1vKTt2YXIgcj0wLHM9ZnVuY3Rpb24oKXt9O3JldHVybntzLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjpzfX10aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9dmFyIGksYT0hMCxnPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bz1vLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1vLm5leHQoKTtyZXR1cm4gYT1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtnPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXthfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGcpdGhyb3cgaX19fX0odCk7dHJ5e2ZvcihyLnMoKTshKG89ci5uKCkpLmRvbmU7KXt2YXIgcz1vLnZhbHVlO2lmKHMuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHN9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19fSx7a2V5OlwiZ2V0Um9sZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvPWUuaC52MS5FbnRpdHlSb2xlO3N3aXRjaCh0KXtjYXNlIG8uRU5USVRZX1JPTEVfVU5TUEVDSUZJRUQ6cmV0dXJuO2Nhc2Ugby5FTlRJVFlfUk9MRV9SRUNPUkRfVFlQRTpyZXR1cm5cIlJFQ09SRF9UWVBFXCI7Y2FzZSBvLkVOVElUWV9ST0xFX1JFQ09SRDpyZXR1cm5cIlJFQ09SRFwiO2Nhc2Ugby5FTlRJVFlfUk9MRV9QUk9QRVJUWTpyZXR1cm5cIlBST1BFUlRZXCI7Y2FzZSBvLkVOVElUWV9ST0xFX0ZJTEU6cmV0dXJuXCJGSUxFXCI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHJvbGUgXCIuY29uY2F0KHQsXCIuXCIpKX19KHRoaXMud3JhcHBlZEVudGl0eS5nZXRSb2xlKCkpfX0se2tleTpcImlzUmVjb3JkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwcGVkRW50aXR5LmdldFJvbGUoKT09PWUuaC52MS5FbnRpdHlSb2xlLkVOVElUWV9ST0xFX1JFQ09SRH19LHtrZXk6XCJpc0ZpbGVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZWRFbnRpdHkuZ2V0Um9sZSgpPT09ZS5oLnYxLkVudGl0eVJvbGUuRU5USVRZX1JPTEVfRklMRX19XSkmJnMoby5wcm90b3R5cGUsaSksdH0oKTtmdW5jdGlvbiBhKGUsdCl7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZighbyl7aWYoQXJyYXkuaXNBcnJheShlKXx8KG89ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZyhlLHQpO3ZhciBvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09byYmZS5jb25zdHJ1Y3RvciYmKG89ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09b3x8XCJTZXRcIj09PW8/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09b3x8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobyk/ZyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXtvJiYoZT1vKTt2YXIgcj0wLG49ZnVuY3Rpb24oKXt9O3JldHVybntzOm4sbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOm59fXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX12YXIgcyxpPSEwLGE9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtvPW8uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW8ubmV4dCgpO3JldHVybiBpPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2E9ITAscz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBzfX19fWZ1bmN0aW9uIGcoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG89MCxyPW5ldyBBcnJheSh0KTtvPHQ7bysrKXJbb109ZVtvXTtyZXR1cm4gcn1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb107ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1mdW5jdGlvbiB1KGUsdCxvKXtyZXR1cm4gdCYmbChlLnByb3RvdHlwZSx0KSxvJiZsKGUsbyksZX12YXIgYyxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbz10LnJvbGUscj10LmdyYW50LG49dC5wcmlvcml0eSxzPXQucGVybWlzc2lvbnMsaT10LmNhcGFiaWxpdGllcztwKHRoaXMsZSksdGhpcy5yb2xlPW8sdGhpcy5ncmFudD1yLHRoaXMucHJpb3JpdHk9bix0aGlzLnBlcm1pc3Npb25zPXN8fHtyZXRyaWV2ZV9lbnRpdHk6ITEscmV0cmlldmVfYWNsOiExLHJldHJpZXZlX2hpc3Rvcnk6ITEscmV0cmlldmVfb3duZXI6ITEscmV0cmlldmVfZmlsZTohMSxkZWxldGVfZW50aXR5OiExLGVkaXRfYWNsOiExLHVwZGF0ZV9kZXNjcmlwdGlvbjohMSx1cGRhdGVfdmFsdWU6ITEsdXBkYXRlX3JvbGU6ITEsdXBkYXRlX3JlbW92ZV9wYXJlbnQ6ITEsdXBkYXRlX2FkZF9wYXJlbnQ6ITEsdXBkYXRlX3JlbW92ZV9wcm9wZXJ0eTohMSx1cGRhdGVfYWRkX3Byb3BlcnR5OiExLHVwZGF0ZV9uYW1lOiExLHVwZGF0ZV9kYXRhX3R5cGU6ITEsdXBkYXRlX3F1ZXJ5X3RlbXBsYXRlX2RlZmluaXRpb246ITEsdXBkYXRlX3JlbW92ZV9maWxlOiExLHVwZGF0ZV9hZGRfZmlsZTohMSx1cGRhdGVfbW92ZV9maWxlOiExLHVzZV9hc19yZWZlcmVuY2U6ITEsdXNlX2FzX3Byb3BlcnR5OiExLHVzZV9hc19wYXJlbnQ6ITEsdXNlX2FzX2RhdGFfdHlwZTohMX0sdGhpcy5jYXBhYmlsaXRpZXM9aXx8e2RlbGV0ZV9hY2k6ITF9fXJldHVybiB1KGUsW3trZXk6XCJpc0VkaXRBY2xcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLmVkaXRfYWNsfX0se2tleTpcInNldEVkaXRBY2xcIix2YWx1ZTpmdW5jdGlvbihlKXtlPXZvaWQgMD09PWV8fGUsdGhpcy5wZXJtaXNzaW9ucy5lZGl0X2FjbD1lfX0se2tleTpcImlzRGVsZXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5kZWxldGVfZW50aXR5fX0se2tleTpcInNldERlbGV0ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9dm9pZCAwPT09ZXx8ZSx0aGlzLnBlcm1pc3Npb25zLmRlbGV0ZV9lbnRpdHk9ZX19LHtrZXk6XCJpc0Z1bGxSZXRyaWV2ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfZW50aXR5JiZ0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2FjbCYmdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9oaXN0b3J5JiZ0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX293bmVyJiZ0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2ZpbGV9fSx7a2V5Olwic2V0RnVsbFJldHJpZXZlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT12b2lkIDA9PT1lfHxlLHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfZW50aXR5PWUsdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9hY2w9ZSx0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2hpc3Rvcnk9ZSx0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX293bmVyPWUsdGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9maWxlPWV9fSx7a2V5OlwiaXNQYXJ0aWFsUmV0cmlldmVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLnJldHJpZXZlX2VudGl0eXx8dGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9hY2x8fHRoaXMucGVybWlzc2lvbnMucmV0cmlldmVfaGlzdG9yeXx8dGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9vd25lcnx8dGhpcy5wZXJtaXNzaW9ucy5yZXRyaWV2ZV9maWxlfX0se2tleTpcImlzRnVsbFVzZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGVybWlzc2lvbnMudXNlX2FzX3JlZmVyZW5jZSYmdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfcHJvcGVydHkmJnRoaXMucGVybWlzc2lvbnMudXNlX2FzX3BhcmVudCYmdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfZGF0YV90eXBlfX0se2tleTpcInNldEZ1bGxVc2VcIix2YWx1ZTpmdW5jdGlvbihlKXtlPXZvaWQgMD09PWV8fGUsdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfcmVmZXJlbmNlPWUsdGhpcy5wZXJtaXNzaW9ucy51c2VfYXNfcHJvcGVydHk9ZSx0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19wYXJlbnQ9ZSx0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19kYXRhX3R5cGU9ZX19LHtrZXk6XCJpc1BhcnRpYWxVc2VcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19yZWZlcmVuY2V8fHRoaXMucGVybWlzc2lvbnMudXNlX2FzX3Byb3BlcnR5fHx0aGlzLnBlcm1pc3Npb25zLnVzZV9hc19wYXJlbnR8fHRoaXMucGVybWlzc2lvbnMudXNlX2FzX2RhdGFfdHlwZX19LHtrZXk6XCJpc0Z1bGxVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9kZXNjcmlwdGlvbiYmdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfdmFsdWUmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JvbGUmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9wYXJlbnQmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX2FkZF9wYXJlbnQmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9wcm9wZXJ0eSYmdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfYWRkX3Byb3BlcnR5JiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9uYW1lJiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9kYXRhX3R5cGUmJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX3F1ZXJ5X3RlbXBsYXRlX2RlZmluaXRpb24mJnRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9maWxlJiZ0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9hZGRfZmlsZSYmdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfbW92ZV9maWxlfX0se2tleTpcInNldEZ1bGxVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtlPXZvaWQgMD09PWV8fGUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfZGVzY3JpcHRpb249ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV92YWx1ZT1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JvbGU9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9yZW1vdmVfcGFyZW50PWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfYWRkX3BhcmVudD1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX3JlbW92ZV9wcm9wZXJ0eT1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2FkZF9wcm9wZXJ0eT1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX25hbWU9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9kYXRhX3R5cGU9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9xdWVyeV90ZW1wbGF0ZV9kZWZpbml0aW9uPWUsdGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcmVtb3ZlX2ZpbGU9ZSx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9hZGRfZmlsZT1lLHRoaXMucGVybWlzc2lvbnMudXBkYXRlX21vdmVfZmlsZT1lfX0se2tleTpcImlzUGFydGlhbFVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2Rlc2NyaXB0aW9ufHx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV92YWx1ZXx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcm9sZXx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcmVtb3ZlX3BhcmVudHx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfYWRkX3BhcmVudHx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcmVtb3ZlX3Byb3BlcnR5fHx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9hZGRfcHJvcGVydHl8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX25hbWV8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2RhdGFfdHlwZXx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcXVlcnlfdGVtcGxhdGVfZGVmaW5pdGlvbnx8dGhpcy5wZXJtaXNzaW9ucy51cGRhdGVfcmVtb3ZlX2ZpbGV8fHRoaXMucGVybWlzc2lvbnMudXBkYXRlX2FkZF9maWxlfHx0aGlzLnBlcm1pc3Npb25zLnVwZGF0ZV9tb3ZlX2ZpbGV9fSx7a2V5OlwiaW1wbGllc093bmVyc2hpcFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhbnQmJiF0aGlzLmlzT3RoZXJSb2xlKCkmJiF0aGlzLmlzT3duZXJSb2xlKCkmJnRoaXMucGVybWlzc2lvbnMuZWRpdF9hY2x9fSx7a2V5OlwiaXNPdGhlclJvbGVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblwiP09USEVSP1wiPT09dGhpcy5yb2xlfX0se2tleTpcImlzT3duZXJSb2xlXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cIj9PV05FUj9cIj09PXRoaXMucm9sZX19XSksZX0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbz10LmlkLHI9dC5hY2lzLG49dC5jdXJyZW50X3Blcm1pc3Npb25zO3AodGhpcyxlKSx0aGlzLmlkPW8sdGhpcy5hY2lzPXJ8fFtdLHRoaXMuY3VycmVudF9wZXJtaXNzaW9ucz1ufHx7fX1yZXR1cm4gdShlLFt7a2V5OlwiZ2V0T3duZXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY2lzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW1wbGllc093bmVyc2hpcCgpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucm9sZX0pKX19XSksZX0oKSxmPXtyZXRyaWV2ZV9lbnRpdHk6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fUkVUUklFVkVfRU5USVRZLHJldHJpZXZlX2FjbDplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9BQ0wscmV0cmlldmVfaGlzdG9yeTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9SRVRSSUVWRV9ISVNUT1JZLHJldHJpZXZlX293bmVyOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1JFVFJJRVZFX09XTkVSLHJldHJpZXZlX2ZpbGU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fUkVUUklFVkVfRklMRSxkZWxldGVfZW50aXR5OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX0RFTEVURSxlZGl0X2FjbDplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9FRElUX0FDTCx1cGRhdGVfZGVzY3JpcHRpb246ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0RFU0NSSVBUSU9OLHVwZGF0ZV92YWx1ZTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfVkFMVUUsdXBkYXRlX3JvbGU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX1JPTEUsdXBkYXRlX3JlbW92ZV9wYXJlbnQ6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX1JFTU9WRV9QQVJFTlQsdXBkYXRlX2FkZF9wYXJlbnQ6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0FERF9QQVJFTlQsdXBkYXRlX3JlbW92ZV9wcm9wZXJ0eTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfUkVNT1ZFX1BST1BFUlRZLHVwZGF0ZV9hZGRfcHJvcGVydHk6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0FERF9QUk9QRVJUWSx1cGRhdGVfbmFtZTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VUERBVEVfTkFNRSx1cGRhdGVfZGF0YV90eXBlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9EQVRBX1RZUEUsdXBkYXRlX3F1ZXJ5X3RlbXBsYXRlX2RlZmluaXRpb246ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX1FVRVJZX1RFTVBMQVRFX0RFRklOSVRJT04sdXBkYXRlX3JlbW92ZV9maWxlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VQREFURV9SRU1PVkVfRklMRSx1cGRhdGVfYWRkX2ZpbGU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX0FERF9GSUxFLHVwZGF0ZV9tb3ZlX2ZpbGU6ZS5oLnYxLkVudGl0eVBlcm1pc3Npb24uRU5USVRZX1BFUk1JU1NJT05fVVBEQVRFX01PVkVfRklMRSx1c2VfYXNfcmVmZXJlbmNlOmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VTRV9BU19SRUZFUkVOQ0UsdXNlX2FzX3Byb3BlcnR5OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VTRV9BU19QUk9QRVJUWSx1c2VfYXNfcGFyZW50OmUuaC52MS5FbnRpdHlQZXJtaXNzaW9uLkVOVElUWV9QRVJNSVNTSU9OX1VTRV9BU19QQVJFTlQsdXNlX2FzX2RhdGFfdHlwZTplLmgudjEuRW50aXR5UGVybWlzc2lvbi5FTlRJVFlfUEVSTUlTU0lPTl9VU0VfQVNfREFUQV9UWVBFfSxiPShjPXt9LE9iamVjdC5rZXlzKGYpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2NbZltlXV09ZX0pKSxjKTtmdW5jdGlvbiBoKHQpe3ZhciBvPXQuZ2V0Um9sZSgpLHI9dC5nZXRHcmFudCgpLG49dC5nZXRQcmlvcml0eSgpLHM9dC5nZXRQZXJtaXNzaW9uc0xpc3QoKSxpPXQuZ2V0Q2FwYWJpbGl0aWVzTGlzdCgpLGc9bmV3IGQoe3JvbGU6byxncmFudDpyLHByaW9yaXR5Om59KTtyZXR1cm4gZy5wZXJtaXNzaW9ucz1mdW5jdGlvbihlKXt2YXIgdCxvPXt9LHI9YShlKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspe3ZhciBuPXQudmFsdWU7b1tiW25dXT0hMH19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIG99KHMpLGcuY2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBvLHI9e30sbj1hKHQpO3RyeXtmb3Iobi5zKCk7IShvPW4ubigpKS5kb25lOylvLnZhbHVlPT09ZS5oLnYxLkVudGl0eVBlcm1pc3Npb25SdWxlQ2FwYWJpbGl0eS5FTlRJVFlfUEVSTUlTU0lPTl9SVUxFX0NBUEFCSUxJVFlfREVMRVRFJiYoci5kZWxldGVfYWNpPSEwKX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gcn0oaSksZ31mdW5jdGlvbiBfKHQpe3ZhciBvPXtlZGl0X2FjbDohMSxlZGl0X3ByaW9yaXR5X2FjbDohMX07cmV0dXJuIHQ9PT1lLmgudjEuRW50aXR5QWNsUGVybWlzc2lvbi5FTlRJVFlfQUNMX1BFUk1JU1NJT05fRURJVF9BQ0w/by5lZGl0X2FjbD0hMDp0PT09ZS5oLnYxLkVudGl0eUFjbFBlcm1pc3Npb24uRU5USVRZX0FDTF9QRVJNSVNTSU9OX0VESVRfUFJJT1JJVFlfQUNMJiYoby5lZGl0X2FjbD0hMCxvLmVkaXRfcHJpb3JpdHlfYWNsPSEwKSxvfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9ZS5nZXRJZCgpLG89ZS5nZXRSdWxlc0xpc3QoKSxyPWUuZ2V0UGVybWlzc2lvbigpO3JldHVybiBuZXcgeSh7aWQ6dCxhY2lzOm8ubWFwKGgpLGN1cnJlbnRfcGVybWlzc2lvbnM6XyhyKX0pfWZ1bmN0aW9uIEUodCl7dmFyIG89bmV3IGUuaC52MS5FbnRpdHlQZXJtaXNzaW9uUnVsZTtyZXR1cm4gby5zZXRSb2xlKHQucm9sZSksby5zZXRQcmlvcml0eSh0LnByaW9yaXR5KSxvLnNldEdyYW50KHQuZ3JhbnQpLG8uc2V0UGVybWlzc2lvbnNMaXN0KE9iamVjdC5rZXlzKHQucGVybWlzc2lvbnMpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHQucGVybWlzc2lvbnNbZV0mJmZbZV19KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZltlXX0pKSksb31mdW5jdGlvbiBtKHQpe3ZhciBvPW5ldyBlLmgudjEuRW50aXR5QUNMO3JldHVybiBvLnNldElkKHQuaWQpLG8uc2V0UnVsZXNMaXN0KHQuYWNpcy5tYXAoRSkpLG99ZnVuY3Rpb24gVChlLHQsbyxyLG4scyxpKXt0cnl7dmFyIGE9ZVtzXShpKSxnPWEudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgbyhlKX1hLmRvbmU/dChnKTpQcm9taXNlLnJlc29sdmUoZykudGhlbihyLG4pfWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIHM9ZS5hcHBseSh0LG8pO2Z1bmN0aW9uIGkoZSl7VChzLHIsbixpLGEsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gYShlKXtUKHMscixuLGksYSxcInRocm93XCIsZSl9aSh2b2lkIDApfSkpfX1mdW5jdGlvbiBTKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBvPTAscj1uZXcgQXJyYXkodCk7bzx0O28rKylyW29dPWVbb107cmV0dXJuIHJ9ZnVuY3Rpb24gQShlLHQpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcj10W29dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCksdGhpcy51cmk9ZXx8XCIvYXBpXCJ9dmFyIG8scixuLHMsaSxhO3JldHVybiBvPXQscj1be2tleTpcIl9QcmVwYXJlVHJhbnNhY3Rpb25cIix2YWx1ZTpmdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBvLHIsbj1uZXcgZS5oLnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZUNsaWVudCh0aGlzLnVyaSxudWxsLG51bGwpLHM9bmV3IGUuaC52MS5NdWx0aVRyYW5zYWN0aW9uUmVxdWVzdCxpPWZ1bmN0aW9uKGUsdCl7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZighbyl7aWYoQXJyYXkuaXNBcnJheShlKXx8KG89ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gUyhlLHQpO3ZhciBvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09byYmZS5jb25zdHJ1Y3RvciYmKG89ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09b3x8XCJTZXRcIj09PW8/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09b3x8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobyk/UyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXtvJiYoZT1vKTt2YXIgcj0wLG49ZnVuY3Rpb24oKXt9O3JldHVybntzOm4sbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOm59fXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX12YXIgcyxpPSEwLGE9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtvPW8uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW8ubmV4dCgpO3JldHVybiBpPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2E9ITAscz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBzfX19fSh0KTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBhPXIudmFsdWU7KG89bmV3IGUuaC52MS5UcmFuc2FjdGlvblJlcXVlc3QpLnNldFJldHJpZXZlUmVxdWVzdChhKSxzLmFkZFJlcXVlc3RzKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX12YXIgZz17fTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtuLm11bHRpVHJhbnNhY3Rpb24ocyxnLChmdW5jdGlvbihvLHIpe28mJnQobyksZShyKX0pKX19fSx7a2V5OlwiX0NyZWF0ZVJldHJpZXZlUmVxdWVzdFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBvPW5ldyBlLmgudjEuUmV0cmlldmVSZXF1ZXN0O3JldHVybiBvLnNldElkKHQpLG8uc2V0UmVnaXN0ZXJGaWxlRG93bmxvYWQoITEpLG99fSx7a2V5OlwiX0NyZWF0ZVF1ZXJ5UmVxdWVzdFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBvPW5ldyBlLmgudjEuUXVlcnk7by5zZXRRdWVyeSh0KTt2YXIgcj1uZXcgZS5oLnYxLlJldHJpZXZlUmVxdWVzdDtyZXR1cm4gci5zZXRRdWVyeShvKSxyLnNldFJlZ2lzdGVyRmlsZURvd25sb2FkKCExKSxyfX0se2tleTpcInJldHJpZXZlXCIsdmFsdWU6KGE9UihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgbyxyPXRoaXM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSxvPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gci5fQ3JlYXRlUmV0cmlldmVSZXF1ZXN0KGUpfSkpLGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UodGhpcy5fUHJlcGFyZVRyYW5zYWN0aW9uKG8pKSk7Y2FzZSAzOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleTpcImV4ZWN1dGVRdWVyeVwiLHZhbHVlOihpPVIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gbz10aGlzLl9DcmVhdGVRdWVyeVJlcXVlc3QodCksZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZSh0aGlzLl9QcmVwYXJlVHJhbnNhY3Rpb24obykpKTtjYXNlIDI6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OlwicmV0cmlldmVFbnRpdHlBY2xcIix2YWx1ZToocz1SKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KG8pe3ZhciByLG4scztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiByPW5ldyBlLmgudjEuRW50aXR5VHJhbnNhY3Rpb25TZXJ2aWNlUHJvbWlzZUNsaWVudCh0aGlzLnVyaSxudWxsLG51bGwpLChuPW5ldyBlLmgudjEuTXVsdGlSZXRyaWV2ZUVudGl0eUFDTFJlcXVlc3QpLmFkZElkKG8pLHQubmV4dD01LHIubXVsdGlSZXRyaWV2ZUVudGl0eUFDTChuLHt9KTtjYXNlIDU6cmV0dXJuIHM9dC5zZW50LHQuYWJydXB0KFwicmV0dXJuXCIsdihzLmdldEFjbHNMaXN0KClbMF0pKTtjYXNlIDc6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OlwidXBkYXRlRW50aXR5QWNsXCIsdmFsdWU6KG49UihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdChvKXt2YXIgcixuLHMsaTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiByPW0obyksbj1uZXcgZS5oLnYxLkVudGl0eVRyYW5zYWN0aW9uU2VydmljZVByb21pc2VDbGllbnQodGhpcy51cmksbnVsbCxudWxsKSwocz1uZXcgZS5oLnYxLk11bHRpVXBkYXRlRW50aXR5QUNMUmVxdWVzdCkuc2V0QWNsc0xpc3QoW3JdKSx0Lm5leHQ9NixuLm11bHRpVXBkYXRlRW50aXR5QUNMKHMse30pO2Nhc2UgNjpyZXR1cm4gaT10LnNlbnQsdC5hYnJ1cHQoXCJyZXR1cm5cIixpKTtjYXNlIDg6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0sciYmQShvLnByb3RvdHlwZSxyKSx0fSgpfSkoKSxfX3dlYnBhY2tfZXhwb3J0c19ffSkoKX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///748\n')}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var l=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](l,l.exports,__webpack_require__),l.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var l in t)__webpack_require__.o(t,l)&&!__webpack_require__.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(326);window.CaosDBWebui2=__webpack_exports__})();
\ No newline at end of file
diff --git a/src/doc/conf.py b/src/doc/conf.py
index a94d3bde2f2cb42a56bcfbf9420e928493428ac1..bb8d70cb3a826a7fe4183a47596fb214807c40d3 100644
--- a/src/doc/conf.py
+++ b/src/doc/conf.py
@@ -26,9 +26,9 @@ copyright = '2022 - 2024, IndiScale GmbH'
 author = 'Daniel Hornung'
 
 # The short X.Y version
-version = '0.13.3'
+version = '0.14.0'
 # The full version, including alpha/beta/rc tags
-release = '0.13.3'
+release = '0.14.0'
 
 
 # -- General configuration ---------------------------------------------------
diff --git a/src/doc/extension/grpc-entity-service.rst b/src/doc/extension/grpc-entity-service.rst
new file mode 100644
index 0000000000000000000000000000000000000000..75f803ea4b3be5c2c5258a85d96f52a021cd292d
--- /dev/null
+++ b/src/doc/extension/grpc-entity-service.rst
@@ -0,0 +1,42 @@
+Enable GRPC Entity Service
+==========================
+
+You code against the LinkAhead GRPC API via the grpc-entity-service module.
+
+Enable it via the build variable:
+
+.. code-block::
+
+    BUILD_MODULE_EXT_GRPC_ENTITY_SERVICE=ENABLED
+
+You can, among other things,
+
+1. create a new TransactionService:
+
+.. code-block:: javascript
+
+    var service = new window.entityService.TransactionService(
+        window.connection.getBasePath() + "api");
+
+2. execute a query:
+
+.. code-block:: javascript
+
+    var response = await service.executeQuery("FIND Something");
+
+3. Use the Entity class to wrapp the "Entity" WebGRPC-Message:
+
+.. code-block:: javascript
+
+    var entity = new windown.entityService.Entity(
+        response.getResponsesList()[0]
+                .getRetrieveResponse()
+                .getFindQueryResult()
+                .getResultSetList()[0]
+                .getEntityResponse()
+                .getEntity());
+
+
+More information on the TransactionService class: https://gitlab.indiscale.com/caosdb/src/caosdb-webui-entity-service/-/blob/main/src/TransactionService.js
+
+More information on the API: https://docs.indiscale.com/caosdb-proto/packages/caosdb.entity.v1.html#caosdb-entity-v1-main-proto
diff --git a/test/core/js/modules/form_panel.js.js b/test/core/js/modules/form_panel.js.js
index f0cf34336292f95c17c9349270494ac8fa54b877..3a26aee2d8a6ca6cf0021d7c35ddae71c5560145 100644
--- a/test/core/js/modules/form_panel.js.js
+++ b/test/core/js/modules/form_panel.js.js
@@ -23,25 +23,24 @@
 'use strict';
 
 QUnit.module("form_panel.js", {
-    before: function (assert) {
+    before: function(assert) {
 
     },
-    after: function (assert) {
-    }
+    after: function(assert) {}
 });
 
-QUnit.test("availability", function (assert) {
+QUnit.test("availability", function(assert) {
     assert.ok(form_panel.init, "init available");
-    assert.ok(form_panel.create_show_form_callback , "version available");
+    assert.ok(form_panel.create_show_form_callback, "version available");
 });
 
-QUnit.test("create_show_form_callback ", function (assert) {
+QUnit.test("create_show_form_callback ", function(assert) {
     const title = "Upload CSV File"; // title of the form and text in the toolbox
     const panel_id = "csv_upload_form_panel";
     const server_side_script = "csv_script.py";
     const tool_box = "Tools"; // Name of the drop-down menu where the button is added in the navbar
     const help_text = "something";
-    const accepted_files_formats = [ ".csv", "text/tsv", ] // Mime types and file endings.
+    const accepted_files_formats = [".csv", "text/tsv", ] // Mime types and file endings.
 
     const csv_form_config = {
         script: server_side_script,
@@ -80,3 +79,37 @@ QUnit.test("create_show_form_callback ", function (assert) {
 });
 
 
+QUnit.test("autofocus_without_form", function(assert) {
+    const title = "My not-form title";
+    const id = "not_form_id";
+    // callback function that creates a "form" without HTML form
+    // elements.  Trivial here, but could be e.g., the file upload
+    // from LinkAhead WebUI Core Components.
+    const init_not_form_field = () => {
+        const container = $(`<div class="row"/>`);
+        return container[0];
+    };
+    // This should always work
+    cb_without_autofocus = form_panel.create_show_form_callback(
+        id,
+        title,
+        undefined,
+        init_not_form_field,
+        false
+    );
+    const nav = document.createElement("nav");
+    document.body.appendChild(nav);
+    cb_without_autofocus();
+    assert.ok(document.querySelector(`#${id}`), "Callback was called without autofocus.");
+    $(`#${id}`).remove();
+
+    cb_with_autofocus = form_panel.create_show_form_callback(
+        id,
+        title,
+        undefined,
+        init_not_form_field,
+        true
+    );
+    cb_with_autofocus();
+    assert.ok(document.querySelector(`#${id}`), "Callback was called with autofocus, bt still okay.");
+});