experimental-agent 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-RXPVLORL.mjs → chunk-GYOBANFH.mjs} +2 -2
- package/dist/index.js +2 -4
- package/dist/index.mjs +2 -4
- package/dist/next/loader.js +2 -2
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +2 -2
- package/dist/next.mjs +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -49,9 +49,7 @@ import * as z2 from "zod";
|
|
|
49
49
|
|
|
50
50
|
// src/rpc-dispatch.ts
|
|
51
51
|
import { z } from "zod";
|
|
52
|
-
var builtinNeedsApproval = {
|
|
53
|
-
Bash: true
|
|
54
|
-
};
|
|
52
|
+
var builtinNeedsApproval = {};
|
|
55
53
|
function handleOverrideResult(res) {
|
|
56
54
|
if (res === null) {
|
|
57
55
|
return null;
|
|
@@ -1178,4 +1176,4 @@ export {
|
|
|
1178
1176
|
builtinToolNames,
|
|
1179
1177
|
handleStorageRpc
|
|
1180
1178
|
};
|
|
1181
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC50cyIsICIuLi9zcmMvcnBjLWRpc3BhdGNoLnRzIiwgIi4uL3NyYy91dGlscy9tZXNzYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBnZXRWZXJjZWxPaWRjVG9rZW5TeW5jIH0gZnJvbSBcIkB2ZXJjZWwvb2lkY1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVUlNZXNzYWdlU3RyZWFtLFxuICB0eXBlIEdhdGV3YXlNb2RlbElkLFxuICB0eXBlIEluZmVyVG9vbElucHV0LFxuICB0eXBlIEluZmVyVUlUb29scyxcbiAgdHlwZSBNb2RlbE1lc3NhZ2UsXG4gIHR5cGUgVG9vbFNldCxcbiAgdHlwZSBVSU1lc3NhZ2UsXG4gIHR5cGUgVUlNZXNzYWdlQ2h1bmssXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYWxsIH0gZnJvbSBcImJldHRlci1hbGxcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgeyBnZXRSdW4sIHN0YXJ0IH0gZnJvbSBcIndvcmtmbG93L2FwaVwiO1xuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICB0eXBlIEFnZW50SW5wdXQsXG4gIHR5cGUgQWdlbnRNZXNzYWdlSW5wdXQsXG4gIGFnZW50TWVzc2FnZUhvb2ssXG4gIGFnZW50V29ya2Zsb3csXG4gIGFwcHJvdmFsSG9vayxcbn0gZnJvbSBcIi4vYWdlbnQtd29ya2Zsb3dcIjtcbmltcG9ydCB7XG4gIFNhbmRib3hOb3RGb3VuZEVycm9yLFxuICBTZXNzaW9uRXJyb3IsXG4gIFNlc3Npb25Ob3RGb3VuZEVycm9yLFxufSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgR2VuZXJhdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIERpc3BhdGNoQ29udGV4dCxcbiAgZGlzcGF0Y2gsXG4gIHR5cGUgSG9va1N0YXR1c1BhcmFtcyxcbiAgdHlwZSBIb29rU3RhdHVzUmVzdWx0LFxuICB0eXBlIEhvb2tUb29sQWZ0ZXJQYXJhbXMsXG4gIHR5cGUgSG9va1Rvb2xBZnRlclJlc3VsdCxcbiAgdHlwZSBIb29rVG9vbEJlZm9yZVBhcmFtcyxcbiAgdHlwZSBIb29rVG9vbEJlZm9yZVJlc3VsdCxcbiAgdHlwZSBUb29sTWV0YWRhdGEsXG4gIHR5cGUgVG9vbHNFeGVjdXRlUGFyYW1zLFxuICB0eXBlIFRvb2xzTmVlZHNBcHByb3ZhbFBhcmFtcyxcbiAgdHlwZSBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQsXG59IGZyb20gXCIuL3JwYy1kaXNwYXRjaFwiO1xuaW1wb3J0IHsgZ2V0U2FuZGJveCB9IGZyb20gXCIuL3NhbmRib3hcIjtcbmltcG9ydCB0eXBlIHsgT25SZXN0YXJ0LCBTYW5kYm94U2V0dXAgfSBmcm9tIFwiLi9zYW5kYm94L3R5cGVzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVTa2lsbHNEaXJzIH0gZnJvbSBcIi4vc2tpbGxzL3BhcnNlclwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbHNEaXIgfSBmcm9tIFwiLi9za2lsbHMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgU3RvcmFnZSBhcyBBZ2VudFN0b3JhZ2UsXG4gIERFRkFVTFRfTkFNRVNQQUNFLFxuICBnZXRTdG9yYWdlLFxuICBMT0NBTF9TVE9SQUdFX1ZFUlNJT04sXG4gIHR5cGUgTWVzc2FnZSxcbiAgdHlwZSBQYXJ0LFxuICB0eXBlIFNhbmRib3hDb25maWcsXG4gIHR5cGUgU3RvcmFnZUNvbmZpZyxcbiAgdHlwZSBIYW5kbGVycyBhcyBTdG9yYWdlSGFuZGxlcnMsXG4gIHR5cGUgU3RvcmFnZU1ldGhvZHMsXG4gIHR5cGUgVHlwZWRTdG9yYWdlLFxufSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgYnVpbHRJblRvb2xzLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vdG9vbHNcIjtcbmltcG9ydCB7IHRvTWVzc2FnZUFuZFBhcnRzIH0gZnJvbSBcIi4vdXRpbHMvbWVzc2FnZVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4vdXRpbHMvdWlcIjtcbmltcG9ydCB7IGNvbXB1dGVTZXNzaW9uVXNhZ2UsIHR5cGUgU2Vzc2lvblVzYWdlIH0gZnJvbSBcIi4vdXRpbHMvdXNhZ2VcIjtcblxuZXhwb3J0IHR5cGUgU2VuZElucHV0ID1cbiAgfCBzdHJpbmdcbiAgfCB7IHJvbGU/OiBVSU1lc3NhZ2VbXCJyb2xlXCJdOyBwYXJ0czogVUlNZXNzYWdlW1wicGFydHNcIl07IGlkPzogc3RyaW5nIH07XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3JzIGVtaXR0ZWQgb3ZlciB0aGUgc3RyZWFtIGR1cmluZyBsb25nLXJ1bm5pbmcgcGhhc2VzLlxuICogRGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgYXMgYGRhdGEtc3RhdHVzYCBjaHVua3Mgd2l0aCBgdHJhbnNpZW50OiB0cnVlYCBcdTIwMTQgbm90IHBlcnNpc3RlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFnZW50U3RhdHVzID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJzYW5kYm94LXNldHVwXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInNhbmRib3gtc2V0dXAtY29sZFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJsb2FkaW5nLXNraWxsc1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJuZWVkcy1hcHByb3ZhbFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJ0aGlua2luZ1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJjdXN0b21cIiksIHN0YXR1czogei5zdHJpbmcoKSB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBBZ2VudFN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIEFnZW50U3RhdHVzPjtcblxuLyoqXG4gKiBBdWdtZW50ZWQgYFJlYWRhYmxlU3RyZWFtYCByZXR1cm5lZCBieSBgc2Vzc2lvbi5zdHJlYW0oKWAuXG4gKiBQYXNzZXMgYGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1gIGFuZCB3b3JrcyB3aXRoIGBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KWAuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50U3RyZWFtID0gUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+ICYge1xuICAvKiogV3JpdGUgYSB0eXBlZCBzdGF0dXMgdXBkYXRlIHRvIHRoZSBzdHJlYW0gKHRyYW5zaWVudCwgbm90IHBlcnNpc3RlZCkuICovXG4gIHdyaXRlU3RhdHVzOiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogRGF0YSBwYXJ0IHR5cGVzIGVtaXR0ZWQgYnkgZXZlcnkgYWdlbnQgb3ZlciB0aGUgc3RyZWFtLlxuICogVXNlZCBhcyB0aGUgYERBVEFfUEFSVFNgIGdlbmVyaWMgZm9yIGBVSU1lc3NhZ2VgLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudERhdGFUeXBlcyA9IHsgc3RhdHVzOiBBZ2VudFN0YXR1cyB9O1xuXG4vKipcbiAqIEluZmVyIGEgdHlwZWQgVUlNZXNzYWdlIGZyb20gYW4gYWdlbnQgaW5zdGFuY2UuXG4gKiBUb29sIHBhcnRzIGFyZSBkaXNjcmltaW5hdGVkIGJ5IGB0eXBlOiBcInRvb2wtJHtuYW1lfVwiYCB3aXRoIHR5cGVkIGlucHV0L291dHB1dC5cbiAqIERhdGEgcGFydHMgaW5jbHVkZSBgZGF0YS1zdGF0dXNgIHdpdGggdHlwZWQgYEFnZW50U3RhdHVzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IG15QWdlbnQgPSBhZ2VudCh7IHRvb2xzOiB7IG15VG9vbDogdG9vbCh7Li4ufSkgfSB9KTtcbiAqIHR5cGUgTXlNZXNzYWdlID0gdHlwZW9mIG15QWdlbnQuJFVJTWVzc2FnZTtcbiAqIC8vIE15TWVzc2FnZS5wYXJ0cyBpbmNsdWRlcyB7IHR5cGU6IFwidG9vbC1teVRvb2xcIjsgaW5wdXQ6IE15SW5wdXQ7IG91dHB1dDogTXlPdXRwdXQ7IC4uLiB9XG4gKiAvLyBvbkRhdGEgY2FsbGJhY2sgcmVjZWl2ZXMgeyB0eXBlOiBcImRhdGEtc3RhdHVzXCI7IGRhdGE6IEFnZW50U3RhdHVzIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBJbmZlclVJTWVzc2FnZTxBPiA9IEEgZXh0ZW5kcyB7IHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldCB9XG4gID8gVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VD4+XG4gIDogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzPjtcblxudHlwZSBUb29sTmFtZTxUb29scz4gPSBFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lO1xuXG50eXBlIFRvb2xJbnB1dDxUb29scywgSz4gPSBLIGV4dGVuZHMgQnVpbHRJblRvb2xOYW1lXG4gID8gSW5mZXJUb29sSW5wdXQ8KHR5cGVvZiBidWlsdEluVG9vbHMpW0tdPlxuICA6IEsgZXh0ZW5kcyBrZXlvZiBUb29sc1xuICAgID8gVG9vbHNbS10gZXh0ZW5kcyBpbXBvcnQoXCJhaVwiKS5Ub29sXG4gICAgICA/IEluZmVyVG9vbElucHV0PFRvb2xzW0tdPlxuICAgICAgOiB1bmtub3duXG4gICAgOiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBOZWVkc0FwcHJvdmFsTWFwPFRvb2xzPiA9IHtcbiAgW0sgaW4gVG9vbE5hbWU8VG9vbHM+XT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKFxuICAgICAgICBpbnB1dDogVG9vbElucHV0PFRvb2xzLCBLPixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVua25vd247XG4gICAgICAgIH1cbiAgICAgICkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pO1xufTtcblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2FuIGJlIHNldCBwZXItc2Vzc2lvbiwgb3ZlcnJpZGluZyBhZ2VudC1sZXZlbCBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk9wdGlvbnM8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4gPSB7XG4gIC8qKiBUaGUgQUkgbW9kZWwgdG8gdXNlLiAqL1xuICBtb2RlbD86IEdhdGV3YXlNb2RlbElkO1xuICAvKiogU3lzdGVtIHByb21wdCBmb3IgdGhlIEFJIG1vZGVsLiAqL1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIC8qKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gb3IgSUQuIElmIHN0cmluZywgdXNlcyBhcyBzYW5kYm94IElEIHdpdGggaXRzIGNvbmZpZy4gKi9cbiAgc2FuZGJveD86XG4gICAgfCAoU2FuZGJveENvbmZpZyAmIHsgc2V0dXA/OiBTYW5kYm94U2V0dXA7IG9uUmVzdGFydD86IE9uUmVzdGFydCB9KVxuICAgIHwgc3RyaW5nO1xuICAvKiogS2V5LXZhbHVlIG1ldGFkYXRhIHRhZ3MgZm9yIHRoZSBzZXNzaW9uLiAqL1xuICB0YWdzPzogVFRhZ3M7XG4gIC8qKiBEaXJlY3RvcnkgY29udGFpbmluZyBza2lsbCBkZWZpbml0aW9ucyBmb3IgdGhlIGFnZW50LiAqL1xuICBza2lsbHNEaXI/OiBTa2lsbHNEaXI7XG4gIC8qKlxuICAgKiBOYW1lcyBvZiB0b29scyB0byBhY3RpdmF0ZSBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYWdlbnQtbGV2ZWwgdG9vbHMgYXJlIGFjdGl2ZS5cbiAgICogVXNlIHRoaXMgdG8gcmVzdHJpY3Qgd2hpY2ggdG9vbHMgYXJlIGF2YWlsYWJsZSBwZXItc2Vzc2lvbi5cbiAgICovXG4gIGFjdGl2ZVRvb2xzPzogKEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWUpW107XG4gIC8qKiBHZW5lcmF0aW9uIG9wdGlvbnMgKHRlbXBlcmF0dXJlLCBtYXhTdGVwcywgZXRjLikuIE92ZXJyaWRlcyBhZ2VudC1sZXZlbCBkZWZhdWx0cy4gKi9cbiAgZ2VuZXJhdGlvbj86IEdlbmVyYXRpb25PcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PiA9IFBpY2s8XG4gIFNlc3Npb25PcHRpb25zPFRvb2xzPixcbiAgXCJtb2RlbFwiIHwgXCJzeXN0ZW1cIiB8IFwic2tpbGxzRGlyXCIgfCBcImFjdGl2ZVRvb2xzXCIgfCBcImdlbmVyYXRpb25cIlxuPjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIGFnZW50IGluc3RhbmNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgbXlBZ2VudCA9IGFnZW50KHtcbiAqICAgbW9kZWw6IFwiYW50aHJvcGljL2NsYXVkZS1vcHVzLTQuNVwiLFxuICogICBzeXN0ZW06IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50Li4uXCIsXG4gKiAgIHRhZ3NTY2hlbWE6IHoub2JqZWN0KHsgdXNlcklkOiB6LnN0cmluZygpIH0pLFxuICogICBjb250ZXh0U2NoZW1hOiB6Lm9iamVjdCh7IGF1dGhUb2tlbjogei5zdHJpbmcoKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50T3B0aW9uczxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUVGFncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuPiA9IHtcbiAgLyoqXG4gICAqIEFnZW50IG5hbWUuIFVzZWQgdG8gaXNvbGF0ZSBzdG9yYWdlIGRhdGEgLSBkaWZmZXJlbnQgbmFtZXMgaGF2ZSBzZXBhcmF0ZSBkYXRhLlxuICAgKiBAZGVmYXVsdCBcImRlZmF1bHRcIlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0b3JhZ2UgYmFja2VuZCBjb25maWd1cmF0aW9uLlxuICAgKiAtIGB7IHR5cGU6IFwibG9jYWxcIiB9YCAtIGZpbGVzeXN0ZW0gc3RvcmFnZSAoZGV2KVxuICAgKiAtIGB7IHR5cGU6IFwidmVyY2VsXCIgfWAgLSBWZXJjZWwgbWFuYWdlZCBzdG9yYWdlIChwcm9kKVxuICAgKiAtIGB7IHR5cGU6IFwiY3VzdG9tXCIsIHVybDogXCIuLi5cIiB9YCAtIGN1c3RvbSBIVFRQIGJhY2tlbmRcbiAgICogQGRlZmF1bHQgSW5mZXJyZWQgZnJvbSBlbnZpcm9ubWVudDogYHsgdHlwZTogXCJ2ZXJjZWxcIiB9YCB3aGVuIGBWRVJDRUxfT0lEQ19UT0tFTmAgaXMgc2V0LCBgeyB0eXBlOiBcImxvY2FsXCIgfWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VDb25maWc7XG4gIC8qKlxuICAgKiBDdXN0b20gdG9vbHMgYXZhaWxhYmxlIHRvIHRoZSBhZ2VudC5cbiAgICogVGhlc2UgYXJlIGV4cG9zZWQgdmlhIHRoZSBSUEMgaGFuZGxlciBhbmQgY2FsbGVkIG92ZXIgSFRUUC5cbiAgICovXG4gIHRvb2xzPzogVG9vbHM7XG4gIC8qKlxuICAgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIGFnZW50IG9wZXJhdGlvbnMuXG4gICAqL1xuICBob29rcz86IEFnZW50SG9va3M7XG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHNlc3Npb24gdGFncy4gQWxsIHNlc3Npb25zIHNoYXJlIHRoaXMgc2NoZW1hLlxuICAgKiBUYWdzIGFyZSBwZXJzaXN0ZWQgaW4gc3RvcmFnZSBhbmQgc3Vydml2ZSBhY3Jvc3MgcmVxdWVzdHMuXG4gICAqL1xuICB0YWdzU2NoZW1hPzogei5ab2RUeXBlPFRUYWdzPjtcbiAgLyoqXG4gICAqIFNjaGVtYSBmb3IgdHJhbnNpZW50IHRvb2wgY29udGV4dC4gUGFzc2VkIHBlci1yZXF1ZXN0IHZpYSBzZW5kKCkuXG4gICAqIE5PVCBwZXJzaXN0ZWQgLSB1c2UgZm9yIHNlY3JldHMgbGlrZSBhdXRoIHRva2Vucy5cbiAgICovXG4gIGNvbnRleHRTY2hlbWE/OiB6LlpvZFR5cGU8VENvbnRleHQ+O1xuICAvKipcbiAgICogQXBwcm92YWwgcnVsZXMgZm9yIHRvb2xzIHlvdSBkb24ndCBvd24gKGJ1aWx0LWluIG9yIHRoaXJkLXBhcnR5KS5cbiAgICogTWFwcyB0b29sIG5hbWVzIHRvIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRvIGFzay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogbmVlZHNBcHByb3ZhbDoge1xuICAgKiAgIEJhc2g6IChpbnB1dCkgPT4gaW5wdXQuY29tbWFuZC5zdGFydHNXaXRoKFwicm1cIiksXG4gICAqICAgV3JpdGU6IHRydWUsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBuZWVkc0FwcHJvdmFsPzogTmVlZHNBcHByb3ZhbE1hcDxUb29scz47XG4gIC8qKlxuICAgKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gd2l0aCBvcHRpb25hbCBzZXR1cCBhbmQgcmVzdGFydCBob29rcy5cbiAgICpcbiAgICogLSBgc2V0dXAua2V5YDogZXhwbGljaXQgc3RyaW5nIHRvIGNvbnRyb2wgc25hcHNob3QgaW52YWxpZGF0aW9uIChidW1wIHRvIHJlLXJ1bilcbiAgICogLSBgc2V0dXAucnVuYDogYXN5bmMgZnVuY3Rpb24gdGhhdCBydW5zIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc2FuZGJveCwgdGhlbiBnZXRzIHNuYXBzaG90dGVkXG4gICAqIC0gYG9uUmVzdGFydGA6IGFzeW5jIGZ1bmN0aW9uIHRoYXQgcnVucyBldmVyeSB0aW1lIGEgc2FuZGJveCByZXN1bWVzIGZyb20gYSBzbmFwc2hvdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBzYW5kYm94OiB7XG4gICAqICAgdHlwZTogXCJ2ZXJjZWxcIixcbiAgICogICBzZXR1cDoge1xuICAgKiAgICAga2V5OiBcImRldi1lbnYtdjNcIixcbiAgICogICAgIHJ1bjogYXN5bmMgKHNhbmRib3gpID0+IHtcbiAgICogICAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJucG1cIiwgYXJnczogW1wiaVwiLCBcIi1nXCIsIFwidmVyY2VsXCJdIH0pXG4gICAqICAgICB9LFxuICAgKiAgIH0sXG4gICAqICAgb25SZXN0YXJ0OiBhc3luYyAoc2FuZGJveCkgPT4ge1xuICAgKiAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJiYXNoXCIsIGFyZ3M6IFtcIi1jXCIsIFwibnBtIHJ1biBkZXYgJlwiXSB9KVxuICAgKiAgIH0sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzYW5kYm94PzpcbiAgICB8IChTYW5kYm94Q29uZmlnICYgeyBzZXR1cD86IFNhbmRib3hTZXR1cDsgb25SZXN0YXJ0PzogT25SZXN0YXJ0IH0pXG4gICAgfCBzdHJpbmc7XG59ICYgT21pdDxTZXNzaW9uT3B0aW9uczxUb29scywgVFRhZ3M+LCBcInRhZ3NcIiB8IFwic2FuZGJveFwiPjtcblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIHNlc3Npb24vc2FuZGJveCB0YWdzLiBVc2VkIGZvciBnZW5lcmljIGNvbnN0cmFpbnRzLlxuICogRm9yIGFnZW50LWxldmVsIHRhZyB2YWxpZGF0aW9uLCB1c2UgYHRhZ3NTY2hlbWFgIG9wdGlvbiB3aXRoIGEgem9kIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgVGFnc1NjaGVtYSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgYWdlbnQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRIb29rcyA9IHtcbiAgLyoqIENhbGxlZCBiZWZvcmUgYSB0b29sIGlzIGV4ZWN1dGVkLiBDYW4gbW9kaWZ5IGlucHV0IG9yIHRocm93IHRvIGJsb2NrLiAqL1xuICBcInRvb2wuYmVmb3JlXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IGlucHV0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIGFmdGVyIGEgdG9vbCBpcyBleGVjdXRlZC4gQ2FuIG1vZGlmeSByZXN1bHQuICovXG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFnZW50IGVtaXRzIGEgdHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3IuICovXG4gIHN0YXR1cz86IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogUlBDIHJlcXVlc3QgYm9keSBmb3IgYWdlbnQgaGFuZGxlci5cbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gb24gYG1ldGhvZGAgZm9yIHR5cGUtc2FmZSBwYXJhbXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50UnBjUmVxdWVzdCA9IHtcbiAgW0sgaW4ga2V5b2YgQWdlbnRScGNNZXRob2RzXToge1xuICAgIG1ldGhvZDogSztcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXTtcbiAgfTtcbn1ba2V5b2YgQWdlbnRScGNNZXRob2RzXTtcblxuLyoqXG4gKiBSUEMgcmVzcG9uc2UgdHlwZSBmb3IgZGlzcGF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1Jlc3VsdDxUID0gdW5rbm93bj4gPVxuICB8IHsgcmVzdWx0OiBUIH1cbiAgfCB7IGVycm9yOiB7IGNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH07IHN0YXR1cz86IG51bWJlciB9O1xuXG4vKipcbiAqIERpcmVjdCBSUEMgcGF5bG9hZCBmb3Igc3RlcCBmdW5jdGlvbiBjYWxscyAobm8gSFRUUCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1BheWxvYWQgPSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXJhbXM6IHVua25vd247XG59O1xuXG4vKipcbiAqIEFsbCBSUEMgbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIGFnZW50IGhhbmRsZXIuXG4gKiBDb21iaW5lcyB0b29scyBtZXRob2RzLCBob29rcywgYW5kIHN0b3JhZ2UgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2RzID0ge1xuICBcInRvb2xzLmxpc3RcIjogeyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPjsgcmVzdWx0OiBUb29sTWV0YWRhdGFbXSB9O1xuICBcInRvb2xzLmV4ZWN1dGVcIjogeyBwYXJhbXM6IFRvb2xzRXhlY3V0ZVBhcmFtczsgcmVzdWx0OiB1bmtub3duIH07XG4gIFwidG9vbHMubmVlZHNBcHByb3ZhbFwiOiB7XG4gICAgcGFyYW1zOiBUb29sc05lZWRzQXBwcm92YWxQYXJhbXM7XG4gICAgcmVzdWx0OiBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQ7XG4gIH07XG4gIFwiaG9vay50b29sLmJlZm9yZVwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEJlZm9yZVBhcmFtcztcbiAgICByZXN1bHQ6IEhvb2tUb29sQmVmb3JlUmVzdWx0O1xuICB9O1xuICBcImhvb2sudG9vbC5hZnRlclwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEFmdGVyUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1Rvb2xBZnRlclJlc3VsdDtcbiAgfTtcbiAgXCJob29rLnN0YXR1c1wiOiB7XG4gICAgcGFyYW1zOiBIb29rU3RhdHVzUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1N0YXR1c1Jlc3VsdDtcbiAgfTtcbn0gJiBTdG9yYWdlTWV0aG9kcztcblxuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2ROYW1lID0ga2V5b2YgQWdlbnRScGNNZXRob2RzO1xuXG4vKipcbiAqIFJlc3VsdCB0eXBlIGZvciBSUEMgb3ZlcnJpZGUgaGFuZGxlcnMuXG4gKiAtIGB7IG9rOiB0cnVlOyByZXN1bHQ6IFQgfWAgLSByZXR1cm4gdGhpcyByZXN1bHRcbiAqIC0gYHsgb2s6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH1gIC0gcmV0dXJuIHRoaXMgZXJyb3JcbiAqIC0gYG51bGxgIC0gdXNlIGRlZmF1bHQgaGFuZGxlclxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY1Jlc3VsdDxUPiA9XG4gIHwgeyBvazogdHJ1ZTsgcmVzdWx0OiBUIH1cbiAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZyB9XG4gIHwgbnVsbDtcblxuLyoqXG4gKiBPdmVycmlkZSBoYW5kbGVycyBmb3IgYWdlbnQgUlBDIG1ldGhvZHMuXG4gKiBFYWNoIG1ldGhvZCBjYW4gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4uXG4gKiBSZXR1cm4gYG51bGxgIHRvIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY092ZXJyaWRlcyA9IHtcbiAgW0sgaW4gQWdlbnRScGNNZXRob2ROYW1lXT86IChcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXVxuICApID0+IFByb21pc2U8QWdlbnRScGNSZXN1bHQ8QWdlbnRScGNNZXRob2RzW0tdW1wicmVzdWx0XCJdPj47XG59O1xuXG5jb25zdCBpc1ZlcmNlbCA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQm9vbGVhbihnZXRWZXJjZWxPaWRjVG9rZW5TeW5jKCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZ2VudCA9IDxcbiAgVG9vbHMgZXh0ZW5kcyB7fSxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4oXG4gIF9vcHRpb25zPzogQWdlbnRPcHRpb25zPFRvb2xzLCBUVGFncywgVENvbnRleHQ+XG4pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IF9vcHRpb25zID8/IHt9O1xuICBjb25zdCBhZ2VudFNlY3JldCA9IHByb2Nlc3MuZW52LkFHRU5UX1NFQ1JFVDtcbiAgaWYgKCFhZ2VudFNlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQUdFTlRfU0VDUkVUIGVudiB2YXIgaXMgcmVxdWlyZWQuIFVzZSB3aXRoQWdlbnQoKSBvciBzZXQgaXQgbWFudWFsbHkuXCJcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYmFzZVN0b3JhZ2VDb25maWcgPVxuICAgIG9wdGlvbnMuc3RvcmFnZSA/P1xuICAgICgoaXNWZXJjZWwoKVxuICAgICAgPyB7IHR5cGU6IFwidmVyY2VsXCIgfVxuICAgICAgOiB7IHR5cGU6IFwibG9jYWxcIiB9KSBzYXRpc2ZpZXMgU3RvcmFnZUNvbmZpZyk7XG4gIGNvbnN0IHN0b3JhZ2VDb25maWc6IFN0b3JhZ2VDb25maWcgPSB7XG4gICAgLi4uYmFzZVN0b3JhZ2VDb25maWcsXG4gICAgbmFtZTogb3B0aW9ucy5uYW1lID8/IGJhc2VTdG9yYWdlQ29uZmlnLm5hbWUsXG4gIH07XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgaXMgaW5pdGlhbGl6ZWQgbGF6aWx5LlxuICAgKiBVc2VzIGFnZW50T2JqLnJwYyB3aGljaCBpcyB3aXJlZCB1cCBieSB0aGUgbG9hZGVyIGNhbGxpbmcgX19pbml0QWdlbnQuXG4gICAqL1xuICBsZXQgX3N0b3JhZ2U6IEFnZW50U3RvcmFnZSB8IG51bGwgPSBudWxsO1xuICBjb25zdCBnZXRTdG9yYWdlSW5zdGFuY2UgPSAoKTogQWdlbnRTdG9yYWdlID0+IHtcbiAgICBpZiAoIV9zdG9yYWdlKSB7XG4gICAgICBfc3RvcmFnZSA9IGdldFN0b3JhZ2Uoe1xuICAgICAgICBjb25maWc6IHN0b3JhZ2VDb25maWcsXG4gICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBfc3RvcmFnZTtcbiAgfTtcblxuICAvKipcbiAgICogTGF6eS1pbml0aWFsaXplZCBzdG9yYWdlIGhhbmRsZXJzIGZvciBsb2NhbCBzdG9yYWdlLlxuICAgKiBDcmVhdGVkIG9uIGZpcnN0IHN0b3JhZ2UgUlBDIHJlcXVlc3QuXG4gICAqL1xuICBsZXQgc3RvcmFnZUhhbmRsZXJzUHJvbWlzZTogUHJvbWlzZTxTdG9yYWdlSGFuZGxlcnM+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGdldFN0b3JhZ2VIYW5kbGVycyA9IChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0b3JhZ2VIYW5kbGVycz4gPT4ge1xuICAgIGlmIChzdG9yYWdlQ29uZmlnLnR5cGUgIT09IFwibG9jYWxcIikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXCJTdG9yYWdlIGhhbmRsZXJzIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCBzdG9yYWdlXCIpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXN0b3JhZ2VIYW5kbGVyc1Byb21pc2UpIHtcbiAgICAgIHN0b3JhZ2VIYW5kbGVyc1Byb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICAgICAgY29uc3QgeyBjcmVhdGVGaWxlc3lzdGVtSGFuZGxlcnMgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgICBcIi4vc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC1mcy1oYW5kbGVyc1wiXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gc3RvcmFnZUNvbmZpZy5wYXRoID8/IFwiLmFnZW50LXN0b3JhZ2VcIjtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGJhc2VQYXRoLCBuYW1lLCBMT0NBTF9TVE9SQUdFX1ZFUlNJT04pO1xuICAgICAgICByZXR1cm4gY3JlYXRlRmlsZXN5c3RlbUhhbmRsZXJzKGZ1bGxQYXRoKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuICAgIHJldHVybiBzdG9yYWdlSGFuZGxlcnNQcm9taXNlO1xuICB9O1xuXG4gIC8vIEV4dHJhY3Qgc2V0dXAgYW5kIG9uUmVzdGFydCBmcm9tIGFnZW50LWxldmVsIHNhbmRib3ggb3B0aW9ucyAobm90IHNlcmlhbGl6YWJsZSlcbiAgY29uc3QgYWdlbnRTYW5kYm94T3B0aW9uID0gb3B0aW9ucy5zYW5kYm94O1xuICBjb25zdCBzYW5kYm94U2V0dXAgPVxuICAgIGFnZW50U2FuZGJveE9wdGlvbiAmJiB0eXBlb2YgYWdlbnRTYW5kYm94T3B0aW9uICE9PSBcInN0cmluZ1wiXG4gICAgICA/IGFnZW50U2FuZGJveE9wdGlvbi5zZXR1cFxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNhbmRib3hPblJlc3RhcnQgPVxuICAgIGFnZW50U2FuZGJveE9wdGlvbiAmJiB0eXBlb2YgYWdlbnRTYW5kYm94T3B0aW9uICE9PSBcInN0cmluZ1wiXG4gICAgICA/IGFnZW50U2FuZGJveE9wdGlvbi5vblJlc3RhcnRcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNhbmRib3ggPSBhc3luYyAoXG4gICAgc2FuZGJveElkOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGNvbmZpZz86IFNhbmRib3hDb25maWc7XG4gICAgICB0YWdzPzogVFRhZ3M7XG4gICAgICBzZXR1cD86IFNhbmRib3hTZXR1cDtcbiAgICAgIG9uUmVzdGFydD86IE9uUmVzdGFydDtcbiAgICB9XG4gICkgPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nUmVjb3JkID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcblxuICAgIC8vIENvbXBvc2UgYWdlbnQtbGV2ZWwgYW5kIHNlc3Npb24tbGV2ZWwgc2V0dXAvb25SZXN0YXJ0LlxuICAgIC8vIFNlc3Npb24gc2V0dXAgcnVucyBvbiB0b3Agb2YgYWdlbnQgc2V0dXAgKGUuZy4gYWdlbnQgaW5zdGFsbHMgc2hhcmVkIGRlcHMsXG4gICAgLy8gc2Vzc2lvbiBkb2VzIGdpdCBjbG9uZSArIG5wbSBpbnN0YWxsKS4gVGhlIGNvbXBvc2VkIGtleSBpbmNvcnBvcmF0ZXMgYm90aFxuICAgIC8vIHNvIHNuYXBzaG90IGludmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkuXG4gICAgY29uc3QgcmVzb2x2ZWRTZXR1cDogU2FuZGJveFNldHVwIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdHM/LnNldHVwICYmIHNhbmRib3hTZXR1cFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGtleTogYCR7c2FuZGJveFNldHVwLmtleX06JHtvcHRzLnNldHVwLmtleX1gLFxuICAgICAgICAgICAgcnVuOiBhc3luYyAoc2J4KSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHNhbmRib3hTZXR1cC5ydW4oc2J4KTtcbiAgICAgICAgICAgICAgYXdhaXQgb3B0cy5zZXR1cD8ucnVuKHNieCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiAob3B0cz8uc2V0dXAgPz8gc2FuZGJveFNldHVwKTtcbiAgICBjb25zdCByZXNvbHZlZE9uUmVzdGFydDogT25SZXN0YXJ0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdHM/Lm9uUmVzdGFydCAmJiBzYW5kYm94T25SZXN0YXJ0XG4gICAgICAgID8gYXN5bmMgKHNieCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgc2FuZGJveE9uUmVzdGFydChzYngpO1xuICAgICAgICAgICAgYXdhaXQgb3B0cy5vblJlc3RhcnQ/LihzYngpO1xuICAgICAgICAgIH1cbiAgICAgICAgOiAob3B0cz8ub25SZXN0YXJ0ID8/IHNhbmRib3hPblJlc3RhcnQpO1xuXG4gICAgLy8gU3RyaXAgc2V0dXAvb25SZXN0YXJ0IGZyb20gY29uZmlnIGJlZm9yZSBzdG9yaW5nIChmdW5jdGlvbnMgYXJlbid0IHNlcmlhbGl6YWJsZSlcbiAgICBjb25zdCByZXNvbHZlQ29uZmlnID0gKCk6IFNhbmRib3hDb25maWcgPT4ge1xuICAgICAgaWYgKG9wdHM/LmNvbmZpZykge1xuICAgICAgICByZXR1cm4gb3B0cy5jb25maWc7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2FuZGJveCA9PT0gXCJzdHJpbmdcIiB8fCAhb3B0aW9ucy5zYW5kYm94KSB7XG4gICAgICAgIHJldHVybiBpc1ZlcmNlbCgpID8geyB0eXBlOiBcInZlcmNlbFwiIH0gOiB7IHR5cGU6IFwibG9jYWxcIiB9O1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzZXR1cDogX3MsIG9uUmVzdGFydDogX3IsIC4uLnJlc3QgfSA9IG9wdGlvbnMuc2FuZGJveDtcbiAgICAgIHJldHVybiByZXN0O1xuICAgIH07XG5cbiAgICBpZiAoZXhpc3RpbmdSZWNvcmQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYgKCEoZXhpc3RpbmdSZWNvcmQgaW5zdGFuY2VvZiBTYW5kYm94Tm90Rm91bmRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZXhpc3RpbmdSZWNvcmQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzYW5kYm94UmVjb3JkID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2FuZGJveC5zZXQoe1xuICAgICAgICBpZDogc2FuZGJveElkLFxuICAgICAgICB0YWdzOiBvcHRzPy50YWdzID8/IG51bGwsXG4gICAgICAgIGFjcXVpcmluZ0xvY2tBdDogbnVsbCxcbiAgICAgICAgYWNxdWlyaW5nTG9ja0lkOiBudWxsLFxuICAgICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgIGxhc3RBY3Rpdml0eUF0OiBEYXRlLm5vdygpLFxuICAgICAgICBjb25maWc6IHJlc29sdmVDb25maWcoKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHNhbmRib3hSZWNvcmQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBzYW5kYm94UmVjb3JkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFNhbmRib3g8VFRhZ3M+KHtcbiAgICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgc2FuZGJveFJlY29yZCxcbiAgICAgICAgc3RvcmFnZTogZ2V0U3RvcmFnZUluc3RhbmNlKCksXG4gICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgICBzZXR1cDogcmVzb2x2ZWRTZXR1cCxcbiAgICAgICAgb25SZXN0YXJ0OiByZXNvbHZlZE9uUmVzdGFydCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbmZpZyA9IG9wdHM/LmNvbmZpZyA/PyBleGlzdGluZ1JlY29yZC5jb25maWc7XG4gICAgaWYgKCFlcXVhbChleGlzdGluZ1JlY29yZC5jb25maWcsIG5ld0NvbmZpZykpIHtcbiAgICAgIC8vIHRocm93IG5ldyBTYW5kYm94RXJyb3Ioe1xuICAgICAgLy8gICByZWFzb246IFwic2FuZGJveCBjb25maWcgY2hhbmdlcyBhcmUgbm90IHN1cHBvcnRlZFwiLFxuICAgICAgLy8gfSk7XG4gICAgICBjb25zb2xlLndhcm4oXCJzYW5kYm94IGNvbmZpZyBjaGFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRTYW5kYm94PFRUYWdzPih7XG4gICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgc2FuZGJveFJlY29yZDogZXhpc3RpbmdSZWNvcmQsXG4gICAgICBzdG9yYWdlOiBnZXRTdG9yYWdlSW5zdGFuY2UoKSxcbiAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgc2V0dXA6IHJlc29sdmVkU2V0dXAsXG4gICAgICBvblJlc3RhcnQ6IHJlc29sdmVkT25SZXN0YXJ0LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFnZW50T2JqID0ge1xuICAgIHNlc3Npb246IGFzeW5jIChcbiAgICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgc2Vzc2lvbk9wdGlvbnM/OiBTZXNzaW9uT3B0aW9uczxUb29scywgVFRhZ3M+XG4gICAgKSA9PiB7XG4gICAgICBsZXQgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogbm9ybWFsaXplIHNhbmRib3ggaW5wdXQgdG8gYSBzYW5kYm94IElEIGFuZCBjb25maWdcbiAgICAgICAqL1xuICAgICAgY29uc3Qgc2FuZGJveElucHV0ID0gc2Vzc2lvbk9wdGlvbnM/LnNhbmRib3ggPz8gb3B0aW9ucy5zYW5kYm94O1xuICAgICAgY29uc3Qgc2FuZGJveElkID1cbiAgICAgICAgdHlwZW9mIHNhbmRib3hJbnB1dCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gc2FuZGJveElucHV0XG4gICAgICAgICAgOiAvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05lc3RlZFRlcm5hcnk6IG9rXG4gICAgICAgICAgICBzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gYHNhbmRib3hfJHt1bGlkKCl9YFxuICAgICAgICAgICAgOiAoc2Vzc2lvbi5zYW5kYm94SWQgPz8gYHNhbmRib3hfJHt1bGlkKCl9YCk7XG4gICAgICAvLyBTdHJpcCBub24tc2VyaWFsaXphYmxlIGZpZWxkcyAoc2V0dXAvb25SZXN0YXJ0KSBiZWZvcmUgcGFzc2luZyBhcyBjb25maWcuXG4gICAgICAvLyBPbmx5IHRyZWF0IHNldHVwL29uUmVzdGFydCBhcyBzZXNzaW9uLWxldmVsIG92ZXJyaWRlcyB3aGVuIHRoZSBzZXNzaW9uXG4gICAgICAvLyBhY3R1YWxseSBwcm92aWRlZCBpdHMgb3duIHNhbmRib3ggY29uZmlnIChub3Qgd2hlbiBmYWxsaW5nIGJhY2sgdG8gYWdlbnQgY29uZmlnKS5cbiAgICAgIGNvbnN0IGhhc1Nlc3Npb25TYW5kYm94ID0gc2Vzc2lvbk9wdGlvbnM/LnNhbmRib3ggIT0gbnVsbDtcbiAgICAgIGxldCBzZXNzaW9uU2V0dXA6IFNhbmRib3hTZXR1cCB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzZXNzaW9uT25SZXN0YXJ0OiBPblJlc3RhcnQgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzYW5kYm94Q29uZmlnOiBTYW5kYm94Q29uZmlnIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdHlwZW9mIHNhbmRib3hJbnB1dCA9PT0gXCJzdHJpbmdcIiB8fCAhc2FuZGJveElucHV0XG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBzZXR1cDogX3MsXG4gICAgICAgICAgICAgICAgb25SZXN0YXJ0OiBfcixcbiAgICAgICAgICAgICAgICAuLi5yZXN0XG4gICAgICAgICAgICAgIH0gPSBzYW5kYm94SW5wdXQgYXMgU2FuZGJveENvbmZpZyAmIHtcbiAgICAgICAgICAgICAgICBzZXR1cD86IFNhbmRib3hTZXR1cDtcbiAgICAgICAgICAgICAgICBvblJlc3RhcnQ/OiBPblJlc3RhcnQ7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChoYXNTZXNzaW9uU2FuZGJveCkge1xuICAgICAgICAgICAgICAgIHNlc3Npb25TZXR1cCA9IF9zO1xuICAgICAgICAgICAgICAgIHNlc3Npb25PblJlc3RhcnQgPSBfcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdDtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICBjb25zdCBzYW5kYm94UHJvbWlzZSA9IHNhbmRib3goXG4gICAgICAgIHNhbmRib3hJZCxcbiAgICAgICAgc2FuZGJveENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHNhbmRib3hDb25maWcsXG4gICAgICAgICAgICAgIHNldHVwOiBzZXNzaW9uU2V0dXAsXG4gICAgICAgICAgICAgIG9uUmVzdGFydDogc2Vzc2lvbk9uUmVzdGFydCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXhpc3RpbmdTZXNzaW9uID0gc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yID8gbnVsbCA6IHNlc3Npb247XG4gICAgICBjb25zdCBza2lsbHNEaXIgPVxuICAgICAgICBzZXNzaW9uT3B0aW9ucz8uc2tpbGxzRGlyID8/XG4gICAgICAgIGV4aXN0aW5nU2Vzc2lvbj8uc2tpbGxzRGlyID8/XG4gICAgICAgIG9wdGlvbnMuc2tpbGxzRGlyID8/XG4gICAgICAgIG51bGw7XG5cbiAgICAgIGlmIChzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBTZXNzaW9uTm90Rm91bmRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1vZGVsID0gc2Vzc2lvbk9wdGlvbnM/Lm1vZGVsID8/IG9wdGlvbnMubW9kZWwgPz8gbnVsbDtcbiAgICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkVycm9yKHtcbiAgICAgICAgICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgcmVhc29uOiBcIk1vZGVsIGlzIG5vdCBzZXRcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXNzaW9uID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5zZXQoe1xuICAgICAgICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlSWQ6IG51bGwsXG4gICAgICAgICAgICBydW5JZDogbnVsbCxcbiAgICAgICAgICAgIHRhZ3M6IHNlc3Npb25PcHRpb25zPy50YWdzID8/IG51bGwsXG4gICAgICAgICAgICBzeXN0ZW06IHNlc3Npb25PcHRpb25zPy5zeXN0ZW0gPz8gb3B0aW9ucy5zeXN0ZW0gPz8gbnVsbCxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgc2FuZGJveElkLFxuICAgICAgICAgICAgc2tpbGxzRGlyOiBza2lsbHNEaXIgPyBub3JtYWxpemVTa2lsbHNEaXJzKHNraWxsc0RpcikgOiBudWxsLFxuICAgICAgICAgICAgaG9va1Rva2VuOiBudWxsLFxuICAgICAgICAgICAgYWN0aXZlVG9vbHM6XG4gICAgICAgICAgICAgIHNlc3Npb25PcHRpb25zPy5hY3RpdmVUb29scyA/PyBvcHRpb25zLmFjdGl2ZVRvb2xzID8/IG51bGwsXG4gICAgICAgICAgICBnZW5lcmF0aW9uOlxuICAgICAgICAgICAgICBvcHRpb25zLmdlbmVyYXRpb24gfHwgc2Vzc2lvbk9wdGlvbnM/LmdlbmVyYXRpb25cbiAgICAgICAgICAgICAgICA/IHsgLi4ub3B0aW9ucy5nZW5lcmF0aW9uLCAuLi5zZXNzaW9uT3B0aW9ucz8uZ2VuZXJhdGlvbiB9XG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHNlc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJbnRlcnJ1cHRzIGFsbCBwZW5kaW5nIGFzc2lzdGFudCBtZXNzYWdlcyAoYm90aCBzdHJlYW1pbmcgYW5kIHF1ZXVlZCkuXG4gICAgICAgKiBBIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCBwZW5kaW5nIGlmIGNvbXBsZXRlZEF0ID09PSBudWxsICYmIGludGVycnVwdGVkQXQgPT09IG51bGwuXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGludGVycnVwdEN1cnJlbnRNZXNzYWdlID0gYXN5bmMgKGxhc3RQYXJ0Pzoge1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBwYXJ0OiB1bmtub3duO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlc1Jlc3VsdCA9XG4gICAgICAgICAgYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkubWVzc2FnZS5saXN0KHNlc3Npb25JZCk7XG4gICAgICAgIGlmIChtZXNzYWdlc1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzUmVzdWx0Lml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgICAgICAgbS5jb21wbGV0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgbS5pbnRlcnJ1cHRlZEF0ID09PSBudWxsXG4gICAgICAgICk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtb2RlbCBtYXkgaGF2ZSBqdXN0IGNvbXBsZXRlZCBiZXR3ZWVuIHdoZW4gdGhlIGNsaWVudCByZW5kZXJlZCB0aGVcbiAgICAgICAgICogaW50ZXJydXB0IGFuZCB3aGVuIHRoaXMgcmVxdWVzdCBhcnJpdmVkLiBGYWxsIGJhY2sgdG8gdGhlIG1vc3QgcmVjZW50bHlcbiAgICAgICAgICogY29tcGxldGVkIChidXQgbm90IHlldCBpbnRlcnJ1cHRlZCkgYXNzaXN0YW50IG1lc3NhZ2UsIGJ1dCBvbmx5IGlmIGl0XG4gICAgICAgICAqIGZpbmlzaGVkIHdpdGhpbiB0aGUgbGFzdCA1IHNlY29uZHMgdG8gYXZvaWQgcmV0cm9hY3RpdmVseSBjdXR0aW5nIG9mZlxuICAgICAgICAgKiBsb25nLWNvbXBsZXRlZCBtZXNzYWdlcy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgTUFYX1JFVFJPQUNUSVZFX01TID0gNV8wMDA7XG4gICAgICAgICAgY29uc3QgbGF0ZXN0ID0gbWVzc2FnZXNSZXN1bHQuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChtKSA9PlxuICAgICAgICAgICAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgICAgICAgICAgIG0uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG0uY29tcGxldGVkQXQgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBub3cgLSBtLmNvbXBsZXRlZEF0IDwgTUFYX1JFVFJPQUNUSVZFX01TXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5jcmVhdGVkQXQgLSBhLmNyZWF0ZWRBdClcbiAgICAgICAgICAgIC5hdCgwKTtcbiAgICAgICAgICBpZiAobGF0ZXN0KSB7XG4gICAgICAgICAgICBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMgPSBbbGF0ZXN0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzLm1hcCgobSkgPT5cbiAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2Uuc2V0KHtcbiAgICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgICAgaW50ZXJydXB0ZWRBdDogbm93LFxuICAgICAgICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBsYXN0UGFydCA/PyBudWxsLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQXV0by1yZWplY3QgcGVuZGluZyBhcHByb3ZhbHMgYW5kIHNldCBwYXJ0cyB0byB0aGVpciB0ZXJtaW5hbCBzdGF0ZVxuICAgICAgICAgKiBkaXJlY3RseS4gV2UgY2FuJ3QgcmVseSBvbiB0aGUgd29ya2Zsb3cgdG8gdHJhbnNpdGlvbiB0aGUgcGFydCB0b1xuICAgICAgICAgKiBgb3V0cHV0LWRlbmllZGAgYmVjYXVzZSBzZXR0aW5nIGBpbnRlcnJ1cHRlZEF0YCBhYm92ZSBhbHJlYWR5XG4gICAgICAgICAqIHRyaWdnZXJzIGBwb2xsRm9ySW50ZXJydXB0YCB3aGljaCBhYm9ydHMgdGhlIHdvcmtmbG93IFx1MjAxNCB0aGUgYXBwcm92YWxcbiAgICAgICAgICogcG9sbCBsb29wIGdldHMga2lsbGVkIGJlZm9yZSBpdCBjYW4gcHJvY2VzcyB0aGUgZGVuaWFsLlxuICAgICAgICAgKi9cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzUmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlNZXNzYWdlKFxuICAgICAgICAgICAgbS5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHNSZXN1bHQuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcC5wYXJ0ICYmXG4gICAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcHJvdmFsID0gKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSlcbiAgICAgICAgICAgICAgICAuYXBwcm92YWw7XG4gICAgICAgICAgICAgIGlmIChhcHByb3ZhbD8uaWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldCh7XG4gICAgICAgICAgICAgICAgICAuLi5wLFxuICAgICAgICAgICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5hcHByb3ZhbCxcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBcImludGVycnVwdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0gYXMgUGFydCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGFwcHJvdmFsSG9vay5yZXN1bWUoYXBwcm92YWwuaWQsIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLy8gU3ViLXRvb2wgYXBwcm92YWxzIHVzZSBzdG9yYWdlIHBvbGxpbmcsIG5vdCBob29rc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZW5kOiBhc3luYyAoe1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIGludGVycnVwdElmU3RyZWFtaW5nLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBpbnB1dDogU2VuZElucHV0IHwgU2VuZElucHV0W107XG4gICAgICAgICAgaW50ZXJydXB0SWZTdHJlYW1pbmc/OlxuICAgICAgICAgICAgfCBib29sZWFuXG4gICAgICAgICAgICB8IHsgbGFzdFBhcnQ6IHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9IH07XG4gICAgICAgICAgY29udGV4dD86IFRDb250ZXh0O1xuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgaWYgKGludGVycnVwdElmU3RyZWFtaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFydCA9XG4gICAgICAgICAgICAgIHR5cGVvZiBpbnRlcnJ1cHRJZlN0cmVhbWluZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gaW50ZXJydXB0SWZTdHJlYW1pbmcubGFzdFBhcnRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGludGVycnVwdFJlc3VsdCA9IGF3YWl0IGludGVycnVwdEN1cnJlbnRNZXNzYWdlKGxhc3RQYXJ0KTtcbiAgICAgICAgICAgIGlmIChpbnRlcnJ1cHRSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJydXB0UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgICAgICAgY29uc3QgbmV3UGFydHM6IFBhcnRbXSA9IFtdO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IGksXG4gICAgICAgICAgICAgICAgZGVmYXVsdFJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBwYXJ0cyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogd2UgYWxzbyBwcmUtY3JlYXRlIHRoZSBhc3Npc3RhbnQgbWVzc2FnZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VJZCA9IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gICAgICAgICAgY29uc3QgYmFzZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQgPSBiYXNlVGltZSArIG5ld01lc3NhZ2VzLmxlbmd0aDtcbiAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgICAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbjIgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChzZXNzaW9uMiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBzZXNzaW9uMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhZ2VudElucHV0OiBBZ2VudElucHV0ID0ge1xuICAgICAgICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZXZlbnQ6IEFnZW50TWVzc2FnZUlucHV0ID0ge1xuICAgICAgICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgaG9va1Rva2VuOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCA/PyB7fSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGVycm9yZS50cnlBc3luYyh7XG4gICAgICAgICAgICB0cnk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgYWxsKHtcbiAgICAgICAgICAgICAgICBhc3luYyBzYXZlTWVzc2FnZXMoKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgbmV3TWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2Uuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGJhc2VUaW1lICsgaSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXN5bmMgc2F2ZVBhcnRzKCkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIG5ld1BhcnRzLm1hcChnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhc3luYyByZXN1bWVPclN0YXJ0QWdlbnRXb3JrZmxvdygpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uMi5ydW5JZCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZ2VudE1lc3NhZ2VIb29rLnJlc3VtZShzZXNzaW9uSWQsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24yLnJ1bklkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBhd2FpdCBzdGFydChhZ2VudFdvcmtmbG93LCBbXG4gICAgICAgICAgICAgICAgICAgIHsgaW5wdXQ6IGFnZW50SW5wdXQsIGV2ZW50IH0sXG4gICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydFJlc3VsdC5ydW5JZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFzeW5jIHVwZGF0ZVNlc3Npb24oKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBydW5JZCA9IGF3YWl0IHRoaXMuJC5yZXN1bWVPclN0YXJ0QWdlbnRXb3JrZmxvdztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHNlc3Npb24yLmlkLFxuICAgICAgICAgICAgICAgICAgICBydW5JZCxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICBsYXN0TWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgICAgIGhvb2tUb2tlbjogZXZlbnQuaG9va1Rva2VuLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYXRjaDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcmVhc29uOiBgZmFpbGVkIHRvIHNlbmQ6ICR7U3RyaW5nKGUpfWAsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBzdHJlYW06IGFzeW5jIChvcHRzPzoge1xuICAgICAgICAgIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgICAgICAgfSk6IFByb21pc2U8QWdlbnRTdHJlYW0gfCBFcnJvcj4gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBvcHRzPy5tZXNzYWdlSWQgPz8gc2Vzc2lvbi5sYXN0TWVzc2FnZUlkO1xuICAgICAgICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJObyBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZXNzaW9uLnJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJObyBydW4gYXNzb2NpYXRlZCB3aXRoIHNlc3Npb25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBydW4gPSBnZXRSdW4oc2Vzc2lvbi5ydW5JZCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZWFkYWJsZSA9IHJ1bi5nZXRSZWFkYWJsZTxVSU1lc3NhZ2VDaHVuaz4oe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBtZXNzYWdlSWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgZGF0YVdyaXRlcjoge1xuICAgICAgICAgICAgd3JpdGU6IChjaHVuazogVUlNZXNzYWdlQ2h1bmspID0+IHZvaWQ7XG4gICAgICAgICAgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGNvbnN0IG1lcmdlZFN0cmVhbSA9IGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSh7XG4gICAgICAgICAgICBleGVjdXRlOiAoeyB3cml0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgICBkYXRhV3JpdGVyID0gd3JpdGVyO1xuICAgICAgICAgICAgICB3cml0ZXIubWVyZ2Uod29ya2Zsb3dSZWFkYWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obWVyZ2VkU3RyZWFtLCB7XG4gICAgICAgICAgICB3cml0ZVN0YXR1czogKHN0YXR1czogQWdlbnRTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFkYXRhV3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIHdyaXRlciBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRhdGFXcml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0YS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhbnNpZW50OiB0cnVlLFxuICAgICAgICAgICAgICB9IGFzIFVJTWVzc2FnZUNodW5rKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkgYXMgQWdlbnRTdHJlYW07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdWk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWVzc2FnZXNSZXN1bHQsIHBhcnRzUmVzdWx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2UubGlzdChzZXNzaW9uSWQpLFxuICAgICAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCksXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFydHNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzUmVzdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdC5pdGVtcyxcbiAgICAgICAgICAgIHBhcnRzOiBwYXJ0c1Jlc3VsdC5pdGVtcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGxhc3RTdGFydGVkQXNzaXN0YW50ID0gbWVzc2FnZXNSZXN1bHQuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJiBtLnN0YXJ0ZWRBdCAhPT0gbnVsbClcbiAgICAgICAgICAgIC5hdCgtMSk7XG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPVxuICAgICAgICAgICAgbGFzdFN0YXJ0ZWRBc3Npc3RhbnQgJiZcbiAgICAgICAgICAgIGxhc3RTdGFydGVkQXNzaXN0YW50LmNvbXBsZXRlZEF0ID09PSBudWxsICYmXG4gICAgICAgICAgICBsYXN0U3RhcnRlZEFzc2lzdGFudC5pbnRlcnJ1cHRlZEF0ID09PSBudWxsO1xuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ01lc3NhZ2VJZCA9IGlzU3RyZWFtaW5nXG4gICAgICAgICAgICA/IGxhc3RTdGFydGVkQXNzaXN0YW50LmlkXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGNvbXB1dGVTZXNzaW9uVXNhZ2UobWVzc2FnZXNSZXN1bHQuaXRlbXMpO1xuXG4gICAgICAgICAgdHlwZSBUeXBlZE1lc3NhZ2UgPSBVSU1lc3NhZ2U8XG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgQWdlbnREYXRhVHlwZXMsXG4gICAgICAgICAgICBJbmZlclVJVG9vbHM8dHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzPlxuICAgICAgICAgID47XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyB1bmtub3duIGFzIFR5cGVkTWVzc2FnZVtdLFxuICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkLFxuICAgICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgdGFnOiB7XG4gICAgICAgICAgbGlzdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChzZXNzaW9uLnRhZ3MgPz8ge30pIGFzIFRUYWdzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0OiBhc3luYyA8SyBleHRlbmRzIGtleW9mIFRUYWdzICYgc3RyaW5nPihcbiAgICAgICAgICAgIGtleTogS1xuICAgICAgICAgICk6IFByb21pc2U8VFRhZ3NbS10gfCB1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24udGFncz8uW2tleV0gYXMgVFRhZ3NbS10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGFzeW5jIDxLIGV4dGVuZHMga2V5b2YgVFRhZ3MgJiBzdHJpbmc+KFxuICAgICAgICAgICAga2V5OiBLLFxuICAgICAgICAgICAgdmFsdWU6IFRUYWdzW0tdXG4gICAgICAgICAgKTogUHJvbWlzZTx1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi50YWcuc2V0KHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICB0YWdzOiB7IFtrZXldOiB2YWx1ZSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXRNYW55OiBhc3luYyAodGFnczogUGFydGlhbDxUVGFncz4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLnRhZy5zZXQoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHRhZ3M6IHRhZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzYW5kYm94OiBhd2FpdCBzYW5kYm94UHJvbWlzZSxcblxuICAgICAgICBpbnRlcnJ1cHQ6IGludGVycnVwdEN1cnJlbnRNZXNzYWdlLFxuXG4gICAgICAgIHJlc29sdmVBcHByb3ZhbDogYXN5bmMgKHtcbiAgICAgICAgICBhcHByb3ZhbElkLFxuICAgICAgICAgIGFwcHJvdmVkLFxuICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgfToge1xuICAgICAgICAgIGFwcHJvdmFsSWQ6IHN0cmluZztcbiAgICAgICAgICBhcHByb3ZlZDogYm9vbGVhbjtcbiAgICAgICAgICByZWFzb24/OiBzdHJpbmc7XG4gICAgICAgIH0pOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHNSZXN1bHQgPVxuICAgICAgICAgICAgYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1Jlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRQYXJ0ID0gcGFydHNSZXN1bHQuaXRlbXMuZmluZChcbiAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydCAmJlxuICAgICAgICAgICAgICAocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGlkOiBzdHJpbmcgfSB9KS5hcHByb3ZhbD8uaWQgPT09XG4gICAgICAgICAgICAgICAgYXBwcm92YWxJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCF0YXJnZXRQYXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogYEFwcHJvdmFsICR7YXBwcm92YWxJZH0gbm90IGZvdW5kYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQYXJ0ID0ge1xuICAgICAgICAgICAgLi4udGFyZ2V0UGFydCxcbiAgICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgICAgLi4udGFyZ2V0UGFydC5wYXJ0LFxuICAgICAgICAgICAgICBzdGF0ZTogYXBwcm92ZWQgPyBcImFwcHJvdmFsLXJlc3BvbmRlZFwiIDogXCJvdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgICAgIGFwcHJvdmFsOiB7IGlkOiBhcHByb3ZhbElkLCBhcHByb3ZlZCwgcmVhc29uIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgc2V0UmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5zZXQoXG4gICAgICAgICAgICB1cGRhdGVkUGFydCBhcyBQYXJ0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc2V0UmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmlyZSB0aGUgYXBwcm92YWwgaG9vayB0byByZXN1bWUgdGhlIHN1c3BlbmRlZCB3b3JrZmxvdy5cbiAgICAgICAgICAvLyBGb3Igc3ViLXRvb2wgYXBwcm92YWxzIChmcm9tIHRoZSBKYXZhU2NyaXB0IHRvb2wpLCB0aGVyZSdzIG5vXG4gICAgICAgICAgLy8gc3VzcGVuZGVkIGhvb2sgXHUyMDE0IHBvbGxpbmcgaGFuZGxlcyBpdC4gU3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGFwcHJvdmFsSG9vay5yZXN1bWUoYXBwcm92YWxJZCwgeyBhcHByb3ZlZCwgcmVhc29uIH0pO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm8gaG9vayByZWdpc3RlcmVkIGZvciB0aGlzIGFwcHJvdmFsSWQgKGUuZy4gSlMgc3ViLXRvb2wgYXBwcm92YWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSxcblxuICAgICAgICB1c2FnZTogYXN5bmMgKCk6IFByb21pc2U8U2Vzc2lvblVzYWdlIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlc1Jlc3VsdCA9XG4gICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5tZXNzYWdlLmxpc3Qoc2Vzc2lvbklkKTtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29tcHV0ZVNlc3Npb25Vc2FnZShtZXNzYWdlc1Jlc3VsdC5pdGVtcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBhc3luYyAoXG4gICAgICAgICAgdXBkYXRlT3B0aW9uczogU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHM+ICYgeyB0YWdzPzogVFRhZ3MgfVxuICAgICAgICApOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgY29uc3QgeyBza2lsbHNEaXIsIC4uLnJhd1VwZGF0ZXMgfSA9IHVwZGF0ZU9wdGlvbnM7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFVwZGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh7XG4gICAgICAgICAgICAgIC4uLnJhd1VwZGF0ZXMsXG4gICAgICAgICAgICAgIC4uLihza2lsbHNEaXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBza2lsbHNEaXI6IHNraWxsc0RpclxuICAgICAgICAgICAgICAgICAgICAgID8gbm9ybWFsaXplU2tpbGxzRGlycyhza2lsbHNEaXIpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfSkuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhub3JtYWxpemVkVXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAuLi5ub3JtYWxpemVkVXBkYXRlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2FuZGJveCxcbiAgICBnZXQgc3RvcmFnZSgpOiBUeXBlZFN0b3JhZ2U8VFRhZ3M+IHtcbiAgICAgIHJldHVybiBnZXRTdG9yYWdlSW5zdGFuY2UoKSBhcyBUeXBlZFN0b3JhZ2U8VFRhZ3M+O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSUEMgaGFuZGxlciBmb3IgYWdlbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBIYW5kbGVzIHRvb2xzLmxpc3QsIHRvb2xzLmV4ZWN1dGUsIHN0b3JhZ2UgUlBDLCBhbmQgaG9va3MuXG4gICAgICpcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgYHJwY2Agc3RlcCBmdW5jdGlvbiBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgICAqIENhbiBhbHNvIGJlIGV4cG9zZWQgdmlhIEhUVFAgZm9yIGV4dGVybmFsIGFjY2VzcyBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgaGFuZGxlcjogYXN5bmMgKFxuICAgICAgaW5wdXQ6IFJlcXVlc3QgfCBScGNQYXlsb2FkLFxuICAgICAgb3ZlcnJpZGVzPzogQWdlbnRScGNPdmVycmlkZXNcbiAgICApOiBQcm9taXNlPFJlc3BvbnNlIHwgUnBjUmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCBpc1JlcXVlc3QgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3Q7XG5cbiAgICAgIGxldCBtZXRob2Q6IHN0cmluZztcbiAgICAgIGxldCBwYXJhbXM6IHVua25vd247XG4gICAgICBsZXQgbmFtZTogc3RyaW5nO1xuXG4gICAgICBpZiAoaXNSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHNlY3JldCA9IGlucHV0LmhlYWRlcnMuZ2V0KFwieC1hZ2VudC1zZWNyZXRcIik7XG4gICAgICAgIGlmIChzZWNyZXQgIT09IGFnZW50U2VjcmV0KSB7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgICAgICB7IGVycm9yOiB7IGNvZGU6IFwiVU5BVVRIT1JJWkVEXCIsIG1lc3NhZ2U6IFwiSW52YWxpZCBzZWNyZXRcIiB9IH0sXG4gICAgICAgICAgICB7IHN0YXR1czogNDAxIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJvZHk6IEFnZW50UnBjUmVxdWVzdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5ID0gYXdhaXQgaW5wdXQuanNvbigpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHsgY29kZTogXCJJTlZBTElEX1JFUVVFU1RcIiwgbWVzc2FnZTogXCJJbnZhbGlkIEpTT04gYm9keVwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBzdGF0dXM6IDQwMCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGhvZCA9IGJvZHkubWV0aG9kO1xuICAgICAgICBwYXJhbXMgPSBib2R5LnBhcmFtcztcbiAgICAgICAgbmFtZSA9IGlucHV0LmhlYWRlcnMuZ2V0KFwieC1hZ2VudC1uYW1lXCIpID8/IERFRkFVTFRfTkFNRVNQQUNFO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgICBwYXJhbXMgPSBpbnB1dC5wYXJhbXM7XG4gICAgICAgIG5hbWUgPSBpbnB1dC5uYW1lID8/IERFRkFVTFRfTkFNRVNQQUNFO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXNwYXRjaENvbnRleHQ6IERpc3BhdGNoQ29udGV4dCA9IHtcbiAgICAgICAgdG9vbHM6IG9wdGlvbnMudG9vbHMgYXMgVG9vbFNldCB8IHVuZGVmaW5lZCxcbiAgICAgICAgaG9va3M6IG9wdGlvbnMuaG9va3MsXG4gICAgICAgIG5lZWRzQXBwcm92YWw6XG4gICAgICAgICAgb3B0aW9ucy5uZWVkc0FwcHJvdmFsIGFzIERpc3BhdGNoQ29udGV4dFtcIm5lZWRzQXBwcm92YWxcIl0sXG4gICAgICAgIHN0b3JhZ2VDb25maWcsXG4gICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSxcbiAgICAgICAgZ2V0U3RvcmFnZUhhbmRsZXJzLFxuICAgICAgICBycGM6IGFnZW50T2JqLnJwYyxcbiAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGlzcGF0Y2gobWV0aG9kLCBwYXJhbXMsIGRpc3BhdGNoQ29udGV4dCwgbmFtZSk7XG5cbiAgICAgIGlmICghaXNSZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXR1cyA9IFwiZXJyb3JcIiBpbiByZXN1bHQgPyAocmVzdWx0LnN0YXR1cyA/PyA1MDApIDogMjAwO1xuICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgIFwiZXJyb3JcIiBpbiByZXN1bHQgPyB7IGVycm9yOiByZXN1bHQuZXJyb3IgfSA6IHsgcmVzdWx0OiByZXN1bHQucmVzdWx0IH0sXG4gICAgICAgIHsgc3RhdHVzIH1cbiAgICAgICk7XG4gICAgfSxcblxuICAgIHRvb2xzOiB7IC4uLmJ1aWx0SW5Ub29scywgLi4ub3B0aW9ucy50b29scyB9IGFzIHR5cGVvZiBidWlsdEluVG9vbHMgJiBUb29scyxcblxuICAgIC8qKiBQaGFudG9tIHByb3BlcnR5IGZvciB0eXBlIGluZmVyZW5jZS4gVXNlIGB0eXBlb2YgbXlBZ2VudC4kVUlNZXNzYWdlYCB0byBnZXQgdGhlIHR5cGVkIFVJTWVzc2FnZS4gKi9cbiAgICAkVUlNZXNzYWdlOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBVSU1lc3NhZ2U8XG4gICAgICB1bmtub3duLFxuICAgICAgQWdlbnREYXRhVHlwZXMsXG4gICAgICBJbmZlclVJVG9vbHM8dHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzPlxuICAgID4sXG5cbiAgICAvKiogQWdlbnQgbmFtZSB1c2VkIGFzIGtleSBmb3IgdGhlIFJQQyByZWdpc3RyeS4gU2V0IGJ5IHRoZSBsb2FkZXIgaW5pdC4gKi9cbiAgICBfYWdlbnROYW1lOiBzdG9yYWdlQ29uZmlnLm5hbWUgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG5cbiAgICBycGM6ICgoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwicnBjIG5vdCBjb25maWd1cmVkLiBFbnN1cmUgd2l0aEFnZW50IGlzIHNldCB1cCBpbiBuZXh0LmNvbmZpZy50c1wiXG4gICAgICApO1xuICAgIH0pIGFzIChwYXJhbXM6IFJwY1BheWxvYWQpID0+IFByb21pc2U8UnBjUmVzdWx0PixcbiAgfTtcblxuICByZXR1cm4gYWdlbnRPYmo7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcsIFRvb2wsIFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFnZW50UnBjT3ZlcnJpZGVzLFxuICBBZ2VudFJwY1Jlc3VsdCxcbiAgQWdlbnRTdGF0dXMsXG4gIFJwY1Jlc3VsdCxcbn0gZnJvbSBcIi4vY2xpZW50XCI7XG5pbXBvcnQgeyBnZXRTYW5kYm94IH0gZnJvbSBcIi4vc2FuZGJveFwiO1xuaW1wb3J0IHR5cGUge1xuICBTdG9yYWdlIGFzIEFnZW50U3RvcmFnZSxcbiAgTWV0aG9kTmFtZSxcbiAgUnBjRm4sXG4gIFJwY1JlcXVlc3QsXG4gIFJwY1Jlc3BvbnNlLFxuICBTYW5kYm94UmVjb3JkLFxuICBTZXNzaW9uLFxuICBTdG9yYWdlQ29uZmlnLFxuICBIYW5kbGVycyBhcyBTdG9yYWdlSGFuZGxlcnMsXG59IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNUT1JBR0VfUlBDX01FVEhPRFMgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgcmVzb2x2ZUFwaVVybCwgdHlwZSBUb29sQ29udGV4dCB9IGZyb20gXCIuL3Rvb2xzXCI7XG5cbmV4cG9ydCB0eXBlIFRvb2xNZXRhZGF0YSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5wdXRTY2hlbWE/OiBKU09OU2NoZW1hNztcbn07XG5cbmV4cG9ydCB0eXBlIFRvb2xzRXhlY3V0ZVBhcmFtcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgc2FuZGJveFJlY29yZDogU2FuZGJveFJlY29yZDtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEJlZm9yZVBhcmFtcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgY29udGV4dDogVG9vbENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEJlZm9yZVJlc3VsdCA9IHtcbiAgaW5wdXQ/OiB1bmtub3duO1xuICBzdG9wPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEhvb2tUb29sQWZ0ZXJQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIHJlc3VsdDogdW5rbm93bjtcbiAgY29udGV4dDogVG9vbENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEFmdGVyUmVzdWx0ID0ge1xuICByZXN1bHQ/OiB1bmtub3duO1xuICBzdG9wPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRvb2xzTmVlZHNBcHByb3ZhbFBhcmFtcyA9IHtcbiAgdG9vbE5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgbWVzc2FnZXM6IHVua25vd25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRvb2xzTmVlZHNBcHByb3ZhbFJlc3VsdCA9IGJvb2xlYW47XG5cbmV4cG9ydCB0eXBlIEhvb2tTdGF0dXNQYXJhbXMgPSB7XG4gIHN0YXR1czogQWdlbnRTdGF0dXM7XG59O1xuXG5leHBvcnQgdHlwZSBIb29rU3RhdHVzUmVzdWx0ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG50eXBlIEFnZW50SG9va3MgPSB7XG4gIFwidG9vbC5iZWZvcmVcIj86IChvcHRzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgaW5wdXQ6IHVua25vd24gfT47XG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICBzdGF0dXM/OiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59O1xuXG50eXBlIE5lZWRzQXBwcm92YWxFbnRyeSA9XG4gIHwgYm9vbGVhblxuICB8ICgoXG4gICAgICBpbnB1dDogdW5rbm93bixcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdG9vbENhbGxJZDogc3RyaW5nO1xuICAgICAgICBtZXNzYWdlczogdW5rbm93bltdO1xuICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5rbm93bjtcbiAgICAgIH1cbiAgICApID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KTtcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hDb250ZXh0ID0ge1xuICB0b29sczogVG9vbFNldCB8IHVuZGVmaW5lZDtcbiAgaG9va3M6IEFnZW50SG9va3MgfCB1bmRlZmluZWQ7XG4gIG5lZWRzQXBwcm92YWw6IFJlY29yZDxzdHJpbmcsIE5lZWRzQXBwcm92YWxFbnRyeT4gfCB1bmRlZmluZWQ7XG4gIHN0b3JhZ2VDb25maWc6IFN0b3JhZ2VDb25maWc7XG4gIGdldFN0b3JhZ2VJbnN0YW5jZTogKCkgPT4gQWdlbnRTdG9yYWdlO1xuICBnZXRTdG9yYWdlSGFuZGxlcnM6IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8U3RvcmFnZUhhbmRsZXJzPjtcbiAgcnBjOiBScGNGbjtcbiAgb3ZlcnJpZGVzPzogQWdlbnRScGNPdmVycmlkZXM7XG59O1xuXG4vKiogRGVmYXVsdCBuZWVkc0FwcHJvdmFsIGZvciBidWlsdC1pbiB0b29scyAodXNlciBjYW4gb3ZlcnJpZGUgdmlhIG5lZWRzQXBwcm92YWwgY29uZmlnKS4gKi9cbmNvbnN0IGJ1aWx0aW5OZWVkc0FwcHJvdmFsOiBQYXJ0aWFsPFxuICBSZWNvcmQ8QnVpbHRJblRvb2xOYW1lLCBOZWVkc0FwcHJvdmFsRW50cnk+XG4+ID0ge1xuICBCYXNoOiB0cnVlLFxufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvdmVycmlkZSByZXN1bHQgdG8gUnBjUmVzdWx0LCBvciBudWxsIHRvIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3ZlcnJpZGVSZXN1bHQ8VD4ocmVzOiBBZ2VudFJwY1Jlc3VsdDxUPik6IFJwY1Jlc3VsdDxUPiB8IG51bGwge1xuICBpZiAocmVzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHJlcy5vaykge1xuICAgIHJldHVybiB7IHJlc3VsdDogcmVzLnJlc3VsdCB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHsgY29kZTogXCJIQU5ETEVSX0VSUk9SXCIsIG1lc3NhZ2U6IHJlcy5lcnJvciB9LFxuICAgIHN0YXR1czogNDAwLFxuICB9O1xufVxuXG4vKipcbiAqIEludGVybmFsIGRpc3BhdGNoIGZ1bmN0aW9uLiBSZXR1cm5zIFJwY1Jlc3VsdCwgbm90IFJlc3BvbnNlLlxuICogRW5hYmxlcyByZWN1cnNpdmUgY2FsbHMgZm9yIGhvb2tzIHdpdGhvdXQgSlNPTiByb3VuZC10cmlwcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoKFxuICBtZXRob2Q6IHN0cmluZyxcbiAgcGFyYW1zOiB1bmtub3duLFxuICBjb250ZXh0OiBEaXNwYXRjaENvbnRleHQsXG4gIG5hbWU/OiBzdHJpbmdcbik6IFByb21pc2U8UnBjUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICB0b29scyxcbiAgICBob29rcyxcbiAgICBuZWVkc0FwcHJvdmFsLFxuICAgIHN0b3JhZ2VDb25maWcsXG4gICAgZ2V0U3RvcmFnZUluc3RhbmNlLFxuICAgIGdldFN0b3JhZ2VIYW5kbGVycyxcbiAgICBycGMsXG4gICAgb3ZlcnJpZGVzLFxuICB9ID0gY29udGV4dDtcblxuICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgIGNhc2UgXCJ0b29scy5saXN0XCI6IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gKCk6IFJwY1Jlc3VsdDxUb29sTWV0YWRhdGFbXT4gPT4ge1xuICAgICAgICBjb25zdCB0b29sc01hcCA9IHRvb2xzID8/ICh7fSBhcyBUb29sU2V0KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXModG9vbHNNYXApLm1hcCgoW25hbWUsIHRdKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICh0IGFzIFRvb2wpLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiBzY2hlbWFUb0pzb25TY2hlbWEoKHQgYXMgVG9vbCkuaW5wdXRTY2hlbWEpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcInRvb2xzLmxpc3RcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/Lih7fSk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZWQgPSBoYW5kbGVPdmVycmlkZVJlc3VsdChvdmVycmlkZVJlc3VsdCk7XG4gICAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdEhhbmRsZXIoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJIQU5ETEVSX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwidG9vbHMubmVlZHNBcHByb3ZhbFwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIFRvb2xzTmVlZHNBcHByb3ZhbFBhcmFtcztcblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoKTogUHJvbWlzZTxScGNSZXN1bHQ8Ym9vbGVhbj4+ID0+IHtcbiAgICAgICAgLy8gMS4gUGVyLXRvb2wgbmVlZHNBcHByb3ZhbCBvbiBjdXN0b20gdG9vbHMgdGFrZXMgcHJpb3JpdHlcbiAgICAgICAgY29uc3QgdG9vbHNNYXAgPSB0b29scyA/PyAoe30gYXMgVG9vbFNldCk7XG4gICAgICAgIGNvbnN0IHRvb2xEZWYgPSB0b29sc01hcFtwLnRvb2xOYW1lXSBhcyBUb29sIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodG9vbERlZj8ubmVlZHNBcHByb3ZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0b29sRGVmLm5lZWRzQXBwcm92YWwgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IHRvb2xEZWYubmVlZHNBcHByb3ZhbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b29sRGVmLm5lZWRzQXBwcm92YWwocC5pbnB1dCwge1xuICAgICAgICAgICAgdG9vbENhbGxJZDogcC50b29sQ2FsbElkLFxuICAgICAgICAgICAgbWVzc2FnZXM6IHAubWVzc2FnZXMgYXMgbmV2ZXJbXSxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBBZ2VudC1sZXZlbCBuZWVkc0FwcHJvdmFsIG1hcCwgZmFsbGluZyBiYWNrIHRvIGJ1aWx0LWluIGRlZmF1bHRzXG4gICAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgICBuZWVkc0FwcHJvdmFsPy5bcC50b29sTmFtZV0gPz9cbiAgICAgICAgICBidWlsdGluTmVlZHNBcHByb3ZhbFtwLnRvb2xOYW1lIGFzIEJ1aWx0SW5Ub29sTmFtZV0gPz9cbiAgICAgICAgICBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IGVudHJ5IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50cnkocC5pbnB1dCwge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHAudG9vbENhbGxJZCxcbiAgICAgICAgICBtZXNzYWdlczogcC5tZXNzYWdlcyxcbiAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1widG9vbHMubmVlZHNBcHByb3ZhbFwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHApO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVkID0gaGFuZGxlT3ZlcnJpZGVSZXN1bHQob3ZlcnJpZGVSZXN1bHQpO1xuICAgICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlZmF1bHRIYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiTkVFRFNfQVBQUk9WQUxfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgXCJob29rLnRvb2wuYmVmb3JlXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgSG9va1Rvb2xCZWZvcmVQYXJhbXM7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICBob29rUGFyYW1zOiBIb29rVG9vbEJlZm9yZVBhcmFtc1xuICAgICAgKTogUHJvbWlzZTxIb29rVG9vbEJlZm9yZVJlc3VsdD4gPT4ge1xuICAgICAgICBpZiAoIWhvb2tzPy5bXCJ0b29sLmJlZm9yZVwiXSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob29rUmVzdWx0ID0gYXdhaXQgaG9va3NbXCJ0b29sLmJlZm9yZVwiXShob29rUGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGhvb2tSZXN1bHQgPz8ge307XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1wiaG9vay50b29sLmJlZm9yZVwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJhbXMgPSBwO1xuICAgICAgICBsZXQgbWVyZ2VkOiBIb29rVG9vbEJlZm9yZVJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0Py5vaykge1xuICAgICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCAuLi5vdmVycmlkZVJlc3VsdC5yZXN1bHQgfTtcbiAgICAgICAgICBpZiAobWVyZ2VkLnN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdmVycmlkZVJlc3VsdC5yZXN1bHQuaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3VycmVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgaW5wdXQ6IG92ZXJyaWRlUmVzdWx0LnJlc3VsdC5pbnB1dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFJlc3VsdCA9IGF3YWl0IGRlZmF1bHRIYW5kbGVyKGN1cnJlbnRQYXJhbXMpO1xuICAgICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgLi4uZGVmYXVsdFJlc3VsdCB9O1xuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiSE9PS19FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcImhvb2sudG9vbC5hZnRlclwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIEhvb2tUb29sQWZ0ZXJQYXJhbXM7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICBob29rUGFyYW1zOiBIb29rVG9vbEFmdGVyUGFyYW1zXG4gICAgICApOiBQcm9taXNlPEhvb2tUb29sQWZ0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgaWYgKCFob29rcz8uW1widG9vbC5hZnRlclwiXSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob29rUmVzdWx0ID0gYXdhaXQgaG9va3NbXCJ0b29sLmFmdGVyXCJdKGhvb2tQYXJhbXMpO1xuICAgICAgICByZXR1cm4gaG9va1Jlc3VsdCA/PyB7fTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bXCJob29rLnRvb2wuYWZ0ZXJcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBjdXJyZW50UGFyYW1zID0gcDtcbiAgICAgICAgbGV0IG1lcmdlZDogSG9va1Rvb2xBZnRlclJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0Py5vaykge1xuICAgICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCAuLi5vdmVycmlkZVJlc3VsdC5yZXN1bHQgfTtcbiAgICAgICAgICBpZiAobWVyZ2VkLnN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdmVycmlkZVJlc3VsdC5yZXN1bHQucmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRQYXJhbXMsXG4gICAgICAgICAgICAgIHJlc3VsdDogb3ZlcnJpZGVSZXN1bHQucmVzdWx0LnJlc3VsdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFJlc3VsdCA9IGF3YWl0IGRlZmF1bHRIYW5kbGVyKGN1cnJlbnRQYXJhbXMpO1xuICAgICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgLi4uZGVmYXVsdFJlc3VsdCB9O1xuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiSE9PS19FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcImhvb2suc3RhdHVzXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgSG9va1N0YXR1c1BhcmFtcztcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGhvb2tzPy5zdGF0dXM/LihwLnN0YXR1cyk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDoge30gfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJIT09LX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwidG9vbHMuZXhlY3V0ZVwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIFRvb2xzRXhlY3V0ZVBhcmFtcztcblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoKTogUHJvbWlzZTxScGNSZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgdG9vbHNNYXAgPSB0b29scyA/PyAoe30gYXMgVG9vbFNldCk7XG4gICAgICAgIGNvbnN0IHRvb2xEZWYgPSB0b29sc01hcFtwLm5hbWUgYXMga2V5b2YgdHlwZW9mIHRvb2xzTWFwXTtcbiAgICAgICAgaWYgKCF0b29sRGVmKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiVE9PTF9OT1RfRk9VTkRcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFVua25vd24gdG9vbDogJHtwLm5hbWV9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhlY3V0ZSA9ICh0b29sRGVmIGFzIFRvb2wpLmV4ZWN1dGU7XG4gICAgICAgIGlmICghZXhlY3V0ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICBjb2RlOiBcIk5PX0VYRUNVVEVcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFRvb2wgJHtwLm5hbWV9IGhhcyBubyBleGVjdXRlIGZ1bmN0aW9uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2FuZGJveEluc3RhbmNlID0gZ2V0U2FuZGJveCh7XG4gICAgICAgICAgc2FuZGJveFJlY29yZDogcC5zYW5kYm94UmVjb3JkLFxuICAgICAgICAgIHN0b3JhZ2VDb25maWcsXG4gICAgICAgICAgc3RvcmFnZTogZ2V0U3RvcmFnZUluc3RhbmNlKCksXG4gICAgICAgICAgcnBjLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0b29sQ29udGV4dDogVG9vbENvbnRleHQgPSB7XG4gICAgICAgICAgc2Vzc2lvbjogcC5zZXNzaW9uLFxuICAgICAgICAgIHNhbmRib3g6IHNhbmRib3hJbnN0YW5jZSxcbiAgICAgICAgICBzdG9yYWdlOiBnZXRTdG9yYWdlSW5zdGFuY2UoKSxcbiAgICAgICAgICBjb250ZXh0OiBwLmNvbnRleHQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHRvb2xJbnB1dCA9IHAuaW5wdXQ7XG5cbiAgICAgICAgY29uc3QgYmVmb3JlUmVzdWx0ID0gYXdhaXQgZGlzcGF0Y2goXG4gICAgICAgICAgXCJob29rLnRvb2wuYmVmb3JlXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBuYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gYmVmb3JlUmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIGJlZm9yZVJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZWZvcmVIb29rID0gYmVmb3JlUmVzdWx0LnJlc3VsdCBhcyBIb29rVG9vbEJlZm9yZVJlc3VsdDtcbiAgICAgICAgaWYgKGJlZm9yZUhvb2suc3RvcCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICBjb2RlOiBcIkhPT0tfU1RPUFBFRFwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcInRvb2wuYmVmb3JlIGhvb2sgc3RvcHBlZCBleGVjdXRpb25cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChiZWZvcmVIb29rLmlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b29sSW5wdXQgPSBiZWZvcmVIb29rLmlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUodG9vbElucHV0IGFzIG5ldmVyLCB7XG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgIHRvb2xDYWxsSWQ6IFwicnBjXCIsXG4gICAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhZnRlclJlc3VsdCA9IGF3YWl0IGRpc3BhdGNoKFxuICAgICAgICAgIFwiaG9vay50b29sLmFmdGVyXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBuYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gYWZ0ZXJSZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gYWZ0ZXJSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWZ0ZXJIb29rID0gYWZ0ZXJSZXN1bHQucmVzdWx0IGFzIEhvb2tUb29sQWZ0ZXJSZXN1bHQ7XG4gICAgICAgIGlmIChhZnRlckhvb2suc3RvcCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICBjb2RlOiBcIkhPT0tfU1RPUFBFRFwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcInRvb2wuYWZ0ZXIgaG9vayBzdG9wcGVkIGV4ZWN1dGlvblwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFmdGVySG9vay5yZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IGFmdGVySG9vay5yZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bXCJ0b29scy5leGVjdXRlXCJdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IGF3YWl0IG92ZXJyaWRlPy4ocCk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZWQgPSBoYW5kbGVPdmVycmlkZVJlc3VsdChvdmVycmlkZVJlc3VsdCk7XG4gICAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgZGVmYXVsdEhhbmRsZXIoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJFWEVDVVRFX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gbWV0aG9kIGFzIE1ldGhvZE5hbWU7XG4gICAgICBpZiAoIVNUT1JBR0VfUlBDX01FVEhPRFMuaW5jbHVkZXMobWV0aG9kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJVTktOT1dOX01FVEhPRFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogYFVua25vd24gUlBDIG1ldGhvZDogJHttZXRob2R9YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0SGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPFJwY1Jlc3VsdD4gPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgaGFuZGxlU3RvcmFnZVJlcXVlc3Qoe1xuICAgICAgICAgIGNvbmZpZzogc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGFyYW1zIH0sXG4gICAgICAgICAgbmFtZTogbmFtZSA/PyBzdG9yYWdlQ29uZmlnLm5hbWUgPz8gXCJkZWZhdWx0XCIsXG4gICAgICAgICAgZ2V0U3RvcmFnZUhhbmRsZXJzLFxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bbWV0aG9kTmFtZV0gYXNcbiAgICAgICAgfCAoKHBhcmFtczogdW5rbm93bikgPT4gUHJvbWlzZTxBZ2VudFJwY1Jlc3VsdDx1bmtub3duPj4pXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IGF3YWl0IG92ZXJyaWRlPy4ocGFyYW1zKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGhhbmRsZU92ZXJyaWRlUmVzdWx0KG92ZXJyaWRlUmVzdWx0KTtcbiAgICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkZWZhdWx0SGFuZGxlcigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIlNUT1JBR0VfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJvdXRlcyBzdG9yYWdlIFJQQyByZXF1ZXN0cyBiYXNlZCBvbiBzdG9yYWdlIGNvbmZpZyB0eXBlLlxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVTdG9yYWdlUmVxdWVzdCh7XG4gIGNvbmZpZyxcbiAgcmVxdWVzdCxcbiAgbmFtZSxcbiAgZ2V0U3RvcmFnZUhhbmRsZXJzLFxufToge1xuICBjb25maWc6IFN0b3JhZ2VDb25maWc7XG4gIHJlcXVlc3Q6IFJwY1JlcXVlc3Q7XG4gIG5hbWU6IHN0cmluZztcbiAgZ2V0U3RvcmFnZUhhbmRsZXJzOiAobmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPFN0b3JhZ2VIYW5kbGVycz47XG59KTogUHJvbWlzZTxScGNSZXNwb25zZT4ge1xuICBzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XG4gICAgY2FzZSBcImxvY2FsXCI6IHtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gYXdhaXQgZ2V0U3RvcmFnZUhhbmRsZXJzKG5hbWUpO1xuICAgICAgY29uc3QgeyBoYW5kbGVTdG9yYWdlUnBjIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3N0b3JhZ2UvaGFuZGxlclwiKTtcbiAgICAgIHJldHVybiBoYW5kbGVTdG9yYWdlUnBjKHJlcXVlc3QsIGhhbmRsZXJzKTtcbiAgICB9XG4gICAgY2FzZSBcInZlcmNlbFwiOiB7XG4gICAgICBjb25zdCB7IGdldFZlcmNlbFN0b3JhZ2VDb25maWcgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgXCIuL3N0b3JhZ2UvYmluZGluZ3MvdmVyY2VsXCJcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGdldFZlcmNlbFN0b3JhZ2VDb25maWcoKTtcbiAgICAgIHJldHVybiBhd2FpdCBwcm94eVN0b3JhZ2VSZXF1ZXN0KHtcbiAgICAgICAgdXJsOiByZXNvbHZlZC51cmwsXG4gICAgICAgIGhlYWRlcnM6IHsgLi4ucmVzb2x2ZWQuaGVhZGVycywgXCJ4LWFnZW50LW5hbWVcIjogbmFtZSB9LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgXCJjdXN0b21cIjoge1xuICAgICAgcmV0dXJuIGF3YWl0IHByb3h5U3RvcmFnZVJlcXVlc3Qoe1xuICAgICAgICB1cmw6IHJlc29sdmVBcGlVcmwoeyBhcGk6IGNvbmZpZy51cmwgfSksXG4gICAgICAgIGhlYWRlcnM6IHsgLi4uY29uZmlnLmhlYWRlcnMsIFwieC1hZ2VudC1uYW1lXCI6IG5hbWUgfSxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25maWcgc2F0aXNmaWVzIG5ldmVyO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biBzdG9yYWdlIHR5cGU6ICR7KGNvbmZpZyBhcyB7IHR5cGU6IHN0cmluZyB9KS50eXBlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJveGllcyBhIHN0b3JhZ2UgUlBDIHJlcXVlc3QgdG8gYW4gZXh0ZXJuYWwgVVJMLlxuICovXG5hc3luYyBmdW5jdGlvbiBwcm94eVN0b3JhZ2VSZXF1ZXN0KHtcbiAgdXJsLFxuICBoZWFkZXJzLFxuICByZXF1ZXN0LFxufToge1xuICB1cmw6IHN0cmluZztcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlcXVlc3Q6IFJwY1JlcXVlc3Q7XG59KTogUHJvbWlzZTxScGNSZXNwb25zZT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAuLi5oZWFkZXJzLFxuICAgIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdCksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogXCJQUk9YWV9FUlJPUlwiLFxuICAgICAgICBtZXNzYWdlOiBgU3RvcmFnZSBwcm94eSBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5qc29uKCkgYXMgUHJvbWlzZTxScGNSZXNwb25zZT47XG59XG5cbmZ1bmN0aW9uIHNjaGVtYVRvSnNvblNjaGVtYShzY2hlbWE6IHVua25vd24pOiBKU09OU2NoZW1hNyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc2NoZW1hKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgc2NoZW1hICE9PSBudWxsICYmXG4gICAgXCJfZGVmXCIgaW4gc2NoZW1hICYmXG4gICAgdHlwZW9mIChzY2hlbWEgYXMgei5ab2RUeXBlKS5fZGVmID09PSBcIm9iamVjdFwiXG4gICkge1xuICAgIHJldHVybiB6LnRvSlNPTlNjaGVtYShzY2hlbWEgYXMgei5ab2RUeXBlKSBhcyBKU09OU2NoZW1hNztcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHMgPSBzY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKFN5bWJvbC5mb3IoXCJ2ZXJjZWwuYWkuc2NoZW1hXCIpIGluIHMgJiYgXCJqc29uU2NoZW1hXCIgaW4gcykge1xuICAgICAgcmV0dXJuIHMuanNvblNjaGVtYSBhcyBKU09OU2NoZW1hNztcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgdHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHNjaGVtYSAhPT0gbnVsbCAmJlxuICAgIChcInR5cGVcIiBpbiBzY2hlbWEgfHwgXCJwcm9wZXJ0aWVzXCIgaW4gc2NoZW1hKVxuICApIHtcbiAgICByZXR1cm4gc2NoZW1hIGFzIEpTT05TY2hlbWE3O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFVJTWVzc2FnZSB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IFNlbmRJbnB1dCB9IGZyb20gXCIuLi9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b01lc3NhZ2VBbmRQYXJ0cyh7XG4gIHNlc3Npb25JZCxcbiAgaWQsXG4gIGlucHV0LFxuICBkZWZhdWx0Um9sZSxcbn06IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpbnB1dDogU2VuZElucHV0O1xuICBkZWZhdWx0Um9sZTogVUlNZXNzYWdlW1wicm9sZVwiXTtcbn0pOiB7IG1lc3NhZ2U6IE1lc3NhZ2U7IHBhcnRzOiBQYXJ0W10gfSB7XG4gIGxldCBtZXNzYWdlSWQgPSBpZCA/PyBgbWVzc2FnZV8ke3VsaWQoKX1gO1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZToge1xuICAgICAgICBpZDogbWVzc2FnZUlkLFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHJvbGU6IGRlZmF1bHRSb2xlLFxuICAgICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgICAgaW50ZXJydXB0ZWRBdDogbnVsbCxcbiAgICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICB9LFxuICAgICAgcGFydHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgaWQ6IGBwYXJ0XyR7dWxpZCgpfWAsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgcGFydDogeyB0eXBlOiBcInRleHRcIiwgdGV4dDogaW5wdXQgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuICBpZiAoaW5wdXQuaWQpIHtcbiAgICBtZXNzYWdlSWQgPSBpbnB1dC5pZDtcbiAgfVxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBpZiAoaW5wdXQuaWQpIHtcbiAgICBtZXNzYWdlSWQgPSBpbnB1dC5pZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHN0YXJ0ZWRBdDogbnVsbCxcbiAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG51bGwsXG4gICAgICB1c2FnZTogbnVsbCxcbiAgICAgIHJvbGU6IGlucHV0LnJvbGUgPz8gZGVmYXVsdFJvbGUsXG4gICAgfSxcbiAgICBwYXJ0czogaW5wdXQucGFydHMubWFwKChwYXJ0LCBpbmRleCkgPT4gKHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG1lc3NhZ2VJZCxcbiAgICAgIGlkOiBgcGFydF8ke3VsaWQoKX1gLFxuICAgICAgaW5kZXgsXG4gICAgICBwYXJ0LFxuICAgIH0pKSxcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q0EsY0FDa0M7QUFDbEMsWUFBTSxZQUFZLGlCQUFpQjtBQUVuQyxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJLFdBQVc7QUFDYixjQUFNLFNBQVMsTUFBTSxRQUFRLElBQUksZ0JBQWdCO0FBQ2pELFlBQUksV0FBVyxhQUFhO0FBQzFCLGlCQUFPLFNBQVM7QUFBQSxZQUNkLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLFNBQVMsaUJBQWlCLEVBQUU7QUFBQSxZQUM3RCxFQUFFLFFBQVEsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDRjtBQUVBLFlBQUk7QUFDSixZQUFJO0FBQ0YsaUJBQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxRQUMxQixRQUFRO0FBQ04saUJBQU8sU0FBUztBQUFBLFlBQ2Q7QUFBQSxjQUNFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixTQUFTLG9CQUFvQjtBQUFBLFlBQ2pFO0FBQUEsWUFDQSxFQUFFLFFBQVEsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDRjtBQUVBLGlCQUFTLEtBQUs7QUFDZCxpQkFBUyxLQUFLO0FBQ2QsZUFBTyxNQUFNLFFBQVEsSUFBSSxjQUFjLEtBQUs7QUFBQSxNQUM5QyxPQUFPO0FBQ0wsaUJBQVMsTUFBTTtBQUNmLGlCQUFTLE1BQU07QUFDZixlQUFPLE1BQU0sUUFBUTtBQUFBLE1BQ3ZCO0FBRUEsWUFBTSxrQkFBbUM7QUFBQSxRQUN2QyxPQUFPLFFBQVE7QUFBQSxRQUNmLE9BQU8sUUFBUTtBQUFBLFFBQ2YsZUFDRSxRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxLQUFLLFNBQVM7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUVBLFlBQU0sU0FBUyxNQUFNLFNBQVMsUUFBUSxRQUFRLGlCQUFpQixJQUFJO0FBRW5FLFVBQUksQ0FBQyxXQUFXO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLFNBQVMsV0FBVyxTQUFVLE9BQU8sVUFBVSxNQUFPO0FBQzVELGFBQU8sU0FBUztBQUFBLFFBQ2QsV0FBVyxTQUFTLEVBQUUsT0FBTyxPQUFPLE1BQU0sSUFBSSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQUEsUUFDdEUsRUFBRSxPQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUVBLE9BQU8sRUFBRSxHQUFHLGNBQWMsR0FBRyxRQUFRLE1BQU07QUFBQTtBQUFBLElBRzNDLFlBQVk7QUFBQTtBQUFBLElBT1osWUFBWSxjQUFjLFFBQVE7QUFBQSxJQUVsQyxNQUFNLE1BQU07QUFDVixZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJ1bGlkIiwgInoiLCAibmFtZSIsICJyZXN1bHQiLCAiaGFuZGxlU3RvcmFnZVJwYyIsICJub3ciLCAidWxpZCIsICJzZXNzaW9uIiwgInNraWxsc0RpciJdCn0K
|
|
1179
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC50cyIsICIuLi9zcmMvcnBjLWRpc3BhdGNoLnRzIiwgIi4uL3NyYy91dGlscy9tZXNzYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBnZXRWZXJjZWxPaWRjVG9rZW5TeW5jIH0gZnJvbSBcIkB2ZXJjZWwvb2lkY1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVUlNZXNzYWdlU3RyZWFtLFxuICB0eXBlIEdhdGV3YXlNb2RlbElkLFxuICB0eXBlIEluZmVyVG9vbElucHV0LFxuICB0eXBlIEluZmVyVUlUb29scyxcbiAgdHlwZSBNb2RlbE1lc3NhZ2UsXG4gIHR5cGUgVG9vbFNldCxcbiAgdHlwZSBVSU1lc3NhZ2UsXG4gIHR5cGUgVUlNZXNzYWdlQ2h1bmssXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYWxsIH0gZnJvbSBcImJldHRlci1hbGxcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgeyBnZXRSdW4sIHN0YXJ0IH0gZnJvbSBcIndvcmtmbG93L2FwaVwiO1xuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICB0eXBlIEFnZW50SW5wdXQsXG4gIHR5cGUgQWdlbnRNZXNzYWdlSW5wdXQsXG4gIGFnZW50TWVzc2FnZUhvb2ssXG4gIGFnZW50V29ya2Zsb3csXG4gIGFwcHJvdmFsSG9vayxcbn0gZnJvbSBcIi4vYWdlbnQtd29ya2Zsb3dcIjtcbmltcG9ydCB7XG4gIFNhbmRib3hOb3RGb3VuZEVycm9yLFxuICBTZXNzaW9uRXJyb3IsXG4gIFNlc3Npb25Ob3RGb3VuZEVycm9yLFxufSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgR2VuZXJhdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICB0eXBlIERpc3BhdGNoQ29udGV4dCxcbiAgZGlzcGF0Y2gsXG4gIHR5cGUgSG9va1N0YXR1c1BhcmFtcyxcbiAgdHlwZSBIb29rU3RhdHVzUmVzdWx0LFxuICB0eXBlIEhvb2tUb29sQWZ0ZXJQYXJhbXMsXG4gIHR5cGUgSG9va1Rvb2xBZnRlclJlc3VsdCxcbiAgdHlwZSBIb29rVG9vbEJlZm9yZVBhcmFtcyxcbiAgdHlwZSBIb29rVG9vbEJlZm9yZVJlc3VsdCxcbiAgdHlwZSBUb29sTWV0YWRhdGEsXG4gIHR5cGUgVG9vbHNFeGVjdXRlUGFyYW1zLFxuICB0eXBlIFRvb2xzTmVlZHNBcHByb3ZhbFBhcmFtcyxcbiAgdHlwZSBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQsXG59IGZyb20gXCIuL3JwYy1kaXNwYXRjaFwiO1xuaW1wb3J0IHsgZ2V0U2FuZGJveCB9IGZyb20gXCIuL3NhbmRib3hcIjtcbmltcG9ydCB0eXBlIHsgT25SZXN0YXJ0LCBTYW5kYm94U2V0dXAgfSBmcm9tIFwiLi9zYW5kYm94L3R5cGVzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVTa2lsbHNEaXJzIH0gZnJvbSBcIi4vc2tpbGxzL3BhcnNlclwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbHNEaXIgfSBmcm9tIFwiLi9za2lsbHMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgU3RvcmFnZSBhcyBBZ2VudFN0b3JhZ2UsXG4gIERFRkFVTFRfTkFNRVNQQUNFLFxuICBnZXRTdG9yYWdlLFxuICBMT0NBTF9TVE9SQUdFX1ZFUlNJT04sXG4gIHR5cGUgTWVzc2FnZSxcbiAgdHlwZSBQYXJ0LFxuICB0eXBlIFNhbmRib3hDb25maWcsXG4gIHR5cGUgU3RvcmFnZUNvbmZpZyxcbiAgdHlwZSBIYW5kbGVycyBhcyBTdG9yYWdlSGFuZGxlcnMsXG4gIHR5cGUgU3RvcmFnZU1ldGhvZHMsXG4gIHR5cGUgVHlwZWRTdG9yYWdlLFxufSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgYnVpbHRJblRvb2xzLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vdG9vbHNcIjtcbmltcG9ydCB7IHRvTWVzc2FnZUFuZFBhcnRzIH0gZnJvbSBcIi4vdXRpbHMvbWVzc2FnZVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4vdXRpbHMvdWlcIjtcbmltcG9ydCB7IGNvbXB1dGVTZXNzaW9uVXNhZ2UsIHR5cGUgU2Vzc2lvblVzYWdlIH0gZnJvbSBcIi4vdXRpbHMvdXNhZ2VcIjtcblxuZXhwb3J0IHR5cGUgU2VuZElucHV0ID1cbiAgfCBzdHJpbmdcbiAgfCB7IHJvbGU/OiBVSU1lc3NhZ2VbXCJyb2xlXCJdOyBwYXJ0czogVUlNZXNzYWdlW1wicGFydHNcIl07IGlkPzogc3RyaW5nIH07XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3JzIGVtaXR0ZWQgb3ZlciB0aGUgc3RyZWFtIGR1cmluZyBsb25nLXJ1bm5pbmcgcGhhc2VzLlxuICogRGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgYXMgYGRhdGEtc3RhdHVzYCBjaHVua3Mgd2l0aCBgdHJhbnNpZW50OiB0cnVlYCBcdTIwMTQgbm90IHBlcnNpc3RlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFnZW50U3RhdHVzID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJzYW5kYm94LXNldHVwXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInNhbmRib3gtc2V0dXAtY29sZFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJsb2FkaW5nLXNraWxsc1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJuZWVkcy1hcHByb3ZhbFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJ0aGlua2luZ1wiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJjdXN0b21cIiksIHN0YXR1czogei5zdHJpbmcoKSB9KSxcbl0pO1xuXG5leHBvcnQgdHlwZSBBZ2VudFN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIEFnZW50U3RhdHVzPjtcblxuLyoqXG4gKiBBdWdtZW50ZWQgYFJlYWRhYmxlU3RyZWFtYCByZXR1cm5lZCBieSBgc2Vzc2lvbi5zdHJlYW0oKWAuXG4gKiBQYXNzZXMgYGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1gIGFuZCB3b3JrcyB3aXRoIGBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KWAuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50U3RyZWFtID0gUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+ICYge1xuICAvKiogV3JpdGUgYSB0eXBlZCBzdGF0dXMgdXBkYXRlIHRvIHRoZSBzdHJlYW0gKHRyYW5zaWVudCwgbm90IHBlcnNpc3RlZCkuICovXG4gIHdyaXRlU3RhdHVzOiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogRGF0YSBwYXJ0IHR5cGVzIGVtaXR0ZWQgYnkgZXZlcnkgYWdlbnQgb3ZlciB0aGUgc3RyZWFtLlxuICogVXNlZCBhcyB0aGUgYERBVEFfUEFSVFNgIGdlbmVyaWMgZm9yIGBVSU1lc3NhZ2VgLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudERhdGFUeXBlcyA9IHsgc3RhdHVzOiBBZ2VudFN0YXR1cyB9O1xuXG4vKipcbiAqIEluZmVyIGEgdHlwZWQgVUlNZXNzYWdlIGZyb20gYW4gYWdlbnQgaW5zdGFuY2UuXG4gKiBUb29sIHBhcnRzIGFyZSBkaXNjcmltaW5hdGVkIGJ5IGB0eXBlOiBcInRvb2wtJHtuYW1lfVwiYCB3aXRoIHR5cGVkIGlucHV0L291dHB1dC5cbiAqIERhdGEgcGFydHMgaW5jbHVkZSBgZGF0YS1zdGF0dXNgIHdpdGggdHlwZWQgYEFnZW50U3RhdHVzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IG15QWdlbnQgPSBhZ2VudCh7IHRvb2xzOiB7IG15VG9vbDogdG9vbCh7Li4ufSkgfSB9KTtcbiAqIHR5cGUgTXlNZXNzYWdlID0gdHlwZW9mIG15QWdlbnQuJFVJTWVzc2FnZTtcbiAqIC8vIE15TWVzc2FnZS5wYXJ0cyBpbmNsdWRlcyB7IHR5cGU6IFwidG9vbC1teVRvb2xcIjsgaW5wdXQ6IE15SW5wdXQ7IG91dHB1dDogTXlPdXRwdXQ7IC4uLiB9XG4gKiAvLyBvbkRhdGEgY2FsbGJhY2sgcmVjZWl2ZXMgeyB0eXBlOiBcImRhdGEtc3RhdHVzXCI7IGRhdGE6IEFnZW50U3RhdHVzIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBJbmZlclVJTWVzc2FnZTxBPiA9IEEgZXh0ZW5kcyB7IHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldCB9XG4gID8gVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VD4+XG4gIDogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzPjtcblxudHlwZSBUb29sTmFtZTxUb29scz4gPSBFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lO1xuXG50eXBlIFRvb2xJbnB1dDxUb29scywgSz4gPSBLIGV4dGVuZHMgQnVpbHRJblRvb2xOYW1lXG4gID8gSW5mZXJUb29sSW5wdXQ8KHR5cGVvZiBidWlsdEluVG9vbHMpW0tdPlxuICA6IEsgZXh0ZW5kcyBrZXlvZiBUb29sc1xuICAgID8gVG9vbHNbS10gZXh0ZW5kcyBpbXBvcnQoXCJhaVwiKS5Ub29sXG4gICAgICA/IEluZmVyVG9vbElucHV0PFRvb2xzW0tdPlxuICAgICAgOiB1bmtub3duXG4gICAgOiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBOZWVkc0FwcHJvdmFsTWFwPFRvb2xzPiA9IHtcbiAgW0sgaW4gVG9vbE5hbWU8VG9vbHM+XT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKFxuICAgICAgICBpbnB1dDogVG9vbElucHV0PFRvb2xzLCBLPixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVua25vd247XG4gICAgICAgIH1cbiAgICAgICkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pO1xufTtcblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2FuIGJlIHNldCBwZXItc2Vzc2lvbiwgb3ZlcnJpZGluZyBhZ2VudC1sZXZlbCBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk9wdGlvbnM8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4gPSB7XG4gIC8qKiBUaGUgQUkgbW9kZWwgdG8gdXNlLiAqL1xuICBtb2RlbD86IEdhdGV3YXlNb2RlbElkO1xuICAvKiogU3lzdGVtIHByb21wdCBmb3IgdGhlIEFJIG1vZGVsLiAqL1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIC8qKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gb3IgSUQuIElmIHN0cmluZywgdXNlcyBhcyBzYW5kYm94IElEIHdpdGggaXRzIGNvbmZpZy4gKi9cbiAgc2FuZGJveD86XG4gICAgfCAoU2FuZGJveENvbmZpZyAmIHsgc2V0dXA/OiBTYW5kYm94U2V0dXA7IG9uUmVzdGFydD86IE9uUmVzdGFydCB9KVxuICAgIHwgc3RyaW5nO1xuICAvKiogS2V5LXZhbHVlIG1ldGFkYXRhIHRhZ3MgZm9yIHRoZSBzZXNzaW9uLiAqL1xuICB0YWdzPzogVFRhZ3M7XG4gIC8qKiBEaXJlY3RvcnkgY29udGFpbmluZyBza2lsbCBkZWZpbml0aW9ucyBmb3IgdGhlIGFnZW50LiAqL1xuICBza2lsbHNEaXI/OiBTa2lsbHNEaXI7XG4gIC8qKlxuICAgKiBOYW1lcyBvZiB0b29scyB0byBhY3RpdmF0ZSBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYWdlbnQtbGV2ZWwgdG9vbHMgYXJlIGFjdGl2ZS5cbiAgICogVXNlIHRoaXMgdG8gcmVzdHJpY3Qgd2hpY2ggdG9vbHMgYXJlIGF2YWlsYWJsZSBwZXItc2Vzc2lvbi5cbiAgICovXG4gIGFjdGl2ZVRvb2xzPzogKEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWUpW107XG4gIC8qKiBHZW5lcmF0aW9uIG9wdGlvbnMgKHRlbXBlcmF0dXJlLCBtYXhTdGVwcywgZXRjLikuIE92ZXJyaWRlcyBhZ2VudC1sZXZlbCBkZWZhdWx0cy4gKi9cbiAgZ2VuZXJhdGlvbj86IEdlbmVyYXRpb25PcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PiA9IFBpY2s8XG4gIFNlc3Npb25PcHRpb25zPFRvb2xzPixcbiAgXCJtb2RlbFwiIHwgXCJzeXN0ZW1cIiB8IFwic2tpbGxzRGlyXCIgfCBcImFjdGl2ZVRvb2xzXCIgfCBcImdlbmVyYXRpb25cIlxuPjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIGFnZW50IGluc3RhbmNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgbXlBZ2VudCA9IGFnZW50KHtcbiAqICAgbW9kZWw6IFwiYW50aHJvcGljL2NsYXVkZS1vcHVzLTQuNVwiLFxuICogICBzeXN0ZW06IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50Li4uXCIsXG4gKiAgIHRhZ3NTY2hlbWE6IHoub2JqZWN0KHsgdXNlcklkOiB6LnN0cmluZygpIH0pLFxuICogICBjb250ZXh0U2NoZW1hOiB6Lm9iamVjdCh7IGF1dGhUb2tlbjogei5zdHJpbmcoKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50T3B0aW9uczxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUVGFncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuPiA9IHtcbiAgLyoqXG4gICAqIEFnZW50IG5hbWUuIFVzZWQgdG8gaXNvbGF0ZSBzdG9yYWdlIGRhdGEgLSBkaWZmZXJlbnQgbmFtZXMgaGF2ZSBzZXBhcmF0ZSBkYXRhLlxuICAgKiBAZGVmYXVsdCBcImRlZmF1bHRcIlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0b3JhZ2UgYmFja2VuZCBjb25maWd1cmF0aW9uLlxuICAgKiAtIGB7IHR5cGU6IFwibG9jYWxcIiB9YCAtIGZpbGVzeXN0ZW0gc3RvcmFnZSAoZGV2KVxuICAgKiAtIGB7IHR5cGU6IFwidmVyY2VsXCIgfWAgLSBWZXJjZWwgbWFuYWdlZCBzdG9yYWdlIChwcm9kKVxuICAgKiAtIGB7IHR5cGU6IFwiY3VzdG9tXCIsIHVybDogXCIuLi5cIiB9YCAtIGN1c3RvbSBIVFRQIGJhY2tlbmRcbiAgICogQGRlZmF1bHQgSW5mZXJyZWQgZnJvbSBlbnZpcm9ubWVudDogYHsgdHlwZTogXCJ2ZXJjZWxcIiB9YCB3aGVuIGBWRVJDRUxfT0lEQ19UT0tFTmAgaXMgc2V0LCBgeyB0eXBlOiBcImxvY2FsXCIgfWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VDb25maWc7XG4gIC8qKlxuICAgKiBDdXN0b20gdG9vbHMgYXZhaWxhYmxlIHRvIHRoZSBhZ2VudC5cbiAgICogVGhlc2UgYXJlIGV4cG9zZWQgdmlhIHRoZSBSUEMgaGFuZGxlciBhbmQgY2FsbGVkIG92ZXIgSFRUUC5cbiAgICovXG4gIHRvb2xzPzogVG9vbHM7XG4gIC8qKlxuICAgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIGFnZW50IG9wZXJhdGlvbnMuXG4gICAqL1xuICBob29rcz86IEFnZW50SG9va3M7XG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHNlc3Npb24gdGFncy4gQWxsIHNlc3Npb25zIHNoYXJlIHRoaXMgc2NoZW1hLlxuICAgKiBUYWdzIGFyZSBwZXJzaXN0ZWQgaW4gc3RvcmFnZSBhbmQgc3Vydml2ZSBhY3Jvc3MgcmVxdWVzdHMuXG4gICAqL1xuICB0YWdzU2NoZW1hPzogei5ab2RUeXBlPFRUYWdzPjtcbiAgLyoqXG4gICAqIFNjaGVtYSBmb3IgdHJhbnNpZW50IHRvb2wgY29udGV4dC4gUGFzc2VkIHBlci1yZXF1ZXN0IHZpYSBzZW5kKCkuXG4gICAqIE5PVCBwZXJzaXN0ZWQgLSB1c2UgZm9yIHNlY3JldHMgbGlrZSBhdXRoIHRva2Vucy5cbiAgICovXG4gIGNvbnRleHRTY2hlbWE/OiB6LlpvZFR5cGU8VENvbnRleHQ+O1xuICAvKipcbiAgICogQXBwcm92YWwgcnVsZXMgZm9yIHRvb2xzIHlvdSBkb24ndCBvd24gKGJ1aWx0LWluIG9yIHRoaXJkLXBhcnR5KS5cbiAgICogTWFwcyB0b29sIG5hbWVzIHRvIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRvIGFzay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogbmVlZHNBcHByb3ZhbDoge1xuICAgKiAgIEJhc2g6IChpbnB1dCkgPT4gaW5wdXQuY29tbWFuZC5zdGFydHNXaXRoKFwicm1cIiksXG4gICAqICAgV3JpdGU6IHRydWUsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBuZWVkc0FwcHJvdmFsPzogTmVlZHNBcHByb3ZhbE1hcDxUb29scz47XG4gIC8qKlxuICAgKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gd2l0aCBvcHRpb25hbCBzZXR1cCBhbmQgcmVzdGFydCBob29rcy5cbiAgICpcbiAgICogLSBgc2V0dXAua2V5YDogZXhwbGljaXQgc3RyaW5nIHRvIGNvbnRyb2wgc25hcHNob3QgaW52YWxpZGF0aW9uIChidW1wIHRvIHJlLXJ1bilcbiAgICogLSBgc2V0dXAucnVuYDogYXN5bmMgZnVuY3Rpb24gdGhhdCBydW5zIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc2FuZGJveCwgdGhlbiBnZXRzIHNuYXBzaG90dGVkXG4gICAqIC0gYG9uUmVzdGFydGA6IGFzeW5jIGZ1bmN0aW9uIHRoYXQgcnVucyBldmVyeSB0aW1lIGEgc2FuZGJveCByZXN1bWVzIGZyb20gYSBzbmFwc2hvdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBzYW5kYm94OiB7XG4gICAqICAgdHlwZTogXCJ2ZXJjZWxcIixcbiAgICogICBzZXR1cDoge1xuICAgKiAgICAga2V5OiBcImRldi1lbnYtdjNcIixcbiAgICogICAgIHJ1bjogYXN5bmMgKHNhbmRib3gpID0+IHtcbiAgICogICAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJucG1cIiwgYXJnczogW1wiaVwiLCBcIi1nXCIsIFwidmVyY2VsXCJdIH0pXG4gICAqICAgICB9LFxuICAgKiAgIH0sXG4gICAqICAgb25SZXN0YXJ0OiBhc3luYyAoc2FuZGJveCkgPT4ge1xuICAgKiAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJiYXNoXCIsIGFyZ3M6IFtcIi1jXCIsIFwibnBtIHJ1biBkZXYgJlwiXSB9KVxuICAgKiAgIH0sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzYW5kYm94PzpcbiAgICB8IChTYW5kYm94Q29uZmlnICYgeyBzZXR1cD86IFNhbmRib3hTZXR1cDsgb25SZXN0YXJ0PzogT25SZXN0YXJ0IH0pXG4gICAgfCBzdHJpbmc7XG59ICYgT21pdDxTZXNzaW9uT3B0aW9uczxUb29scywgVFRhZ3M+LCBcInRhZ3NcIiB8IFwic2FuZGJveFwiPjtcblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIHNlc3Npb24vc2FuZGJveCB0YWdzLiBVc2VkIGZvciBnZW5lcmljIGNvbnN0cmFpbnRzLlxuICogRm9yIGFnZW50LWxldmVsIHRhZyB2YWxpZGF0aW9uLCB1c2UgYHRhZ3NTY2hlbWFgIG9wdGlvbiB3aXRoIGEgem9kIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgVGFnc1NjaGVtYSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgYWdlbnQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRIb29rcyA9IHtcbiAgLyoqIENhbGxlZCBiZWZvcmUgYSB0b29sIGlzIGV4ZWN1dGVkLiBDYW4gbW9kaWZ5IGlucHV0IG9yIHRocm93IHRvIGJsb2NrLiAqL1xuICBcInRvb2wuYmVmb3JlXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IGlucHV0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIGFmdGVyIGEgdG9vbCBpcyBleGVjdXRlZC4gQ2FuIG1vZGlmeSByZXN1bHQuICovXG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFnZW50IGVtaXRzIGEgdHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3IuICovXG4gIHN0YXR1cz86IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogUlBDIHJlcXVlc3QgYm9keSBmb3IgYWdlbnQgaGFuZGxlci5cbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gb24gYG1ldGhvZGAgZm9yIHR5cGUtc2FmZSBwYXJhbXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50UnBjUmVxdWVzdCA9IHtcbiAgW0sgaW4ga2V5b2YgQWdlbnRScGNNZXRob2RzXToge1xuICAgIG1ldGhvZDogSztcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXTtcbiAgfTtcbn1ba2V5b2YgQWdlbnRScGNNZXRob2RzXTtcblxuLyoqXG4gKiBSUEMgcmVzcG9uc2UgdHlwZSBmb3IgZGlzcGF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1Jlc3VsdDxUID0gdW5rbm93bj4gPVxuICB8IHsgcmVzdWx0OiBUIH1cbiAgfCB7IGVycm9yOiB7IGNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH07IHN0YXR1cz86IG51bWJlciB9O1xuXG4vKipcbiAqIERpcmVjdCBSUEMgcGF5bG9hZCBmb3Igc3RlcCBmdW5jdGlvbiBjYWxscyAobm8gSFRUUCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1BheWxvYWQgPSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXJhbXM6IHVua25vd247XG59O1xuXG4vKipcbiAqIEFsbCBSUEMgbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIGFnZW50IGhhbmRsZXIuXG4gKiBDb21iaW5lcyB0b29scyBtZXRob2RzLCBob29rcywgYW5kIHN0b3JhZ2UgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2RzID0ge1xuICBcInRvb2xzLmxpc3RcIjogeyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPjsgcmVzdWx0OiBUb29sTWV0YWRhdGFbXSB9O1xuICBcInRvb2xzLmV4ZWN1dGVcIjogeyBwYXJhbXM6IFRvb2xzRXhlY3V0ZVBhcmFtczsgcmVzdWx0OiB1bmtub3duIH07XG4gIFwidG9vbHMubmVlZHNBcHByb3ZhbFwiOiB7XG4gICAgcGFyYW1zOiBUb29sc05lZWRzQXBwcm92YWxQYXJhbXM7XG4gICAgcmVzdWx0OiBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQ7XG4gIH07XG4gIFwiaG9vay50b29sLmJlZm9yZVwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEJlZm9yZVBhcmFtcztcbiAgICByZXN1bHQ6IEhvb2tUb29sQmVmb3JlUmVzdWx0O1xuICB9O1xuICBcImhvb2sudG9vbC5hZnRlclwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEFmdGVyUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1Rvb2xBZnRlclJlc3VsdDtcbiAgfTtcbiAgXCJob29rLnN0YXR1c1wiOiB7XG4gICAgcGFyYW1zOiBIb29rU3RhdHVzUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1N0YXR1c1Jlc3VsdDtcbiAgfTtcbn0gJiBTdG9yYWdlTWV0aG9kcztcblxuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2ROYW1lID0ga2V5b2YgQWdlbnRScGNNZXRob2RzO1xuXG4vKipcbiAqIFJlc3VsdCB0eXBlIGZvciBSUEMgb3ZlcnJpZGUgaGFuZGxlcnMuXG4gKiAtIGB7IG9rOiB0cnVlOyByZXN1bHQ6IFQgfWAgLSByZXR1cm4gdGhpcyByZXN1bHRcbiAqIC0gYHsgb2s6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH1gIC0gcmV0dXJuIHRoaXMgZXJyb3JcbiAqIC0gYG51bGxgIC0gdXNlIGRlZmF1bHQgaGFuZGxlclxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY1Jlc3VsdDxUPiA9XG4gIHwgeyBvazogdHJ1ZTsgcmVzdWx0OiBUIH1cbiAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZyB9XG4gIHwgbnVsbDtcblxuLyoqXG4gKiBPdmVycmlkZSBoYW5kbGVycyBmb3IgYWdlbnQgUlBDIG1ldGhvZHMuXG4gKiBFYWNoIG1ldGhvZCBjYW4gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4uXG4gKiBSZXR1cm4gYG51bGxgIHRvIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY092ZXJyaWRlcyA9IHtcbiAgW0sgaW4gQWdlbnRScGNNZXRob2ROYW1lXT86IChcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXVxuICApID0+IFByb21pc2U8QWdlbnRScGNSZXN1bHQ8QWdlbnRScGNNZXRob2RzW0tdW1wicmVzdWx0XCJdPj47XG59O1xuXG5jb25zdCBpc1ZlcmNlbCA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQm9vbGVhbihnZXRWZXJjZWxPaWRjVG9rZW5TeW5jKCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZ2VudCA9IDxcbiAgVG9vbHMgZXh0ZW5kcyB7fSxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4oXG4gIF9vcHRpb25zPzogQWdlbnRPcHRpb25zPFRvb2xzLCBUVGFncywgVENvbnRleHQ+XG4pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IF9vcHRpb25zID8/IHt9O1xuICBjb25zdCBhZ2VudFNlY3JldCA9IHByb2Nlc3MuZW52LkFHRU5UX1NFQ1JFVDtcbiAgaWYgKCFhZ2VudFNlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQUdFTlRfU0VDUkVUIGVudiB2YXIgaXMgcmVxdWlyZWQuIFVzZSB3aXRoQWdlbnQoKSBvciBzZXQgaXQgbWFudWFsbHkuXCJcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYmFzZVN0b3JhZ2VDb25maWcgPVxuICAgIG9wdGlvbnMuc3RvcmFnZSA/P1xuICAgICgoaXNWZXJjZWwoKVxuICAgICAgPyB7IHR5cGU6IFwidmVyY2VsXCIgfVxuICAgICAgOiB7IHR5cGU6IFwibG9jYWxcIiB9KSBzYXRpc2ZpZXMgU3RvcmFnZUNvbmZpZyk7XG4gIGNvbnN0IHN0b3JhZ2VDb25maWc6IFN0b3JhZ2VDb25maWcgPSB7XG4gICAgLi4uYmFzZVN0b3JhZ2VDb25maWcsXG4gICAgbmFtZTogb3B0aW9ucy5uYW1lID8/IGJhc2VTdG9yYWdlQ29uZmlnLm5hbWUsXG4gIH07XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgaXMgaW5pdGlhbGl6ZWQgbGF6aWx5LlxuICAgKiBVc2VzIGFnZW50T2JqLnJwYyB3aGljaCBpcyB3aXJlZCB1cCBieSB0aGUgbG9hZGVyIGNhbGxpbmcgX19pbml0QWdlbnQuXG4gICAqL1xuICBsZXQgX3N0b3JhZ2U6IEFnZW50U3RvcmFnZSB8IG51bGwgPSBudWxsO1xuICBjb25zdCBnZXRTdG9yYWdlSW5zdGFuY2UgPSAoKTogQWdlbnRTdG9yYWdlID0+IHtcbiAgICBpZiAoIV9zdG9yYWdlKSB7XG4gICAgICBfc3RvcmFnZSA9IGdldFN0b3JhZ2Uoe1xuICAgICAgICBjb25maWc6IHN0b3JhZ2VDb25maWcsXG4gICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBfc3RvcmFnZTtcbiAgfTtcblxuICAvKipcbiAgICogTGF6eS1pbml0aWFsaXplZCBzdG9yYWdlIGhhbmRsZXJzIGZvciBsb2NhbCBzdG9yYWdlLlxuICAgKiBDcmVhdGVkIG9uIGZpcnN0IHN0b3JhZ2UgUlBDIHJlcXVlc3QuXG4gICAqL1xuICBsZXQgc3RvcmFnZUhhbmRsZXJzUHJvbWlzZTogUHJvbWlzZTxTdG9yYWdlSGFuZGxlcnM+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGdldFN0b3JhZ2VIYW5kbGVycyA9IChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0b3JhZ2VIYW5kbGVycz4gPT4ge1xuICAgIGlmIChzdG9yYWdlQ29uZmlnLnR5cGUgIT09IFwibG9jYWxcIikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXCJTdG9yYWdlIGhhbmRsZXJzIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCBzdG9yYWdlXCIpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXN0b3JhZ2VIYW5kbGVyc1Byb21pc2UpIHtcbiAgICAgIHN0b3JhZ2VIYW5kbGVyc1Byb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICAgICAgY29uc3QgeyBjcmVhdGVGaWxlc3lzdGVtSGFuZGxlcnMgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgICBcIi4vc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC1mcy1oYW5kbGVyc1wiXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gc3RvcmFnZUNvbmZpZy5wYXRoID8/IFwiLmFnZW50LXN0b3JhZ2VcIjtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKGJhc2VQYXRoLCBuYW1lLCBMT0NBTF9TVE9SQUdFX1ZFUlNJT04pO1xuICAgICAgICByZXR1cm4gY3JlYXRlRmlsZXN5c3RlbUhhbmRsZXJzKGZ1bGxQYXRoKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuICAgIHJldHVybiBzdG9yYWdlSGFuZGxlcnNQcm9taXNlO1xuICB9O1xuXG4gIC8vIEV4dHJhY3Qgc2V0dXAgYW5kIG9uUmVzdGFydCBmcm9tIGFnZW50LWxldmVsIHNhbmRib3ggb3B0aW9ucyAobm90IHNlcmlhbGl6YWJsZSlcbiAgY29uc3QgYWdlbnRTYW5kYm94T3B0aW9uID0gb3B0aW9ucy5zYW5kYm94O1xuICBjb25zdCBzYW5kYm94U2V0dXAgPVxuICAgIGFnZW50U2FuZGJveE9wdGlvbiAmJiB0eXBlb2YgYWdlbnRTYW5kYm94T3B0aW9uICE9PSBcInN0cmluZ1wiXG4gICAgICA/IGFnZW50U2FuZGJveE9wdGlvbi5zZXR1cFxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNhbmRib3hPblJlc3RhcnQgPVxuICAgIGFnZW50U2FuZGJveE9wdGlvbiAmJiB0eXBlb2YgYWdlbnRTYW5kYm94T3B0aW9uICE9PSBcInN0cmluZ1wiXG4gICAgICA/IGFnZW50U2FuZGJveE9wdGlvbi5vblJlc3RhcnRcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNhbmRib3ggPSBhc3luYyAoXG4gICAgc2FuZGJveElkOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGNvbmZpZz86IFNhbmRib3hDb25maWc7XG4gICAgICB0YWdzPzogVFRhZ3M7XG4gICAgICBzZXR1cD86IFNhbmRib3hTZXR1cDtcbiAgICAgIG9uUmVzdGFydD86IE9uUmVzdGFydDtcbiAgICB9XG4gICkgPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nUmVjb3JkID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcblxuICAgIC8vIENvbXBvc2UgYWdlbnQtbGV2ZWwgYW5kIHNlc3Npb24tbGV2ZWwgc2V0dXAvb25SZXN0YXJ0LlxuICAgIC8vIFNlc3Npb24gc2V0dXAgcnVucyBvbiB0b3Agb2YgYWdlbnQgc2V0dXAgKGUuZy4gYWdlbnQgaW5zdGFsbHMgc2hhcmVkIGRlcHMsXG4gICAgLy8gc2Vzc2lvbiBkb2VzIGdpdCBjbG9uZSArIG5wbSBpbnN0YWxsKS4gVGhlIGNvbXBvc2VkIGtleSBpbmNvcnBvcmF0ZXMgYm90aFxuICAgIC8vIHNvIHNuYXBzaG90IGludmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkuXG4gICAgY29uc3QgcmVzb2x2ZWRTZXR1cDogU2FuZGJveFNldHVwIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdHM/LnNldHVwICYmIHNhbmRib3hTZXR1cFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGtleTogYCR7c2FuZGJveFNldHVwLmtleX06JHtvcHRzLnNldHVwLmtleX1gLFxuICAgICAgICAgICAgcnVuOiBhc3luYyAoc2J4KSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHNhbmRib3hTZXR1cC5ydW4oc2J4KTtcbiAgICAgICAgICAgICAgYXdhaXQgb3B0cy5zZXR1cD8ucnVuKHNieCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiAob3B0cz8uc2V0dXAgPz8gc2FuZGJveFNldHVwKTtcbiAgICBjb25zdCByZXNvbHZlZE9uUmVzdGFydDogT25SZXN0YXJ0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdHM/Lm9uUmVzdGFydCAmJiBzYW5kYm94T25SZXN0YXJ0XG4gICAgICAgID8gYXN5bmMgKHNieCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgc2FuZGJveE9uUmVzdGFydChzYngpO1xuICAgICAgICAgICAgYXdhaXQgb3B0cy5vblJlc3RhcnQ/LihzYngpO1xuICAgICAgICAgIH1cbiAgICAgICAgOiAob3B0cz8ub25SZXN0YXJ0ID8/IHNhbmRib3hPblJlc3RhcnQpO1xuXG4gICAgLy8gU3RyaXAgc2V0dXAvb25SZXN0YXJ0IGZyb20gY29uZmlnIGJlZm9yZSBzdG9yaW5nIChmdW5jdGlvbnMgYXJlbid0IHNlcmlhbGl6YWJsZSlcbiAgICBjb25zdCByZXNvbHZlQ29uZmlnID0gKCk6IFNhbmRib3hDb25maWcgPT4ge1xuICAgICAgaWYgKG9wdHM/LmNvbmZpZykge1xuICAgICAgICByZXR1cm4gb3B0cy5jb25maWc7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2FuZGJveCA9PT0gXCJzdHJpbmdcIiB8fCAhb3B0aW9ucy5zYW5kYm94KSB7XG4gICAgICAgIHJldHVybiBpc1ZlcmNlbCgpID8geyB0eXBlOiBcInZlcmNlbFwiIH0gOiB7IHR5cGU6IFwibG9jYWxcIiB9O1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzZXR1cDogX3MsIG9uUmVzdGFydDogX3IsIC4uLnJlc3QgfSA9IG9wdGlvbnMuc2FuZGJveDtcbiAgICAgIHJldHVybiByZXN0O1xuICAgIH07XG5cbiAgICBpZiAoZXhpc3RpbmdSZWNvcmQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYgKCEoZXhpc3RpbmdSZWNvcmQgaW5zdGFuY2VvZiBTYW5kYm94Tm90Rm91bmRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZXhpc3RpbmdSZWNvcmQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzYW5kYm94UmVjb3JkID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2FuZGJveC5zZXQoe1xuICAgICAgICBpZDogc2FuZGJveElkLFxuICAgICAgICB0YWdzOiBvcHRzPy50YWdzID8/IG51bGwsXG4gICAgICAgIGFjcXVpcmluZ0xvY2tBdDogbnVsbCxcbiAgICAgICAgYWNxdWlyaW5nTG9ja0lkOiBudWxsLFxuICAgICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgIGxhc3RBY3Rpdml0eUF0OiBEYXRlLm5vdygpLFxuICAgICAgICBjb25maWc6IHJlc29sdmVDb25maWcoKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHNhbmRib3hSZWNvcmQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBzYW5kYm94UmVjb3JkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFNhbmRib3g8VFRhZ3M+KHtcbiAgICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgc2FuZGJveFJlY29yZCxcbiAgICAgICAgc3RvcmFnZTogZ2V0U3RvcmFnZUluc3RhbmNlKCksXG4gICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgICBzZXR1cDogcmVzb2x2ZWRTZXR1cCxcbiAgICAgICAgb25SZXN0YXJ0OiByZXNvbHZlZE9uUmVzdGFydCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbmZpZyA9IG9wdHM/LmNvbmZpZyA/PyBleGlzdGluZ1JlY29yZC5jb25maWc7XG4gICAgaWYgKCFlcXVhbChleGlzdGluZ1JlY29yZC5jb25maWcsIG5ld0NvbmZpZykpIHtcbiAgICAgIC8vIHRocm93IG5ldyBTYW5kYm94RXJyb3Ioe1xuICAgICAgLy8gICByZWFzb246IFwic2FuZGJveCBjb25maWcgY2hhbmdlcyBhcmUgbm90IHN1cHBvcnRlZFwiLFxuICAgICAgLy8gfSk7XG4gICAgICBjb25zb2xlLndhcm4oXCJzYW5kYm94IGNvbmZpZyBjaGFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRTYW5kYm94PFRUYWdzPih7XG4gICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgc2FuZGJveFJlY29yZDogZXhpc3RpbmdSZWNvcmQsXG4gICAgICBzdG9yYWdlOiBnZXRTdG9yYWdlSW5zdGFuY2UoKSxcbiAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgc2V0dXA6IHJlc29sdmVkU2V0dXAsXG4gICAgICBvblJlc3RhcnQ6IHJlc29sdmVkT25SZXN0YXJ0LFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFnZW50T2JqID0ge1xuICAgIHNlc3Npb246IGFzeW5jIChcbiAgICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgc2Vzc2lvbk9wdGlvbnM/OiBTZXNzaW9uT3B0aW9uczxUb29scywgVFRhZ3M+XG4gICAgKSA9PiB7XG4gICAgICBsZXQgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogbm9ybWFsaXplIHNhbmRib3ggaW5wdXQgdG8gYSBzYW5kYm94IElEIGFuZCBjb25maWdcbiAgICAgICAqL1xuICAgICAgY29uc3Qgc2FuZGJveElucHV0ID0gc2Vzc2lvbk9wdGlvbnM/LnNhbmRib3ggPz8gb3B0aW9ucy5zYW5kYm94O1xuICAgICAgY29uc3Qgc2FuZGJveElkID1cbiAgICAgICAgdHlwZW9mIHNhbmRib3hJbnB1dCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gc2FuZGJveElucHV0XG4gICAgICAgICAgOiAvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05lc3RlZFRlcm5hcnk6IG9rXG4gICAgICAgICAgICBzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gYHNhbmRib3hfJHt1bGlkKCl9YFxuICAgICAgICAgICAgOiAoc2Vzc2lvbi5zYW5kYm94SWQgPz8gYHNhbmRib3hfJHt1bGlkKCl9YCk7XG4gICAgICAvLyBTdHJpcCBub24tc2VyaWFsaXphYmxlIGZpZWxkcyAoc2V0dXAvb25SZXN0YXJ0KSBiZWZvcmUgcGFzc2luZyBhcyBjb25maWcuXG4gICAgICAvLyBPbmx5IHRyZWF0IHNldHVwL29uUmVzdGFydCBhcyBzZXNzaW9uLWxldmVsIG92ZXJyaWRlcyB3aGVuIHRoZSBzZXNzaW9uXG4gICAgICAvLyBhY3R1YWxseSBwcm92aWRlZCBpdHMgb3duIHNhbmRib3ggY29uZmlnIChub3Qgd2hlbiBmYWxsaW5nIGJhY2sgdG8gYWdlbnQgY29uZmlnKS5cbiAgICAgIGNvbnN0IGhhc1Nlc3Npb25TYW5kYm94ID0gc2Vzc2lvbk9wdGlvbnM/LnNhbmRib3ggIT0gbnVsbDtcbiAgICAgIGxldCBzZXNzaW9uU2V0dXA6IFNhbmRib3hTZXR1cCB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzZXNzaW9uT25SZXN0YXJ0OiBPblJlc3RhcnQgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzYW5kYm94Q29uZmlnOiBTYW5kYm94Q29uZmlnIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdHlwZW9mIHNhbmRib3hJbnB1dCA9PT0gXCJzdHJpbmdcIiB8fCAhc2FuZGJveElucHV0XG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBzZXR1cDogX3MsXG4gICAgICAgICAgICAgICAgb25SZXN0YXJ0OiBfcixcbiAgICAgICAgICAgICAgICAuLi5yZXN0XG4gICAgICAgICAgICAgIH0gPSBzYW5kYm94SW5wdXQgYXMgU2FuZGJveENvbmZpZyAmIHtcbiAgICAgICAgICAgICAgICBzZXR1cD86IFNhbmRib3hTZXR1cDtcbiAgICAgICAgICAgICAgICBvblJlc3RhcnQ/OiBPblJlc3RhcnQ7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChoYXNTZXNzaW9uU2FuZGJveCkge1xuICAgICAgICAgICAgICAgIHNlc3Npb25TZXR1cCA9IF9zO1xuICAgICAgICAgICAgICAgIHNlc3Npb25PblJlc3RhcnQgPSBfcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdDtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICBjb25zdCBzYW5kYm94UHJvbWlzZSA9IHNhbmRib3goXG4gICAgICAgIHNhbmRib3hJZCxcbiAgICAgICAgc2FuZGJveENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHNhbmRib3hDb25maWcsXG4gICAgICAgICAgICAgIHNldHVwOiBzZXNzaW9uU2V0dXAsXG4gICAgICAgICAgICAgIG9uUmVzdGFydDogc2Vzc2lvbk9uUmVzdGFydCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXhpc3RpbmdTZXNzaW9uID0gc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yID8gbnVsbCA6IHNlc3Npb247XG4gICAgICBjb25zdCBza2lsbHNEaXIgPVxuICAgICAgICBzZXNzaW9uT3B0aW9ucz8uc2tpbGxzRGlyID8/XG4gICAgICAgIGV4aXN0aW5nU2Vzc2lvbj8uc2tpbGxzRGlyID8/XG4gICAgICAgIG9wdGlvbnMuc2tpbGxzRGlyID8/XG4gICAgICAgIG51bGw7XG5cbiAgICAgIGlmIChzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBTZXNzaW9uTm90Rm91bmRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1vZGVsID0gc2Vzc2lvbk9wdGlvbnM/Lm1vZGVsID8/IG9wdGlvbnMubW9kZWwgPz8gbnVsbDtcbiAgICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkVycm9yKHtcbiAgICAgICAgICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgcmVhc29uOiBcIk1vZGVsIGlzIG5vdCBzZXRcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXNzaW9uID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5zZXQoe1xuICAgICAgICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlSWQ6IG51bGwsXG4gICAgICAgICAgICBydW5JZDogbnVsbCxcbiAgICAgICAgICAgIHRhZ3M6IHNlc3Npb25PcHRpb25zPy50YWdzID8/IG51bGwsXG4gICAgICAgICAgICBzeXN0ZW06IHNlc3Npb25PcHRpb25zPy5zeXN0ZW0gPz8gb3B0aW9ucy5zeXN0ZW0gPz8gbnVsbCxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgc2FuZGJveElkLFxuICAgICAgICAgICAgc2tpbGxzRGlyOiBza2lsbHNEaXIgPyBub3JtYWxpemVTa2lsbHNEaXJzKHNraWxsc0RpcikgOiBudWxsLFxuICAgICAgICAgICAgaG9va1Rva2VuOiBudWxsLFxuICAgICAgICAgICAgYWN0aXZlVG9vbHM6XG4gICAgICAgICAgICAgIHNlc3Npb25PcHRpb25zPy5hY3RpdmVUb29scyA/PyBvcHRpb25zLmFjdGl2ZVRvb2xzID8/IG51bGwsXG4gICAgICAgICAgICBnZW5lcmF0aW9uOlxuICAgICAgICAgICAgICBvcHRpb25zLmdlbmVyYXRpb24gfHwgc2Vzc2lvbk9wdGlvbnM/LmdlbmVyYXRpb25cbiAgICAgICAgICAgICAgICA/IHsgLi4ub3B0aW9ucy5nZW5lcmF0aW9uLCAuLi5zZXNzaW9uT3B0aW9ucz8uZ2VuZXJhdGlvbiB9XG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHNlc3Npb247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJbnRlcnJ1cHRzIGFsbCBwZW5kaW5nIGFzc2lzdGFudCBtZXNzYWdlcyAoYm90aCBzdHJlYW1pbmcgYW5kIHF1ZXVlZCkuXG4gICAgICAgKiBBIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCBwZW5kaW5nIGlmIGNvbXBsZXRlZEF0ID09PSBudWxsICYmIGludGVycnVwdGVkQXQgPT09IG51bGwuXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGludGVycnVwdEN1cnJlbnRNZXNzYWdlID0gYXN5bmMgKGxhc3RQYXJ0Pzoge1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBwYXJ0OiB1bmtub3duO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlc1Jlc3VsdCA9XG4gICAgICAgICAgYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkubWVzc2FnZS5saXN0KHNlc3Npb25JZCk7XG4gICAgICAgIGlmIChtZXNzYWdlc1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzUmVzdWx0Lml0ZW1zLmZpbHRlcihcbiAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgICAgICAgbS5jb21wbGV0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgbS5pbnRlcnJ1cHRlZEF0ID09PSBudWxsXG4gICAgICAgICk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtb2RlbCBtYXkgaGF2ZSBqdXN0IGNvbXBsZXRlZCBiZXR3ZWVuIHdoZW4gdGhlIGNsaWVudCByZW5kZXJlZCB0aGVcbiAgICAgICAgICogaW50ZXJydXB0IGFuZCB3aGVuIHRoaXMgcmVxdWVzdCBhcnJpdmVkLiBGYWxsIGJhY2sgdG8gdGhlIG1vc3QgcmVjZW50bHlcbiAgICAgICAgICogY29tcGxldGVkIChidXQgbm90IHlldCBpbnRlcnJ1cHRlZCkgYXNzaXN0YW50IG1lc3NhZ2UsIGJ1dCBvbmx5IGlmIGl0XG4gICAgICAgICAqIGZpbmlzaGVkIHdpdGhpbiB0aGUgbGFzdCA1IHNlY29uZHMgdG8gYXZvaWQgcmV0cm9hY3RpdmVseSBjdXR0aW5nIG9mZlxuICAgICAgICAgKiBsb25nLWNvbXBsZXRlZCBtZXNzYWdlcy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgTUFYX1JFVFJPQUNUSVZFX01TID0gNV8wMDA7XG4gICAgICAgICAgY29uc3QgbGF0ZXN0ID0gbWVzc2FnZXNSZXN1bHQuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChtKSA9PlxuICAgICAgICAgICAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgICAgICAgICAgIG0uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG0uY29tcGxldGVkQXQgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBub3cgLSBtLmNvbXBsZXRlZEF0IDwgTUFYX1JFVFJPQUNUSVZFX01TXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5jcmVhdGVkQXQgLSBhLmNyZWF0ZWRBdClcbiAgICAgICAgICAgIC5hdCgwKTtcbiAgICAgICAgICBpZiAobGF0ZXN0KSB7XG4gICAgICAgICAgICBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMgPSBbbGF0ZXN0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzLm1hcCgobSkgPT5cbiAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2Uuc2V0KHtcbiAgICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgICAgaW50ZXJydXB0ZWRBdDogbm93LFxuICAgICAgICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBsYXN0UGFydCA/PyBudWxsLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQXV0by1yZWplY3QgcGVuZGluZyBhcHByb3ZhbHMgYW5kIHNldCBwYXJ0cyB0byB0aGVpciB0ZXJtaW5hbCBzdGF0ZVxuICAgICAgICAgKiBkaXJlY3RseS4gV2UgY2FuJ3QgcmVseSBvbiB0aGUgd29ya2Zsb3cgdG8gdHJhbnNpdGlvbiB0aGUgcGFydCB0b1xuICAgICAgICAgKiBgb3V0cHV0LWRlbmllZGAgYmVjYXVzZSBzZXR0aW5nIGBpbnRlcnJ1cHRlZEF0YCBhYm92ZSBhbHJlYWR5XG4gICAgICAgICAqIHRyaWdnZXJzIGBwb2xsRm9ySW50ZXJydXB0YCB3aGljaCBhYm9ydHMgdGhlIHdvcmtmbG93IFx1MjAxNCB0aGUgYXBwcm92YWxcbiAgICAgICAgICogcG9sbCBsb29wIGdldHMga2lsbGVkIGJlZm9yZSBpdCBjYW4gcHJvY2VzcyB0aGUgZGVuaWFsLlxuICAgICAgICAgKi9cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzUmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlNZXNzYWdlKFxuICAgICAgICAgICAgbS5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHNSZXN1bHQuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcC5wYXJ0ICYmXG4gICAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcHJvdmFsID0gKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSlcbiAgICAgICAgICAgICAgICAuYXBwcm92YWw7XG4gICAgICAgICAgICAgIGlmIChhcHByb3ZhbD8uaWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldCh7XG4gICAgICAgICAgICAgICAgICAuLi5wLFxuICAgICAgICAgICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5hcHByb3ZhbCxcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBcImludGVycnVwdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0gYXMgUGFydCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGFwcHJvdmFsSG9vay5yZXN1bWUoYXBwcm92YWwuaWQsIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLy8gU3ViLXRvb2wgYXBwcm92YWxzIHVzZSBzdG9yYWdlIHBvbGxpbmcsIG5vdCBob29rc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZW5kOiBhc3luYyAoe1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIGludGVycnVwdElmU3RyZWFtaW5nLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBpbnB1dDogU2VuZElucHV0IHwgU2VuZElucHV0W107XG4gICAgICAgICAgaW50ZXJydXB0SWZTdHJlYW1pbmc/OlxuICAgICAgICAgICAgfCBib29sZWFuXG4gICAgICAgICAgICB8IHsgbGFzdFBhcnQ6IHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9IH07XG4gICAgICAgICAgY29udGV4dD86IFRDb250ZXh0O1xuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgaWYgKGludGVycnVwdElmU3RyZWFtaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFydCA9XG4gICAgICAgICAgICAgIHR5cGVvZiBpbnRlcnJ1cHRJZlN0cmVhbWluZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gaW50ZXJydXB0SWZTdHJlYW1pbmcubGFzdFBhcnRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGludGVycnVwdFJlc3VsdCA9IGF3YWl0IGludGVycnVwdEN1cnJlbnRNZXNzYWdlKGxhc3RQYXJ0KTtcbiAgICAgICAgICAgIGlmIChpbnRlcnJ1cHRSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJydXB0UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgICAgICAgY29uc3QgbmV3UGFydHM6IFBhcnRbXSA9IFtdO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IGksXG4gICAgICAgICAgICAgICAgZGVmYXVsdFJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBwYXJ0cyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogd2UgYWxzbyBwcmUtY3JlYXRlIHRoZSBhc3Npc3RhbnQgbWVzc2FnZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VJZCA9IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gICAgICAgICAgY29uc3QgYmFzZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQgPSBiYXNlVGltZSArIG5ld01lc3NhZ2VzLmxlbmd0aDtcbiAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgICAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbjIgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChzZXNzaW9uMiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBzZXNzaW9uMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhZ2VudElucHV0OiBBZ2VudElucHV0ID0ge1xuICAgICAgICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZXZlbnQ6IEFnZW50TWVzc2FnZUlucHV0ID0ge1xuICAgICAgICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgaG9va1Rva2VuOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCA/PyB7fSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGVycm9yZS50cnlBc3luYyh7XG4gICAgICAgICAgICB0cnk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgYWxsKHtcbiAgICAgICAgICAgICAgICBhc3luYyBzYXZlTWVzc2FnZXMoKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgbmV3TWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2Uuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGJhc2VUaW1lICsgaSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXN5bmMgc2F2ZVBhcnRzKCkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIG5ld1BhcnRzLm1hcChnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhc3luYyByZXN1bWVPclN0YXJ0QWdlbnRXb3JrZmxvdygpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uMi5ydW5JZCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZ2VudE1lc3NhZ2VIb29rLnJlc3VtZShzZXNzaW9uSWQsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24yLnJ1bklkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBhd2FpdCBzdGFydChhZ2VudFdvcmtmbG93LCBbXG4gICAgICAgICAgICAgICAgICAgIHsgaW5wdXQ6IGFnZW50SW5wdXQsIGV2ZW50IH0sXG4gICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydFJlc3VsdC5ydW5JZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFzeW5jIHVwZGF0ZVNlc3Npb24oKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBydW5JZCA9IGF3YWl0IHRoaXMuJC5yZXN1bWVPclN0YXJ0QWdlbnRXb3JrZmxvdztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHNlc3Npb24yLmlkLFxuICAgICAgICAgICAgICAgICAgICBydW5JZCxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICBsYXN0TWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgICAgIGhvb2tUb2tlbjogZXZlbnQuaG9va1Rva2VuLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYXRjaDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcmVhc29uOiBgZmFpbGVkIHRvIHNlbmQ6ICR7U3RyaW5nKGUpfWAsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBzdHJlYW06IGFzeW5jIChvcHRzPzoge1xuICAgICAgICAgIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgICAgICAgfSk6IFByb21pc2U8QWdlbnRTdHJlYW0gfCBFcnJvcj4gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBvcHRzPy5tZXNzYWdlSWQgPz8gc2Vzc2lvbi5sYXN0TWVzc2FnZUlkO1xuICAgICAgICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJObyBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZXNzaW9uLnJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJObyBydW4gYXNzb2NpYXRlZCB3aXRoIHNlc3Npb25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBydW4gPSBnZXRSdW4oc2Vzc2lvbi5ydW5JZCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZWFkYWJsZSA9IHJ1bi5nZXRSZWFkYWJsZTxVSU1lc3NhZ2VDaHVuaz4oe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBtZXNzYWdlSWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgZGF0YVdyaXRlcjoge1xuICAgICAgICAgICAgd3JpdGU6IChjaHVuazogVUlNZXNzYWdlQ2h1bmspID0+IHZvaWQ7XG4gICAgICAgICAgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGNvbnN0IG1lcmdlZFN0cmVhbSA9IGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSh7XG4gICAgICAgICAgICBleGVjdXRlOiAoeyB3cml0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgICBkYXRhV3JpdGVyID0gd3JpdGVyO1xuICAgICAgICAgICAgICB3cml0ZXIubWVyZ2Uod29ya2Zsb3dSZWFkYWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obWVyZ2VkU3RyZWFtLCB7XG4gICAgICAgICAgICB3cml0ZVN0YXR1czogKHN0YXR1czogQWdlbnRTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFkYXRhV3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIHdyaXRlciBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRhdGFXcml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0YS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhbnNpZW50OiB0cnVlLFxuICAgICAgICAgICAgICB9IGFzIFVJTWVzc2FnZUNodW5rKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkgYXMgQWdlbnRTdHJlYW07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdWk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWVzc2FnZXNSZXN1bHQsIHBhcnRzUmVzdWx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2UubGlzdChzZXNzaW9uSWQpLFxuICAgICAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCksXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFydHNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzUmVzdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdC5pdGVtcyxcbiAgICAgICAgICAgIHBhcnRzOiBwYXJ0c1Jlc3VsdC5pdGVtcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGxhc3RTdGFydGVkQXNzaXN0YW50ID0gbWVzc2FnZXNSZXN1bHQuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJiBtLnN0YXJ0ZWRBdCAhPT0gbnVsbClcbiAgICAgICAgICAgIC5hdCgtMSk7XG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPVxuICAgICAgICAgICAgbGFzdFN0YXJ0ZWRBc3Npc3RhbnQgJiZcbiAgICAgICAgICAgIGxhc3RTdGFydGVkQXNzaXN0YW50LmNvbXBsZXRlZEF0ID09PSBudWxsICYmXG4gICAgICAgICAgICBsYXN0U3RhcnRlZEFzc2lzdGFudC5pbnRlcnJ1cHRlZEF0ID09PSBudWxsO1xuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ01lc3NhZ2VJZCA9IGlzU3RyZWFtaW5nXG4gICAgICAgICAgICA/IGxhc3RTdGFydGVkQXNzaXN0YW50LmlkXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGNvbXB1dGVTZXNzaW9uVXNhZ2UobWVzc2FnZXNSZXN1bHQuaXRlbXMpO1xuXG4gICAgICAgICAgdHlwZSBUeXBlZE1lc3NhZ2UgPSBVSU1lc3NhZ2U8XG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgQWdlbnREYXRhVHlwZXMsXG4gICAgICAgICAgICBJbmZlclVJVG9vbHM8dHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzPlxuICAgICAgICAgID47XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyB1bmtub3duIGFzIFR5cGVkTWVzc2FnZVtdLFxuICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkLFxuICAgICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgdGFnOiB7XG4gICAgICAgICAgbGlzdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChzZXNzaW9uLnRhZ3MgPz8ge30pIGFzIFRUYWdzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0OiBhc3luYyA8SyBleHRlbmRzIGtleW9mIFRUYWdzICYgc3RyaW5nPihcbiAgICAgICAgICAgIGtleTogS1xuICAgICAgICAgICk6IFByb21pc2U8VFRhZ3NbS10gfCB1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24udGFncz8uW2tleV0gYXMgVFRhZ3NbS10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGFzeW5jIDxLIGV4dGVuZHMga2V5b2YgVFRhZ3MgJiBzdHJpbmc+KFxuICAgICAgICAgICAga2V5OiBLLFxuICAgICAgICAgICAgdmFsdWU6IFRUYWdzW0tdXG4gICAgICAgICAgKTogUHJvbWlzZTx1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi50YWcuc2V0KHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICB0YWdzOiB7IFtrZXldOiB2YWx1ZSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXRNYW55OiBhc3luYyAodGFnczogUGFydGlhbDxUVGFncz4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLnRhZy5zZXQoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHRhZ3M6IHRhZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzYW5kYm94OiBhd2FpdCBzYW5kYm94UHJvbWlzZSxcblxuICAgICAgICBpbnRlcnJ1cHQ6IGludGVycnVwdEN1cnJlbnRNZXNzYWdlLFxuXG4gICAgICAgIHJlc29sdmVBcHByb3ZhbDogYXN5bmMgKHtcbiAgICAgICAgICBhcHByb3ZhbElkLFxuICAgICAgICAgIGFwcHJvdmVkLFxuICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgfToge1xuICAgICAgICAgIGFwcHJvdmFsSWQ6IHN0cmluZztcbiAgICAgICAgICBhcHByb3ZlZDogYm9vbGVhbjtcbiAgICAgICAgICByZWFzb24/OiBzdHJpbmc7XG4gICAgICAgIH0pOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHNSZXN1bHQgPVxuICAgICAgICAgICAgYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1Jlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRQYXJ0ID0gcGFydHNSZXN1bHQuaXRlbXMuZmluZChcbiAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydCAmJlxuICAgICAgICAgICAgICAocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGlkOiBzdHJpbmcgfSB9KS5hcHByb3ZhbD8uaWQgPT09XG4gICAgICAgICAgICAgICAgYXBwcm92YWxJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCF0YXJnZXRQYXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogYEFwcHJvdmFsICR7YXBwcm92YWxJZH0gbm90IGZvdW5kYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQYXJ0ID0ge1xuICAgICAgICAgICAgLi4udGFyZ2V0UGFydCxcbiAgICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgICAgLi4udGFyZ2V0UGFydC5wYXJ0LFxuICAgICAgICAgICAgICBzdGF0ZTogYXBwcm92ZWQgPyBcImFwcHJvdmFsLXJlc3BvbmRlZFwiIDogXCJvdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgICAgIGFwcHJvdmFsOiB7IGlkOiBhcHByb3ZhbElkLCBhcHByb3ZlZCwgcmVhc29uIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgc2V0UmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5zZXQoXG4gICAgICAgICAgICB1cGRhdGVkUGFydCBhcyBQYXJ0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc2V0UmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmlyZSB0aGUgYXBwcm92YWwgaG9vayB0byByZXN1bWUgdGhlIHN1c3BlbmRlZCB3b3JrZmxvdy5cbiAgICAgICAgICAvLyBGb3Igc3ViLXRvb2wgYXBwcm92YWxzIChmcm9tIHRoZSBKYXZhU2NyaXB0IHRvb2wpLCB0aGVyZSdzIG5vXG4gICAgICAgICAgLy8gc3VzcGVuZGVkIGhvb2sgXHUyMDE0IHBvbGxpbmcgaGFuZGxlcyBpdC4gU3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGFwcHJvdmFsSG9vay5yZXN1bWUoYXBwcm92YWxJZCwgeyBhcHByb3ZlZCwgcmVhc29uIH0pO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm8gaG9vayByZWdpc3RlcmVkIGZvciB0aGlzIGFwcHJvdmFsSWQgKGUuZy4gSlMgc3ViLXRvb2wgYXBwcm92YWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSxcblxuICAgICAgICB1c2FnZTogYXN5bmMgKCk6IFByb21pc2U8U2Vzc2lvblVzYWdlIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlc1Jlc3VsdCA9XG4gICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5tZXNzYWdlLmxpc3Qoc2Vzc2lvbklkKTtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29tcHV0ZVNlc3Npb25Vc2FnZShtZXNzYWdlc1Jlc3VsdC5pdGVtcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBhc3luYyAoXG4gICAgICAgICAgdXBkYXRlT3B0aW9uczogU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHM+ICYgeyB0YWdzPzogVFRhZ3MgfVxuICAgICAgICApOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgY29uc3QgeyBza2lsbHNEaXIsIC4uLnJhd1VwZGF0ZXMgfSA9IHVwZGF0ZU9wdGlvbnM7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFVwZGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh7XG4gICAgICAgICAgICAgIC4uLnJhd1VwZGF0ZXMsXG4gICAgICAgICAgICAgIC4uLihza2lsbHNEaXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBza2lsbHNEaXI6IHNraWxsc0RpclxuICAgICAgICAgICAgICAgICAgICAgID8gbm9ybWFsaXplU2tpbGxzRGlycyhza2lsbHNEaXIpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfSkuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhub3JtYWxpemVkVXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAuLi5ub3JtYWxpemVkVXBkYXRlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2FuZGJveCxcbiAgICBnZXQgc3RvcmFnZSgpOiBUeXBlZFN0b3JhZ2U8VFRhZ3M+IHtcbiAgICAgIHJldHVybiBnZXRTdG9yYWdlSW5zdGFuY2UoKSBhcyBUeXBlZFN0b3JhZ2U8VFRhZ3M+O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSUEMgaGFuZGxlciBmb3IgYWdlbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBIYW5kbGVzIHRvb2xzLmxpc3QsIHRvb2xzLmV4ZWN1dGUsIHN0b3JhZ2UgUlBDLCBhbmQgaG9va3MuXG4gICAgICpcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgYHJwY2Agc3RlcCBmdW5jdGlvbiBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgICAqIENhbiBhbHNvIGJlIGV4cG9zZWQgdmlhIEhUVFAgZm9yIGV4dGVybmFsIGFjY2VzcyBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgaGFuZGxlcjogYXN5bmMgKFxuICAgICAgaW5wdXQ6IFJlcXVlc3QgfCBScGNQYXlsb2FkLFxuICAgICAgb3ZlcnJpZGVzPzogQWdlbnRScGNPdmVycmlkZXNcbiAgICApOiBQcm9taXNlPFJlc3BvbnNlIHwgUnBjUmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCBpc1JlcXVlc3QgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3Q7XG5cbiAgICAgIGxldCBtZXRob2Q6IHN0cmluZztcbiAgICAgIGxldCBwYXJhbXM6IHVua25vd247XG4gICAgICBsZXQgbmFtZTogc3RyaW5nO1xuXG4gICAgICBpZiAoaXNSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHNlY3JldCA9IGlucHV0LmhlYWRlcnMuZ2V0KFwieC1hZ2VudC1zZWNyZXRcIik7XG4gICAgICAgIGlmIChzZWNyZXQgIT09IGFnZW50U2VjcmV0KSB7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgICAgICB7IGVycm9yOiB7IGNvZGU6IFwiVU5BVVRIT1JJWkVEXCIsIG1lc3NhZ2U6IFwiSW52YWxpZCBzZWNyZXRcIiB9IH0sXG4gICAgICAgICAgICB7IHN0YXR1czogNDAxIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJvZHk6IEFnZW50UnBjUmVxdWVzdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5ID0gYXdhaXQgaW5wdXQuanNvbigpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHsgY29kZTogXCJJTlZBTElEX1JFUVVFU1RcIiwgbWVzc2FnZTogXCJJbnZhbGlkIEpTT04gYm9keVwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBzdGF0dXM6IDQwMCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGhvZCA9IGJvZHkubWV0aG9kO1xuICAgICAgICBwYXJhbXMgPSBib2R5LnBhcmFtcztcbiAgICAgICAgbmFtZSA9IGlucHV0LmhlYWRlcnMuZ2V0KFwieC1hZ2VudC1uYW1lXCIpID8/IERFRkFVTFRfTkFNRVNQQUNFO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgICBwYXJhbXMgPSBpbnB1dC5wYXJhbXM7XG4gICAgICAgIG5hbWUgPSBpbnB1dC5uYW1lID8/IERFRkFVTFRfTkFNRVNQQUNFO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXNwYXRjaENvbnRleHQ6IERpc3BhdGNoQ29udGV4dCA9IHtcbiAgICAgICAgdG9vbHM6IG9wdGlvbnMudG9vbHMgYXMgVG9vbFNldCB8IHVuZGVmaW5lZCxcbiAgICAgICAgaG9va3M6IG9wdGlvbnMuaG9va3MsXG4gICAgICAgIG5lZWRzQXBwcm92YWw6XG4gICAgICAgICAgb3B0aW9ucy5uZWVkc0FwcHJvdmFsIGFzIERpc3BhdGNoQ29udGV4dFtcIm5lZWRzQXBwcm92YWxcIl0sXG4gICAgICAgIHN0b3JhZ2VDb25maWcsXG4gICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSxcbiAgICAgICAgZ2V0U3RvcmFnZUhhbmRsZXJzLFxuICAgICAgICBycGM6IGFnZW50T2JqLnJwYyxcbiAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGlzcGF0Y2gobWV0aG9kLCBwYXJhbXMsIGRpc3BhdGNoQ29udGV4dCwgbmFtZSk7XG5cbiAgICAgIGlmICghaXNSZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXR1cyA9IFwiZXJyb3JcIiBpbiByZXN1bHQgPyAocmVzdWx0LnN0YXR1cyA/PyA1MDApIDogMjAwO1xuICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgIFwiZXJyb3JcIiBpbiByZXN1bHQgPyB7IGVycm9yOiByZXN1bHQuZXJyb3IgfSA6IHsgcmVzdWx0OiByZXN1bHQucmVzdWx0IH0sXG4gICAgICAgIHsgc3RhdHVzIH1cbiAgICAgICk7XG4gICAgfSxcblxuICAgIHRvb2xzOiB7IC4uLmJ1aWx0SW5Ub29scywgLi4ub3B0aW9ucy50b29scyB9IGFzIHR5cGVvZiBidWlsdEluVG9vbHMgJiBUb29scyxcblxuICAgIC8qKiBQaGFudG9tIHByb3BlcnR5IGZvciB0eXBlIGluZmVyZW5jZS4gVXNlIGB0eXBlb2YgbXlBZ2VudC4kVUlNZXNzYWdlYCB0byBnZXQgdGhlIHR5cGVkIFVJTWVzc2FnZS4gKi9cbiAgICAkVUlNZXNzYWdlOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBVSU1lc3NhZ2U8XG4gICAgICB1bmtub3duLFxuICAgICAgQWdlbnREYXRhVHlwZXMsXG4gICAgICBJbmZlclVJVG9vbHM8dHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzPlxuICAgID4sXG5cbiAgICAvKiogQWdlbnQgbmFtZSB1c2VkIGFzIGtleSBmb3IgdGhlIFJQQyByZWdpc3RyeS4gU2V0IGJ5IHRoZSBsb2FkZXIgaW5pdC4gKi9cbiAgICBfYWdlbnROYW1lOiBzdG9yYWdlQ29uZmlnLm5hbWUgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG5cbiAgICBycGM6ICgoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwicnBjIG5vdCBjb25maWd1cmVkLiBFbnN1cmUgd2l0aEFnZW50IGlzIHNldCB1cCBpbiBuZXh0LmNvbmZpZy50c1wiXG4gICAgICApO1xuICAgIH0pIGFzIChwYXJhbXM6IFJwY1BheWxvYWQpID0+IFByb21pc2U8UnBjUmVzdWx0PixcbiAgfTtcblxuICByZXR1cm4gYWdlbnRPYmo7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcsIFRvb2wsIFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFnZW50UnBjT3ZlcnJpZGVzLFxuICBBZ2VudFJwY1Jlc3VsdCxcbiAgQWdlbnRTdGF0dXMsXG4gIFJwY1Jlc3VsdCxcbn0gZnJvbSBcIi4vY2xpZW50XCI7XG5pbXBvcnQgeyBnZXRTYW5kYm94IH0gZnJvbSBcIi4vc2FuZGJveFwiO1xuaW1wb3J0IHR5cGUge1xuICBTdG9yYWdlIGFzIEFnZW50U3RvcmFnZSxcbiAgTWV0aG9kTmFtZSxcbiAgUnBjRm4sXG4gIFJwY1JlcXVlc3QsXG4gIFJwY1Jlc3BvbnNlLFxuICBTYW5kYm94UmVjb3JkLFxuICBTZXNzaW9uLFxuICBTdG9yYWdlQ29uZmlnLFxuICBIYW5kbGVycyBhcyBTdG9yYWdlSGFuZGxlcnMsXG59IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNUT1JBR0VfUlBDX01FVEhPRFMgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgcmVzb2x2ZUFwaVVybCwgdHlwZSBUb29sQ29udGV4dCB9IGZyb20gXCIuL3Rvb2xzXCI7XG5cbmV4cG9ydCB0eXBlIFRvb2xNZXRhZGF0YSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5wdXRTY2hlbWE/OiBKU09OU2NoZW1hNztcbn07XG5cbmV4cG9ydCB0eXBlIFRvb2xzRXhlY3V0ZVBhcmFtcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgc2FuZGJveFJlY29yZDogU2FuZGJveFJlY29yZDtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEJlZm9yZVBhcmFtcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgY29udGV4dDogVG9vbENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEJlZm9yZVJlc3VsdCA9IHtcbiAgaW5wdXQ/OiB1bmtub3duO1xuICBzdG9wPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEhvb2tUb29sQWZ0ZXJQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIHJlc3VsdDogdW5rbm93bjtcbiAgY29udGV4dDogVG9vbENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEFmdGVyUmVzdWx0ID0ge1xuICByZXN1bHQ/OiB1bmtub3duO1xuICBzdG9wPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRvb2xzTmVlZHNBcHByb3ZhbFBhcmFtcyA9IHtcbiAgdG9vbE5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgbWVzc2FnZXM6IHVua25vd25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRvb2xzTmVlZHNBcHByb3ZhbFJlc3VsdCA9IGJvb2xlYW47XG5cbmV4cG9ydCB0eXBlIEhvb2tTdGF0dXNQYXJhbXMgPSB7XG4gIHN0YXR1czogQWdlbnRTdGF0dXM7XG59O1xuXG5leHBvcnQgdHlwZSBIb29rU3RhdHVzUmVzdWx0ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG50eXBlIEFnZW50SG9va3MgPSB7XG4gIFwidG9vbC5iZWZvcmVcIj86IChvcHRzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgaW5wdXQ6IHVua25vd24gfT47XG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICBzdGF0dXM/OiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59O1xuXG50eXBlIE5lZWRzQXBwcm92YWxFbnRyeSA9XG4gIHwgYm9vbGVhblxuICB8ICgoXG4gICAgICBpbnB1dDogdW5rbm93bixcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdG9vbENhbGxJZDogc3RyaW5nO1xuICAgICAgICBtZXNzYWdlczogdW5rbm93bltdO1xuICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5rbm93bjtcbiAgICAgIH1cbiAgICApID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KTtcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hDb250ZXh0ID0ge1xuICB0b29sczogVG9vbFNldCB8IHVuZGVmaW5lZDtcbiAgaG9va3M6IEFnZW50SG9va3MgfCB1bmRlZmluZWQ7XG4gIG5lZWRzQXBwcm92YWw6IFJlY29yZDxzdHJpbmcsIE5lZWRzQXBwcm92YWxFbnRyeT4gfCB1bmRlZmluZWQ7XG4gIHN0b3JhZ2VDb25maWc6IFN0b3JhZ2VDb25maWc7XG4gIGdldFN0b3JhZ2VJbnN0YW5jZTogKCkgPT4gQWdlbnRTdG9yYWdlO1xuICBnZXRTdG9yYWdlSGFuZGxlcnM6IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8U3RvcmFnZUhhbmRsZXJzPjtcbiAgcnBjOiBScGNGbjtcbiAgb3ZlcnJpZGVzPzogQWdlbnRScGNPdmVycmlkZXM7XG59O1xuXG4vKiogRGVmYXVsdCBuZWVkc0FwcHJvdmFsIGZvciBidWlsdC1pbiB0b29scyAodXNlciBjYW4gb3ZlcnJpZGUgdmlhIG5lZWRzQXBwcm92YWwgY29uZmlnKS4gKi9cbmNvbnN0IGJ1aWx0aW5OZWVkc0FwcHJvdmFsOiBQYXJ0aWFsPFxuICBSZWNvcmQ8QnVpbHRJblRvb2xOYW1lLCBOZWVkc0FwcHJvdmFsRW50cnk+XG4+ID0ge307XG5cbi8qKlxuICogQ29udmVydHMgYW4gb3ZlcnJpZGUgcmVzdWx0IHRvIFJwY1Jlc3VsdCwgb3IgbnVsbCB0byBmYWxsIHRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU92ZXJyaWRlUmVzdWx0PFQ+KHJlczogQWdlbnRScGNSZXN1bHQ8VD4pOiBScGNSZXN1bHQ8VD4gfCBudWxsIHtcbiAgaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChyZXMub2spIHtcbiAgICByZXR1cm4geyByZXN1bHQ6IHJlcy5yZXN1bHQgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiB7IGNvZGU6IFwiSEFORExFUl9FUlJPUlwiLCBtZXNzYWdlOiByZXMuZXJyb3IgfSxcbiAgICBzdGF0dXM6IDQwMCxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBkaXNwYXRjaCBmdW5jdGlvbi4gUmV0dXJucyBScGNSZXN1bHQsIG5vdCBSZXNwb25zZS5cbiAqIEVuYWJsZXMgcmVjdXJzaXZlIGNhbGxzIGZvciBob29rcyB3aXRob3V0IEpTT04gcm91bmQtdHJpcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaChcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHBhcmFtczogdW5rbm93bixcbiAgY29udGV4dDogRGlzcGF0Y2hDb250ZXh0LFxuICBuYW1lPzogc3RyaW5nXG4pOiBQcm9taXNlPFJwY1Jlc3VsdD4ge1xuICBjb25zdCB7XG4gICAgdG9vbHMsXG4gICAgaG9va3MsXG4gICAgbmVlZHNBcHByb3ZhbCxcbiAgICBzdG9yYWdlQ29uZmlnLFxuICAgIGdldFN0b3JhZ2VJbnN0YW5jZSxcbiAgICBnZXRTdG9yYWdlSGFuZGxlcnMsXG4gICAgcnBjLFxuICAgIG92ZXJyaWRlcyxcbiAgfSA9IGNvbnRleHQ7XG5cbiAgc3dpdGNoIChtZXRob2QpIHtcbiAgICBjYXNlIFwidG9vbHMubGlzdFwiOiB7XG4gICAgICBjb25zdCBkZWZhdWx0SGFuZGxlciA9ICgpOiBScGNSZXN1bHQ8VG9vbE1ldGFkYXRhW10+ID0+IHtcbiAgICAgICAgY29uc3QgdG9vbHNNYXAgPSB0b29scyA/PyAoe30gYXMgVG9vbFNldCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5lbnRyaWVzKHRvb2xzTWFwKS5tYXAoKFtuYW1lLCB0XSkgPT4gKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAodCBhcyBUb29sKS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogc2NoZW1hVG9Kc29uU2NoZW1hKCh0IGFzIFRvb2wpLmlucHV0U2NoZW1hKSxcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bXCJ0b29scy5saXN0XCJdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IGF3YWl0IG92ZXJyaWRlPy4oe30pO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVkID0gaGFuZGxlT3ZlcnJpZGVSZXN1bHQob3ZlcnJpZGVSZXN1bHQpO1xuICAgICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiSEFORExFUl9FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcInRvb2xzLm5lZWRzQXBwcm92YWxcIjoge1xuICAgICAgY29uc3QgcCA9IHBhcmFtcyBhcyBUb29sc05lZWRzQXBwcm92YWxQYXJhbXM7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKCk6IFByb21pc2U8UnBjUmVzdWx0PGJvb2xlYW4+PiA9PiB7XG4gICAgICAgIC8vIDEuIFBlci10b29sIG5lZWRzQXBwcm92YWwgb24gY3VzdG9tIHRvb2xzIHRha2VzIHByaW9yaXR5XG4gICAgICAgIGNvbnN0IHRvb2xzTWFwID0gdG9vbHMgPz8gKHt9IGFzIFRvb2xTZXQpO1xuICAgICAgICBjb25zdCB0b29sRGVmID0gdG9vbHNNYXBbcC50b29sTmFtZV0gYXMgVG9vbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRvb2xEZWY/Lm5lZWRzQXBwcm92YWwgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdG9vbERlZi5uZWVkc0FwcHJvdmFsID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiB0b29sRGVmLm5lZWRzQXBwcm92YWwgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdG9vbERlZi5uZWVkc0FwcHJvdmFsKHAuaW5wdXQsIHtcbiAgICAgICAgICAgIHRvb2xDYWxsSWQ6IHAudG9vbENhbGxJZCxcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBwLm1lc3NhZ2VzIGFzIG5ldmVyW10sXG4gICAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gQWdlbnQtbGV2ZWwgbmVlZHNBcHByb3ZhbCBtYXAsIGZhbGxpbmcgYmFjayB0byBidWlsdC1pbiBkZWZhdWx0c1xuICAgICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgICAgbmVlZHNBcHByb3ZhbD8uW3AudG9vbE5hbWVdID8/XG4gICAgICAgICAgYnVpbHRpbk5lZWRzQXBwcm92YWxbcC50b29sTmFtZSBhcyBCdWlsdEluVG9vbE5hbWVdID8/XG4gICAgICAgICAgZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBlbnRyeSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudHJ5KHAuaW5wdXQsIHtcbiAgICAgICAgICB0b29sQ2FsbElkOiBwLnRvb2xDYWxsSWQsXG4gICAgICAgICAgbWVzc2FnZXM6IHAubWVzc2FnZXMsXG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcInRvb2xzLm5lZWRzQXBwcm92YWxcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGhhbmRsZU92ZXJyaWRlUmVzdWx0KG92ZXJyaWRlUmVzdWx0KTtcbiAgICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkZWZhdWx0SGFuZGxlcigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIk5FRURTX0FQUFJPVkFMX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwiaG9vay50b29sLmJlZm9yZVwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIEhvb2tUb29sQmVmb3JlUGFyYW1zO1xuXG4gICAgICBjb25zdCBkZWZhdWx0SGFuZGxlciA9IGFzeW5jIChcbiAgICAgICAgaG9va1BhcmFtczogSG9va1Rvb2xCZWZvcmVQYXJhbXNcbiAgICAgICk6IFByb21pc2U8SG9va1Rvb2xCZWZvcmVSZXN1bHQ+ID0+IHtcbiAgICAgICAgaWYgKCFob29rcz8uW1widG9vbC5iZWZvcmVcIl0pIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9va1Jlc3VsdCA9IGF3YWl0IGhvb2tzW1widG9vbC5iZWZvcmVcIl0oaG9va1BhcmFtcyk7XG4gICAgICAgIHJldHVybiBob29rUmVzdWx0ID8/IHt9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcImhvb2sudG9vbC5iZWZvcmVcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBjdXJyZW50UGFyYW1zID0gcDtcbiAgICAgICAgbGV0IG1lcmdlZDogSG9va1Rvb2xCZWZvcmVSZXN1bHQgPSB7fTtcblxuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IGF3YWl0IG92ZXJyaWRlPy4ocCk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdD8ub2spIHtcbiAgICAgICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgLi4ub3ZlcnJpZGVSZXN1bHQucmVzdWx0IH07XG4gICAgICAgICAgaWYgKG1lcmdlZC5zdG9wKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IG1lcmdlZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQucmVzdWx0LmlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRQYXJhbXMsXG4gICAgICAgICAgICAgIGlucHV0OiBvdmVycmlkZVJlc3VsdC5yZXN1bHQuaW5wdXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSZXN1bHQgPSBhd2FpdCBkZWZhdWx0SGFuZGxlcihjdXJyZW50UGFyYW1zKTtcbiAgICAgICAgbWVyZ2VkID0geyAuLi5tZXJnZWQsIC4uLmRlZmF1bHRSZXN1bHQgfTtcblxuICAgICAgICByZXR1cm4geyByZXN1bHQ6IG1lcmdlZCB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIkhPT0tfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgXCJob29rLnRvb2wuYWZ0ZXJcIjoge1xuICAgICAgY29uc3QgcCA9IHBhcmFtcyBhcyBIb29rVG9vbEFmdGVyUGFyYW1zO1xuXG4gICAgICBjb25zdCBkZWZhdWx0SGFuZGxlciA9IGFzeW5jIChcbiAgICAgICAgaG9va1BhcmFtczogSG9va1Rvb2xBZnRlclBhcmFtc1xuICAgICAgKTogUHJvbWlzZTxIb29rVG9vbEFmdGVyUmVzdWx0PiA9PiB7XG4gICAgICAgIGlmICghaG9va3M/LltcInRvb2wuYWZ0ZXJcIl0pIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9va1Jlc3VsdCA9IGF3YWl0IGhvb2tzW1widG9vbC5hZnRlclwiXShob29rUGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGhvb2tSZXN1bHQgPz8ge307XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1wiaG9vay50b29sLmFmdGVyXCJdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgY3VycmVudFBhcmFtcyA9IHA7XG4gICAgICAgIGxldCBtZXJnZWQ6IEhvb2tUb29sQWZ0ZXJSZXN1bHQgPSB7fTtcblxuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IGF3YWl0IG92ZXJyaWRlPy4ocCk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdD8ub2spIHtcbiAgICAgICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgLi4ub3ZlcnJpZGVSZXN1bHQucmVzdWx0IH07XG4gICAgICAgICAgaWYgKG1lcmdlZC5zdG9wKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IG1lcmdlZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQucmVzdWx0LnJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgICAuLi5jdXJyZW50UGFyYW1zLFxuICAgICAgICAgICAgICByZXN1bHQ6IG92ZXJyaWRlUmVzdWx0LnJlc3VsdC5yZXN1bHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSZXN1bHQgPSBhd2FpdCBkZWZhdWx0SGFuZGxlcihjdXJyZW50UGFyYW1zKTtcbiAgICAgICAgbWVyZ2VkID0geyAuLi5tZXJnZWQsIC4uLmRlZmF1bHRSZXN1bHQgfTtcblxuICAgICAgICByZXR1cm4geyByZXN1bHQ6IG1lcmdlZCB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIkhPT0tfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgXCJob29rLnN0YXR1c1wiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIEhvb2tTdGF0dXNQYXJhbXM7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBob29rcz8uc3RhdHVzPy4ocC5zdGF0dXMpO1xuICAgICAgICByZXR1cm4geyByZXN1bHQ6IHt9IH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiSE9PS19FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcInRvb2xzLmV4ZWN1dGVcIjoge1xuICAgICAgY29uc3QgcCA9IHBhcmFtcyBhcyBUb29sc0V4ZWN1dGVQYXJhbXM7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKCk6IFByb21pc2U8UnBjUmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IHRvb2xzTWFwID0gdG9vbHMgPz8gKHt9IGFzIFRvb2xTZXQpO1xuICAgICAgICBjb25zdCB0b29sRGVmID0gdG9vbHNNYXBbcC5uYW1lIGFzIGtleW9mIHR5cGVvZiB0b29sc01hcF07XG4gICAgICAgIGlmICghdG9vbERlZikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICBjb2RlOiBcIlRPT0xfTk9UX0ZPVU5EXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmtub3duIHRvb2w6ICR7cC5uYW1lfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4ZWN1dGUgPSAodG9vbERlZiBhcyBUb29sKS5leGVjdXRlO1xuICAgICAgICBpZiAoIWV4ZWN1dGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgY29kZTogXCJOT19FWEVDVVRFXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBUb29sICR7cC5uYW1lfSBoYXMgbm8gZXhlY3V0ZSBmdW5jdGlvbmAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNhbmRib3hJbnN0YW5jZSA9IGdldFNhbmRib3goe1xuICAgICAgICAgIHNhbmRib3hSZWNvcmQ6IHAuc2FuZGJveFJlY29yZCxcbiAgICAgICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgICAgIHN0b3JhZ2U6IGdldFN0b3JhZ2VJbnN0YW5jZSgpLFxuICAgICAgICAgIHJwYyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdG9vbENvbnRleHQ6IFRvb2xDb250ZXh0ID0ge1xuICAgICAgICAgIHNlc3Npb246IHAuc2Vzc2lvbixcbiAgICAgICAgICBzYW5kYm94OiBzYW5kYm94SW5zdGFuY2UsXG4gICAgICAgICAgc3RvcmFnZTogZ2V0U3RvcmFnZUluc3RhbmNlKCksXG4gICAgICAgICAgY29udGV4dDogcC5jb250ZXh0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCB0b29sSW5wdXQgPSBwLmlucHV0O1xuXG4gICAgICAgIGNvbnN0IGJlZm9yZVJlc3VsdCA9IGF3YWl0IGRpc3BhdGNoKFxuICAgICAgICAgIFwiaG9vay50b29sLmJlZm9yZVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICAgICAgICBjb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgbmFtZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXCJlcnJvclwiIGluIGJlZm9yZVJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiBiZWZvcmVSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3JlSG9vayA9IGJlZm9yZVJlc3VsdC5yZXN1bHQgYXMgSG9va1Rvb2xCZWZvcmVSZXN1bHQ7XG4gICAgICAgIGlmIChiZWZvcmVIb29rLnN0b3ApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgY29kZTogXCJIT09LX1NUT1BQRURcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogXCJ0b29sLmJlZm9yZSBob29rIHN0b3BwZWQgZXhlY3V0aW9uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVmb3JlSG9vay5pbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9vbElucHV0ID0gYmVmb3JlSG9vay5pbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBleGVjdXRlKHRvb2xJbnB1dCBhcyBuZXZlciwge1xuICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgICAgICB0b29sQ2FsbElkOiBcInJwY1wiLFxuICAgICAgICAgIG1lc3NhZ2VzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJSZXN1bHQgPSBhd2FpdCBkaXNwYXRjaChcbiAgICAgICAgICBcImhvb2sudG9vbC5hZnRlclwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgbmFtZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXCJlcnJvclwiIGluIGFmdGVyUmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIGFmdGVyUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFmdGVySG9vayA9IGFmdGVyUmVzdWx0LnJlc3VsdCBhcyBIb29rVG9vbEFmdGVyUmVzdWx0O1xuICAgICAgICBpZiAoYWZ0ZXJIb29rLnN0b3ApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgY29kZTogXCJIT09LX1NUT1BQRURcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogXCJ0b29sLmFmdGVyIGhvb2sgc3RvcHBlZCBleGVjdXRpb25cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZnRlckhvb2sucmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSBhZnRlckhvb2sucmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1widG9vbHMuZXhlY3V0ZVwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHApO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVkID0gaGFuZGxlT3ZlcnJpZGVSZXN1bHQob3ZlcnJpZGVSZXN1bHQpO1xuICAgICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlZmF1bHRIYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiRVhFQ1VURV9FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG1ldGhvZCBhcyBNZXRob2ROYW1lO1xuICAgICAgaWYgKCFTVE9SQUdFX1JQQ19NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiVU5LTk9XTl9NRVRIT0RcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmtub3duIFJQQyBtZXRob2Q6ICR7bWV0aG9kfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoKTogUHJvbWlzZTxScGNSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGhhbmRsZVN0b3JhZ2VSZXF1ZXN0KHtcbiAgICAgICAgICBjb25maWc6IHN0b3JhZ2VDb25maWcsXG4gICAgICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhcmFtcyB9LFxuICAgICAgICAgIG5hbWU6IG5hbWUgPz8gc3RvcmFnZUNvbmZpZy5uYW1lID8/IFwiZGVmYXVsdFwiLFxuICAgICAgICAgIGdldFN0b3JhZ2VIYW5kbGVycyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW21ldGhvZE5hbWVdIGFzXG4gICAgICAgIHwgKChwYXJhbXM6IHVua25vd24pID0+IFByb21pc2U8QWdlbnRScGNSZXN1bHQ8dW5rbm93bj4+KVxuICAgICAgICB8IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHBhcmFtcyk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZWQgPSBoYW5kbGVPdmVycmlkZVJlc3VsdChvdmVycmlkZVJlc3VsdCk7XG4gICAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgZGVmYXVsdEhhbmRsZXIoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJTVE9SQUdFX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSb3V0ZXMgc3RvcmFnZSBSUEMgcmVxdWVzdHMgYmFzZWQgb24gc3RvcmFnZSBjb25maWcgdHlwZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlU3RvcmFnZVJlcXVlc3Qoe1xuICBjb25maWcsXG4gIHJlcXVlc3QsXG4gIG5hbWUsXG4gIGdldFN0b3JhZ2VIYW5kbGVycyxcbn06IHtcbiAgY29uZmlnOiBTdG9yYWdlQ29uZmlnO1xuICByZXF1ZXN0OiBScGNSZXF1ZXN0O1xuICBuYW1lOiBzdHJpbmc7XG4gIGdldFN0b3JhZ2VIYW5kbGVyczogKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxTdG9yYWdlSGFuZGxlcnM+O1xufSk6IFByb21pc2U8UnBjUmVzcG9uc2U+IHtcbiAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgIGNhc2UgXCJsb2NhbFwiOiB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IGF3YWl0IGdldFN0b3JhZ2VIYW5kbGVycyhuYW1lKTtcbiAgICAgIGNvbnN0IHsgaGFuZGxlU3RvcmFnZVJwYyB9ID0gYXdhaXQgaW1wb3J0KFwiLi9zdG9yYWdlL2hhbmRsZXJcIik7XG4gICAgICByZXR1cm4gaGFuZGxlU3RvcmFnZVJwYyhyZXF1ZXN0LCBoYW5kbGVycyk7XG4gICAgfVxuICAgIGNhc2UgXCJ2ZXJjZWxcIjoge1xuICAgICAgY29uc3QgeyBnZXRWZXJjZWxTdG9yYWdlQ29uZmlnIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAgIFwiLi9zdG9yYWdlL2JpbmRpbmdzL3ZlcmNlbFwiXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBnZXRWZXJjZWxTdG9yYWdlQ29uZmlnKCk7XG4gICAgICByZXR1cm4gYXdhaXQgcHJveHlTdG9yYWdlUmVxdWVzdCh7XG4gICAgICAgIHVybDogcmVzb2x2ZWQudXJsLFxuICAgICAgICBoZWFkZXJzOiB7IC4uLnJlc29sdmVkLmhlYWRlcnMsIFwieC1hZ2VudC1uYW1lXCI6IG5hbWUgfSxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIFwiY3VzdG9tXCI6IHtcbiAgICAgIHJldHVybiBhd2FpdCBwcm94eVN0b3JhZ2VSZXF1ZXN0KHtcbiAgICAgICAgdXJsOiByZXNvbHZlQXBpVXJsKHsgYXBpOiBjb25maWcudXJsIH0pLFxuICAgICAgICBoZWFkZXJzOiB7IC4uLmNvbmZpZy5oZWFkZXJzLCBcIngtYWdlbnQtbmFtZVwiOiBuYW1lIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uZmlnIHNhdGlzZmllcyBuZXZlcjtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gc3RvcmFnZSB0eXBlOiAkeyhjb25maWcgYXMgeyB0eXBlOiBzdHJpbmcgfSkudHlwZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3hpZXMgYSBzdG9yYWdlIFJQQyByZXF1ZXN0IHRvIGFuIGV4dGVybmFsIFVSTC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJveHlTdG9yYWdlUmVxdWVzdCh7XG4gIHVybCxcbiAgaGVhZGVycyxcbiAgcmVxdWVzdCxcbn06IHtcbiAgdXJsOiBzdHJpbmc7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZXF1ZXN0OiBScGNSZXF1ZXN0O1xufSk6IFByb21pc2U8UnBjUmVzcG9uc2U+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgLi4uaGVhZGVycyxcbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IFwiUFJPWFlfRVJST1JcIixcbiAgICAgICAgbWVzc2FnZTogYFN0b3JhZ2UgcHJveHkgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpIGFzIFByb21pc2U8UnBjUmVzcG9uc2U+O1xufVxuXG5mdW5jdGlvbiBzY2hlbWFUb0pzb25TY2hlbWEoc2NoZW1hOiB1bmtub3duKTogSlNPTlNjaGVtYTcgfCB1bmRlZmluZWQge1xuICBpZiAoIXNjaGVtYSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoXG4gICAgdHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHNjaGVtYSAhPT0gbnVsbCAmJlxuICAgIFwiX2RlZlwiIGluIHNjaGVtYSAmJlxuICAgIHR5cGVvZiAoc2NoZW1hIGFzIHouWm9kVHlwZSkuX2RlZiA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICByZXR1cm4gei50b0pTT05TY2hlbWEoc2NoZW1hIGFzIHouWm9kVHlwZSkgYXMgSlNPTlNjaGVtYTc7XG4gIH1cblxuICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIiAmJiBzY2hlbWEgIT09IG51bGwpIHtcbiAgICBjb25zdCBzID0gc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChTeW1ib2wuZm9yKFwidmVyY2VsLmFpLnNjaGVtYVwiKSBpbiBzICYmIFwianNvblNjaGVtYVwiIGluIHMpIHtcbiAgICAgIHJldHVybiBzLmpzb25TY2hlbWEgYXMgSlNPTlNjaGVtYTc7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiZcbiAgICBzY2hlbWEgIT09IG51bGwgJiZcbiAgICAoXCJ0eXBlXCIgaW4gc2NoZW1hIHx8IFwicHJvcGVydGllc1wiIGluIHNjaGVtYSlcbiAgKSB7XG4gICAgcmV0dXJuIHNjaGVtYSBhcyBKU09OU2NoZW1hNztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBVSU1lc3NhZ2UgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBTZW5kSW5wdXQgfSBmcm9tIFwiLi4vY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQgfSBmcm9tIFwiLi4vc3RvcmFnZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9NZXNzYWdlQW5kUGFydHMoe1xuICBzZXNzaW9uSWQsXG4gIGlkLFxuICBpbnB1dCxcbiAgZGVmYXVsdFJvbGUsXG59OiB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW5wdXQ6IFNlbmRJbnB1dDtcbiAgZGVmYXVsdFJvbGU6IFVJTWVzc2FnZVtcInJvbGVcIl07XG59KTogeyBtZXNzYWdlOiBNZXNzYWdlOyBwYXJ0czogUGFydFtdIH0ge1xuICBsZXQgbWVzc2FnZUlkID0gaWQgPz8gYG1lc3NhZ2VfJHt1bGlkKCl9YDtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICByb2xlOiBkZWZhdWx0Um9sZSxcbiAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgIHN0YXJ0ZWRBdDogbnVsbCxcbiAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgIGludGVycnVwdGVkQXQ6IG51bGwsXG4gICAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG51bGwsXG4gICAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHBhcnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGlkOiBgcGFydF8ke3VsaWQoKX1gLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHBhcnQ6IHsgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGlucHV0IH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbiAgaWYgKGlucHV0LmlkKSB7XG4gICAgbWVzc2FnZUlkID0gaW5wdXQuaWQ7XG4gIH1cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgaWYgKGlucHV0LmlkKSB7XG4gICAgbWVzc2FnZUlkID0gaW5wdXQuaWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBpZDogbWVzc2FnZUlkLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBudWxsLFxuICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICByb2xlOiBpbnB1dC5yb2xlID8/IGRlZmF1bHRSb2xlLFxuICAgIH0sXG4gICAgcGFydHM6IGlucHV0LnBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+ICh7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBtZXNzYWdlSWQsXG4gICAgICBpZDogYHBhcnRfJHt1bGlkKCl9YCxcbiAgICAgIGluZGV4LFxuICAgICAgcGFydCxcbiAgICB9KSksXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFNBQVMs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QUFFbkMsVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJO0FBRUosVUFBSSxXQUFXO0FBQ2IsY0FBTSxTQUFTLE1BQU0sUUFBUSxJQUFJLGdCQUFnQjtBQUNqRCxZQUFJLFdBQVcsYUFBYTtBQUMxQixpQkFBTyxTQUFTO0FBQUEsWUFDZCxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixTQUFTLGlCQUFpQixFQUFFO0FBQUEsWUFDN0QsRUFBRSxRQUFRLElBQUk7QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFFQSxZQUFJO0FBQ0osWUFBSTtBQUNGLGlCQUFPLE1BQU0sTUFBTSxLQUFLO0FBQUEsUUFDMUIsUUFBUTtBQUNOLGlCQUFPLFNBQVM7QUFBQSxZQUNkO0FBQUEsY0FDRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsU0FBUyxvQkFBb0I7QUFBQSxZQUNqRTtBQUFBLFlBQ0EsRUFBRSxRQUFRLElBQUk7QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFFQSxpQkFBUyxLQUFLO0FBQ2QsaUJBQVMsS0FBSztBQUNkLGVBQU8sTUFBTSxRQUFRLElBQUksY0FBYyxLQUFLO0FBQUEsTUFDOUMsT0FBTztBQUNMLGlCQUFTLE1BQU07QUFDZixpQkFBUyxNQUFNO0FBQ2YsZUFBTyxNQUFNLFFBQVE7QUFBQSxNQUN2QjtBQUVBLFlBQU0sa0JBQW1DO0FBQUEsUUFDdkMsT0FBTyxRQUFRO0FBQUEsUUFDZixPQUFPLFFBQVE7QUFBQSxRQUNmLGVBQ0UsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsS0FBSyxTQUFTO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFNBQVMsTUFBTSxTQUFTLFFBQVEsUUFBUSxpQkFBaUIsSUFBSTtBQUVuRSxVQUFJLENBQUMsV0FBVztBQUNkLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxTQUFTLFdBQVcsU0FBVSxPQUFPLFVBQVUsTUFBTztBQUM1RCxhQUFPLFNBQVM7QUFBQSxRQUNkLFdBQVcsU0FBUyxFQUFFLE9BQU8sT0FBTyxNQUFNLElBQUksRUFBRSxRQUFRLE9BQU8sT0FBTztBQUFBLFFBQ3RFLEVBQUUsT0FBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBQUEsSUFFQSxPQUFPLEVBQUUsR0FBRyxjQUFjLEdBQUcsUUFBUSxNQUFNO0FBQUE7QUFBQSxJQUczQyxZQUFZO0FBQUE7QUFBQSxJQU9aLFlBQVksY0FBYyxRQUFRO0FBQUEsSUFFbEMsTUFBTSxNQUFNO0FBQ1YsWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsidWxpZCIsICJ6IiwgIm5hbWUiLCAicmVzdWx0IiwgImhhbmRsZVN0b3JhZ2VScGMiLCAibm93IiwgInVsaWQiLCAic2Vzc2lvbiIsICJza2lsbHNEaXIiXQp9Cg==
|
package/dist/next/loader.js
CHANGED
|
@@ -39,7 +39,7 @@ var import_core = require("@swc/core");
|
|
|
39
39
|
// package.json
|
|
40
40
|
var package_default = {
|
|
41
41
|
name: "experimental-agent",
|
|
42
|
-
version: "0.1.
|
|
42
|
+
version: "0.1.4",
|
|
43
43
|
main: "./dist/index.js",
|
|
44
44
|
module: "./dist/index.mjs",
|
|
45
45
|
types: "./dist/index.d.ts",
|
|
@@ -203,4 +203,4 @@ function findAgentExports(ast) {
|
|
|
203
203
|
}
|
|
204
204
|
return exports2;
|
|
205
205
|
}
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuM1wiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcIkB2ZXJjZWwvc2FuZGJveFwiOiBcIl4xLjUuMFwiLFxuICAgIFwidWxpZFwiOiBcIl4zLjAuMlwiLFxuICAgIFwiem9kXCI6IFwiXjQuMy42XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFnZW50L3RzY29uZmlnXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjExLjI0XCIsXG4gICAgXCJkb3RlbnZcIjogXCJeMTcuMi4zXCIsXG4gICAgXCJuZXh0XCI6IFwiXjE2LjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjAuMlwiLFxuICAgIFwidHlwZS1mZXN0XCI6IFwiXjUuNC4yXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS41LjRcIixcbiAgICBcInZpdGVzdFwiOiBcIl4zLjAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhaVwiOiBcIl42LjAuMFwiLFxuICAgIFwid29ya2Zsb3dcIjogXCIqXCJcbiAgfSxcbiAgXCJwdWJsaXNoQ29uZmlnXCI6IHtcbiAgICBcImFjY2Vzc1wiOiBcInB1YmxpY1wiXG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFzQjtBQUN0QixrQkFBdUM7OztBQ0R2QztBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsUUFBVTtBQUFBLEVBQ1YsT0FBUztBQUFBLEVBQ1QsYUFBZTtBQUFBLEVBQ2YsU0FBVztBQUFBLEVBQ1gsT0FBUztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxLQUFLO0FBQUEsTUFDSCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLE1BQ2YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFlBQVk7QUFBQSxNQUNWLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFBLElBQ1AsT0FBUztBQUFBLElBQ1QsU0FBVztBQUFBLElBQ1gsV0FBYTtBQUFBLElBQ2IsTUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQSxjQUFnQjtBQUFBLElBQ2QscUJBQXFCO0FBQUEsSUFDckIsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsY0FBYztBQUFBLElBQ2QsUUFBVTtBQUFBLElBQ1YsbUJBQW1CO0FBQUEsSUFDbkIsTUFBUTtBQUFBLElBQ1IsTUFBUTtB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
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuNFwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcIkB2ZXJjZWwvc2FuZGJveFwiOiBcIl4xLjUuMFwiLFxuICAgIFwidWxpZFwiOiBcIl4zLjAuMlwiLFxuICAgIFwiem9kXCI6IFwiXjQuMy42XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFnZW50L3RzY29uZmlnXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjExLjI0XCIsXG4gICAgXCJkb3RlbnZcIjogXCJeMTcuMi4zXCIsXG4gICAgXCJuZXh0XCI6IFwiXjE2LjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjAuMlwiLFxuICAgIFwidHlwZS1mZXN0XCI6IFwiXjUuNC4yXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS41LjRcIixcbiAgICBcInZpdGVzdFwiOiBcIl4zLjAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhaVwiOiBcIl42LjAuMFwiLFxuICAgIFwid29ya2Zsb3dcIjogXCIqXCJcbiAgfSxcbiAgXCJwdWJsaXNoQ29uZmlnXCI6IHtcbiAgICBcImFjY2Vzc1wiOiBcInB1YmxpY1wiXG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFzQjtBQUN0QixrQkFBdUM7OztBQ0R2QztBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsUUFBVTtBQUFBLEVBQ1YsT0FBUztBQUFBLEVBQ1QsYUFBZTtBQUFBLEVBQ2YsU0FBVztBQUFBLEVBQ1gsT0FBUztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxLQUFLO0FBQUEsTUFDSCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLE1BQ2YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFlBQVk7QUFBQSxNQUNWLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFBLElBQ1AsT0FBUztBQUFBLElBQ1QsU0FBVztBQUFBLElBQ1gsV0FBYTtBQUFBLElBQ2IsTUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQSxjQUFnQjtBQUFBLElBQ2QscUJBQXFCO0FBQUEsSUFDckIsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsY0FBYztBQUFBLElBQ2QsUUFBVTtBQUFBLElBQ1YsbUJBQW1CO0FBQUEsSUFDbkIsTUFBUTtBQUFBLElBQ1IsTUFBUTtB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
|