@bnsights/bbsf-admin-portal 1.0.78 → 1.0.80
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/README.md +9 -0
- package/{bnsights-bbsf-admin-portal-1.0.78.tgz → bnsights-bbsf-admin-portal-1.0.80.tgz} +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +263 -118
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/documents/document-template-info/document-template-info.component.js +6 -7
- package/esm2015/lib/Pages/shared/Enums/Enums.js +6 -1
- package/esm2015/lib/Pages/shared/components/survey/survey-info/survey-info.component.js +120 -87
- package/esm2015/lib/Pages/shared/components/survey/survey.component.js +12 -6
- package/esm2015/lib/Pages/shared/modules/survey.module.js +7 -1
- package/esm2015/lib/Pages/shared/word/constants.js +1 -1
- package/esm2015/lib/Pages/shared/word/docx-document.js +4 -1
- package/esm2015/lib/Pages/shared/word/helpers/index.js +1 -1
- package/esm2015/lib/Pages/shared/word/helpers/render-document-file.js +1 -1
- package/esm2015/lib/Pages/shared/word/helpers/xml-builder.js +1 -1
- package/esm2015/lib/Pages/shared/word/html-to-docx.js +12 -5
- package/esm2015/lib/Pages/shared/word/index.js +1 -1
- package/esm2015/lib/Pages/shared/word/namespaces.js +1 -1
- package/esm2015/lib/Pages/shared/word/schemas/content-types.js +24 -24
- package/esm2015/lib/Pages/shared/word/schemas/core.js +21 -21
- package/esm2015/lib/Pages/shared/word/schemas/document-rels.js +13 -13
- package/esm2015/lib/Pages/shared/word/schemas/document.template.js +103 -41
- package/esm2015/lib/Pages/shared/word/schemas/font-table.js +37 -37
- package/esm2015/lib/Pages/shared/word/schemas/generic-rels.js +9 -6
- package/esm2015/lib/Pages/shared/word/schemas/index.js +1 -1
- package/esm2015/lib/Pages/shared/word/schemas/numbering.js +14 -14
- package/esm2015/lib/Pages/shared/word/schemas/rels.js +8 -8
- package/esm2015/lib/Pages/shared/word/schemas/settings.js +10 -10
- package/esm2015/lib/Pages/shared/word/schemas/styles.js +143 -143
- package/esm2015/lib/Pages/shared/word/schemas/theme.js +195 -195
- package/esm2015/lib/Pages/shared/word/schemas/web-settings.js +6 -6
- package/esm2015/lib/Pages/shared/word/utils/color-conversion.js +1 -1
- package/esm2015/lib/Pages/shared/word/utils/list.js +1 -1
- package/esm2015/lib/Pages/shared/word/utils/unit-conversion.js +1 -1
- package/esm2015/lib/Pages/shared/word/utils/url.js +1 -1
- package/esm2015/lib/Pages/shared/word/utils/vnode.js +1 -1
- package/esm2015/lib/Pages/shared/word/word-work/templates/documentTemplate.js +42 -42
- package/esm2015/lib/Pages/shared/word/word-work/templates/index.js +1 -1
- package/esm2015/lib/Pages/shared/word/word-work/templates/mhtDocumentTemplate.js +19 -18
- package/esm2015/lib/Pages/shared/word/word-work/templates/mhtPartTemplate.js +7 -7
- package/esm2015/lib/Pages/shared/word/word-work/utils.js +3 -1
- package/esm2015/public-api.js +2 -1
- package/fesm2015/bnsights-bbsf-admin-portal.js +1617 -1359
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/shared/Enums/Enums.d.ts +4 -0
- package/lib/Pages/shared/components/survey/survey-info/survey-info.component.d.ts +1 -0
- package/lib/Pages/shared/components/survey/survey.component.d.ts +1 -0
- package/lib/Pages/shared/modules/survey.module.d.ts +3 -0
- package/lib/Pages/shared/word/schemas/content-types.d.ts +1 -1
- package/lib/Pages/shared/word/schemas/document.template.d.ts +3 -2
- package/lib/Pages/shared/word/schemas/generic-rels.d.ts +1 -1
- package/package.json +6 -1
- package/public-api.d.ts +1 -0
|
@@ -1675,4 +1675,4 @@ const buildDrawing = (inlineOrAnchored = false, graphicType, attributes) => {
|
|
|
1675
1675
|
return drawingFragment;
|
|
1676
1676
|
};
|
|
1677
1677
|
export { buildParagraph, buildTable, buildNumberingInstances, buildLineBreak, buildIndentation, buildTextElement, buildBold, buildItalics, buildUnderline, buildDrawing, fixupLineHeight, };
|
|
1678
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC93b3JkL2hlbHBlcnMveG1sLWJ1aWxkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFxQztBQUNyQywwQkFBMEI7QUFDMUIsc0NBQXNDO0FBQ3RDLHlDQUF5QztBQUN6QyxnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxPQUFPLE1BQU0sNEJBQTRCLENBQUM7QUFDakQsT0FBTyxPQUFPLE1BQU0sNEJBQTRCLENBQUM7QUFDakQsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxzQ0FBc0M7QUFDdEMsMkNBQTJDO0FBQzND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QWUsQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixPQUFPLEVBQ0wsY0FBYyxFQUNkLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxFQUNaLGVBQWUsR0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBsdXNwbHVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbHNlLXJldHVybiAqL1xuaW1wb3J0IHsgZnJhZ21lbnQgfSBmcm9tICd4bWxidWlsZGVyMic7XG5pbXBvcnQgaXNWTm9kZSBmcm9tICd2aXJ0dWFsLWRvbS92bm9kZS9pcy12bm9kZSc7XG5pbXBvcnQgaXNWVGV4dCBmcm9tICd2aXJ0dWFsLWRvbS92bm9kZS9pcy12dGV4dCc7XG5pbXBvcnQgY29sb3JOYW1lcyBmcm9tICdjb2xvci1uYW1lJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgaW1hZ2VUb0Jhc2U2NCBmcm9tICdpbWFnZS10by1iYXNlNjQnO1xuaW1wb3J0IG1pbWVUeXBlcyBmcm9tICdtaW1lLXR5cGVzJztcbmltcG9ydCBzaXplT2YgZnJvbSAnaW1hZ2Utc2l6ZSc7XG5cbmltcG9ydCBuYW1lc3BhY2VzIGZyb20gJy4uL25hbWVzcGFjZXMnO1xuaW1wb3J0IHtcbiAgcmdiVG9IZXgsXG4gIGhzbFRvSGV4LFxuICBoc2xSZWdleCxcbiAgcmdiUmVnZXgsXG4gIGhleFJlZ2V4LFxuICBoZXgzUmVnZXgsXG4gIGhleDNUb0hleCxcbn0gZnJvbSAnLi4vdXRpbHMvY29sb3ItY29udmVyc2lvbic7XG5pbXBvcnQge1xuICBwaXhlbFRvRU1VLFxuICBwaXhlbFJlZ2V4LFxuICBUV0lQVG9FTVUsXG4gIHBlcmNlbnRhZ2VSZWdleCxcbiAgcG9pbnRSZWdleCxcbiAgcG9pbnRUb0hJUCxcbiAgSElQVG9UV0lQLFxuICBwb2ludFRvVFdJUCxcbiAgcGl4ZWxUb0hJUCxcbiAgcGl4ZWxUb1RXSVAsXG4gIHBpeGVsVG9FSVAsXG4gIHBvaW50VG9FSVAsXG4gIGNtVG9UV0lQLFxuICBjbVJlZ2V4LFxuICBpbmNoUmVnZXgsXG4gIGluY2hUb1RXSVAsXG59IGZyb20gJy4uL3V0aWxzL3VuaXQtY29udmVyc2lvbic7XG4vLyBGSVhNRTogcmVtb3ZlIHRoZSBjeWNsaWMgZGVwZW5kZW5jeVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgYnVpbGRJbWFnZSwgYnVpbGRMaXN0IH0gZnJvbSAnLi9yZW5kZXItZG9jdW1lbnQtZmlsZSc7XG5pbXBvcnQge1xuICBkZWZhdWx0Rm9udCxcbiAgaHlwZXJsaW5rVHlwZSxcbiAgcGFyYWdyYXBoQm9yZGVyc09iamVjdCxcbiAgY29sb3JsZXNzQ29sb3JzLFxuICB2ZXJ0aWNhbEFsaWduVmFsdWVzLFxuICBpbWFnZVR5cGUsXG4gIGludGVybmFsUmVsYXRpb25zaGlwLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdk5vZGVIYXNDaGlsZHJlbiB9IGZyb20gJy4uL3V0aWxzL3Zub2RlJztcbmltcG9ydCB7IGlzVmFsaWRVcmwgfSBmcm9tICcuLi91dGlscy91cmwnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbmNvbnN0IGZpeHVwQ29sb3JDb2RlID0gKGNvbG9yQ29kZVN0cmluZykgPT4ge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbG9yTmFtZXMsIGNvbG9yQ29kZVN0cmluZy50b0xvd2VyQ2FzZSgpKSkge1xuICAgIGNvbnN0IFtyZWQsIGdyZWVuLCBibHVlXSA9IGNvbG9yTmFtZXNbY29sb3JDb2RlU3RyaW5nLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgcmV0dXJuIHJnYlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpO1xuICB9IGVsc2UgaWYgKHJnYlJlZ2V4LnRlc3QoY29sb3JDb2RlU3RyaW5nKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGNvbG9yQ29kZVN0cmluZy5tYXRjaChyZ2JSZWdleCk7XG4gICAgY29uc3QgcmVkID0gbWF0Y2hlZFBhcnRzWzFdO1xuICAgIGNvbnN0IGdyZWVuID0gbWF0Y2hlZFBhcnRzWzJdO1xuICAgIGNvbnN0IGJsdWUgPSBtYXRjaGVkUGFydHNbM107XG5cbiAgICByZXR1cm4gcmdiVG9IZXgocmVkLCBncmVlbiwgYmx1ZSk7XG4gIH0gZWxzZSBpZiAoaHNsUmVnZXgudGVzdChjb2xvckNvZGVTdHJpbmcpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gY29sb3JDb2RlU3RyaW5nLm1hdGNoKGhzbFJlZ2V4KTtcbiAgICBjb25zdCBodWUgPSBtYXRjaGVkUGFydHNbMV07XG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IG1hdGNoZWRQYXJ0c1syXTtcbiAgICBjb25zdCBsdW1pbm9zaXR5ID0gbWF0Y2hlZFBhcnRzWzNdO1xuXG4gICAgcmV0dXJuIGhzbFRvSGV4KGh1ZSwgc2F0dXJhdGlvbiwgbHVtaW5vc2l0eSk7XG4gIH0gZWxzZSBpZiAoaGV4UmVnZXgudGVzdChjb2xvckNvZGVTdHJpbmcpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gY29sb3JDb2RlU3RyaW5nLm1hdGNoKGhleFJlZ2V4KTtcblxuICAgIHJldHVybiBtYXRjaGVkUGFydHNbMV07XG4gIH0gZWxzZSBpZiAoaGV4M1JlZ2V4LnRlc3QoY29sb3JDb2RlU3RyaW5nKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGNvbG9yQ29kZVN0cmluZy5tYXRjaChoZXgzUmVnZXgpO1xuICAgIGNvbnN0IHJlZCA9IG1hdGNoZWRQYXJ0c1sxXTtcbiAgICBjb25zdCBncmVlbiA9IG1hdGNoZWRQYXJ0c1syXTtcbiAgICBjb25zdCBibHVlID0gbWF0Y2hlZFBhcnRzWzNdO1xuXG4gICAgcmV0dXJuIGhleDNUb0hleChyZWQsIGdyZWVuLCBibHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJzAwMDAwMCc7XG4gIH1cbn07XG5cbmNvbnN0IGJ1aWxkUnVuRm9udEZyYWdtZW50ID0gKGZvbnROYW1lID0gZGVmYXVsdEZvbnQpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdyRm9udHMnKVxuICAgIC5hdHQoJ0B3JywgJ2FzY2lpJywgZm9udE5hbWUpXG4gICAgLmF0dCgnQHcnLCAnaEFuc2knLCBmb250TmFtZSlcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRSdW5TdHlsZUZyYWdtZW50ID0gKHR5cGUgPSAnSHlwZXJsaW5rJykgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ3JTdHlsZScpXG4gICAgLmF0dCgnQHcnLCAndmFsJywgdHlwZSlcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRUYWJsZVJvd0hlaWdodCA9ICh0YWJsZVJvd0hlaWdodCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ3RySGVpZ2h0JylcbiAgICAuYXR0KCdAdycsICd2YWwnLCB0YWJsZVJvd0hlaWdodClcbiAgICAuYXR0KCdAdycsICdoUnVsZScsICdhdExlYXN0JylcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRWZXJ0aWNhbEFsaWdubWVudCA9ICh2ZXJ0aWNhbEFsaWdubWVudCkgPT4ge1xuICBpZiAodmVydGljYWxBbGlnbm1lbnQudG9Mb3dlckNhc2UoKSA9PT0gJ21pZGRsZScpIHtcbiAgICB2ZXJ0aWNhbEFsaWdubWVudCA9ICdjZW50ZXInO1xuICB9XG5cbiAgcmV0dXJuIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICd2QWxpZ24nKVxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIHZlcnRpY2FsQWxpZ25tZW50KVxuICAgIC51cCgpO1xufTtcblxuY29uc3QgYnVpbGRWZXJ0aWNhbE1lcmdlID0gKHZlcnRpY2FsTWVyZ2UgPSAnY29udGludWUnKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCAndk1lcmdlJylcbiAgICAuYXR0KCdAdycsICd2YWwnLCB2ZXJ0aWNhbE1lcmdlKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZENvbG9yID0gKGNvbG9yQ29kZSkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ2NvbG9yJylcbiAgICAuYXR0KCdAdycsICd2YWwnLCBjb2xvckNvZGUpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkRm9udFNpemUgPSAoZm9udFNpemUpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdzeicpXG4gICAgLmF0dCgnQHcnLCAndmFsJywgZm9udFNpemUpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkU2hhZGluZyA9IChjb2xvckNvZGUpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdzaGQnKVxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsICdjbGVhcicpXG4gICAgLmF0dCgnQHcnLCAnZmlsbCcsIGNvbG9yQ29kZSlcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRIaWdobGlnaHQgPSAoY29sb3IgPSAneWVsbG93JykgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ2hpZ2hsaWdodCcpXG4gICAgLmF0dCgnQHcnLCAndmFsJywgY29sb3IpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkVmVydEFsaWduID0gKHR5cGUgPSAnYmFzZWxpbmUnKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCAndmVydEFsaWduJylcbiAgICAuYXR0KCdAdycsICd2YWwnLCB0eXBlKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZFN0cmlrZSA9ICgpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdzdHJpa2UnKVxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIHRydWUpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkQm9sZCA9ICgpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdiJylcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRJdGFsaWNzID0gKCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ2knKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZFVuZGVybGluZSA9ICh0eXBlID0gJ3NpbmdsZScpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICd1JylcbiAgICAuYXR0KCdAdycsICd2YWwnLCB0eXBlKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZExpbmVCcmVhayA9ICh0eXBlID0gJ3RleHRXcmFwcGluZycpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdicicpXG4gICAgLmF0dCgnQHcnLCAndHlwZScsIHR5cGUpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkQm9yZGVyID0gKFxuICBib3JkZXJTaWRlID0gJ3RvcCcsXG4gIGJvcmRlclNpemUgPSAwLFxuICBib3JkZXJTcGFjaW5nID0gMCxcbiAgYm9yZGVyQ29sb3IgPSBmaXh1cENvbG9yQ29kZSgnYmxhY2snKSxcbiAgYm9yZGVyU3Ryb2tlID0gJ3NpbmdsZSdcbikgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgYm9yZGVyU2lkZSlcbiAgICAuYXR0KCdAdycsICd2YWwnLCBib3JkZXJTdHJva2UpXG4gICAgLmF0dCgnQHcnLCAnc3onLCBib3JkZXJTaXplKVxuICAgIC5hdHQoJ0B3JywgJ3NwYWNlJywgYm9yZGVyU3BhY2luZylcbiAgICAuYXR0KCdAdycsICdjb2xvcicsIGJvcmRlckNvbG9yKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZFRleHRFbGVtZW50ID0gKHRleHQpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICd0JylcbiAgICAuYXR0KCdAeG1sJywgJ3NwYWNlJywgJ3ByZXNlcnZlJylcbiAgICAudHh0KHRleHQpXG4gICAgLnVwKCk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuY29uc3QgZml4dXBMaW5lSGVpZ2h0ID0gKGxpbmVIZWlnaHQsIGZvbnRTaXplKSA9PiB7XG4gIC8vIEZJWE1FOiBJZiBsaW5lIGhlaWdodCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgbnVtYmVyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgaWYgKCFpc05hTihsaW5lSGVpZ2h0KSkge1xuICAgIGlmIChmb250U2l6ZSkge1xuICAgICAgY29uc3QgYWN0dWFsTGluZUhlaWdodCA9ICtsaW5lSGVpZ2h0ICogZm9udFNpemU7XG5cbiAgICAgIHJldHVybiBISVBUb1RXSVAoYWN0dWFsTGluZUhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDI0MCBUV0lQIG9yIDEyIHBvaW50IGlzIGRlZmF1bHQgbGluZSBoZWlnaHRcbiAgICAgIHJldHVybiArbGluZUhlaWdodCAqIDI0MDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gMjQwIFRXSVAgb3IgMTIgcG9pbnQgaXMgZGVmYXVsdCBsaW5lIGhlaWdodFxuICAgIHJldHVybiAyNDA7XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuY29uc3QgZml4dXBGb250U2l6ZSA9IChmb250U2l6ZVN0cmluZykgPT4ge1xuICBpZiAocG9pbnRSZWdleC50ZXN0KGZvbnRTaXplU3RyaW5nKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGZvbnRTaXplU3RyaW5nLm1hdGNoKHBvaW50UmVnZXgpO1xuICAgIC8vIGNvbnZlcnQgcG9pbnQgdG8gaGFsZiBwb2ludFxuICAgIHJldHVybiBwb2ludFRvSElQKG1hdGNoZWRQYXJ0c1sxXSk7XG4gIH0gZWxzZSBpZiAocGl4ZWxSZWdleC50ZXN0KGZvbnRTaXplU3RyaW5nKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGZvbnRTaXplU3RyaW5nLm1hdGNoKHBpeGVsUmVnZXgpO1xuICAgIC8vIGNvbnZlcnQgcGl4ZWxzIHRvIGhhbGYgcG9pbnRcbiAgICByZXR1cm4gcGl4ZWxUb0hJUChtYXRjaGVkUGFydHNbMV0pO1xuICB9XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbmNvbnN0IGZpeHVwUm93SGVpZ2h0ID0gKHJvd0hlaWdodFN0cmluZykgPT4ge1xuICBpZiAocG9pbnRSZWdleC50ZXN0KHJvd0hlaWdodFN0cmluZykpIHtcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSByb3dIZWlnaHRTdHJpbmcubWF0Y2gocG9pbnRSZWdleCk7XG4gICAgLy8gY29udmVydCBwb2ludCB0byBoYWxmIHBvaW50XG4gICAgcmV0dXJuIHBvaW50VG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XG4gIH0gZWxzZSBpZiAocGl4ZWxSZWdleC50ZXN0KHJvd0hlaWdodFN0cmluZykpIHtcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSByb3dIZWlnaHRTdHJpbmcubWF0Y2gocGl4ZWxSZWdleCk7XG4gICAgLy8gY29udmVydCBwaXhlbHMgdG8gaGFsZiBwb2ludFxuICAgIHJldHVybiBwaXhlbFRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xuICB9IGVsc2UgaWYgKGNtUmVnZXgudGVzdChyb3dIZWlnaHRTdHJpbmcpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gcm93SGVpZ2h0U3RyaW5nLm1hdGNoKGNtUmVnZXgpO1xuICAgIHJldHVybiBjbVRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xuICB9IGVsc2UgaWYgKGluY2hSZWdleC50ZXN0KHJvd0hlaWdodFN0cmluZykpIHtcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSByb3dIZWlnaHRTdHJpbmcubWF0Y2goaW5jaFJlZ2V4KTtcbiAgICByZXR1cm4gaW5jaFRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xuICB9XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbmNvbnN0IGZpeHVwQ29sdW1uV2lkdGggPSAoY29sdW1uV2lkdGhTdHJpbmcpID0+IHtcbiAgaWYgKHBvaW50UmVnZXgudGVzdChjb2x1bW5XaWR0aFN0cmluZykpIHtcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBjb2x1bW5XaWR0aFN0cmluZy5tYXRjaChwb2ludFJlZ2V4KTtcbiAgICByZXR1cm4gcG9pbnRUb1RXSVAobWF0Y2hlZFBhcnRzWzFdKTtcbiAgfSBlbHNlIGlmIChwaXhlbFJlZ2V4LnRlc3QoY29sdW1uV2lkdGhTdHJpbmcpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gY29sdW1uV2lkdGhTdHJpbmcubWF0Y2gocGl4ZWxSZWdleCk7XG4gICAgcmV0dXJuIHBpeGVsVG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XG4gIH0gZWxzZSBpZiAoY21SZWdleC50ZXN0KGNvbHVtbldpZHRoU3RyaW5nKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGNvbHVtbldpZHRoU3RyaW5nLm1hdGNoKGNtUmVnZXgpO1xuICAgIHJldHVybiBjbVRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xuICB9IGVsc2UgaWYgKGluY2hSZWdleC50ZXN0KGNvbHVtbldpZHRoU3RyaW5nKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGNvbHVtbldpZHRoU3RyaW5nLm1hdGNoKGluY2hSZWdleCk7XG4gICAgcmV0dXJuIGluY2hUb1RXSVAobWF0Y2hlZFBhcnRzWzFdKTtcbiAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5jb25zdCBmaXh1cE1hcmdpbiA9IChtYXJnaW5TdHJpbmcpID0+IHtcbiAgaWYgKHBvaW50UmVnZXgudGVzdChtYXJnaW5TdHJpbmcpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gbWFyZ2luU3RyaW5nLm1hdGNoKHBvaW50UmVnZXgpO1xuICAgIC8vIGNvbnZlcnQgcG9pbnQgdG8gaGFsZiBwb2ludFxuICAgIHJldHVybiBwb2ludFRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xuICB9IGVsc2UgaWYgKHBpeGVsUmVnZXgudGVzdChtYXJnaW5TdHJpbmcpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gbWFyZ2luU3RyaW5nLm1hdGNoKHBpeGVsUmVnZXgpO1xuICAgIC8vIGNvbnZlcnQgcGl4ZWxzIHRvIGhhbGYgcG9pbnRcbiAgICByZXR1cm4gcGl4ZWxUb1RXSVAobWF0Y2hlZFBhcnRzWzFdKTtcbiAgfVxufTtcblxuY29uc3QgbW9kaWZpZWRTdHlsZUF0dHJpYnV0ZXNCdWlsZGVyID0gKHZOb2RlLCBhdHRyaWJ1dGVzLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IG1vZGlmaWVkQXR0cmlidXRlcyA9IHsgLi4uYXR0cmlidXRlcyB9O1xuXG4gIC8vIHN0eWxlc1xuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUucHJvcGVydGllcyAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlKSB7XG4gICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuY29sb3IgJiYgIWNvbG9ybGVzc0NvbG9ycy5pbmNsdWRlcyh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmNvbG9yKSkge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLmNvbG9yID0gZml4dXBDb2xvckNvZGUodk5vZGUucHJvcGVydGllcy5zdHlsZS5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYmFja2dyb3VuZC1jb2xvciddICYmXG4gICAgICAhY29sb3JsZXNzQ29sb3JzLmluY2x1ZGVzKHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JhY2tncm91bmQtY29sb3InXSlcbiAgICApIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5iYWNrZ3JvdW5kQ29sb3IgPSBmaXh1cENvbG9yQ29kZShcbiAgICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYmFja2dyb3VuZC1jb2xvciddXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ3ZlcnRpY2FsLWFsaWduJ10gJiZcbiAgICAgIHZlcnRpY2FsQWxpZ25WYWx1ZXMuaW5jbHVkZXModk5vZGUucHJvcGVydGllcy5zdHlsZVsndmVydGljYWwtYWxpZ24nXSlcbiAgICApIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy52ZXJ0aWNhbEFsaWduID0gdk5vZGUucHJvcGVydGllcy5zdHlsZVsndmVydGljYWwtYWxpZ24nXTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWyd0ZXh0LWFsaWduJ10gJiZcbiAgICAgIFsnbGVmdCcsICdyaWdodCcsICdjZW50ZXInLCAnanVzdGlmeSddLmluY2x1ZGVzKHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ3RleHQtYWxpZ24nXSlcbiAgICApIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy50ZXh0QWxpZ24gPSB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWyd0ZXh0LWFsaWduJ107XG4gICAgfVxuXG4gICAgLy8gRklYTUU6IHJlbW92ZSBib2xkIGNoZWNrIHdoZW4gb3RoZXIgZm9udCB3ZWlnaHRzIGFyZSBoYW5kbGVkLlxuICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydmb250LXdlaWdodCddICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2ZvbnQtd2VpZ2h0J10gPT09ICdib2xkJykge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnN0cm9uZyA9IHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2ZvbnQtd2VpZ2h0J107XG4gICAgfVxuICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydmb250LXNpemUnXSkge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLmZvbnRTaXplID0gZml4dXBGb250U2l6ZSh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydmb250LXNpemUnXSk7XG4gICAgfVxuICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydsaW5lLWhlaWdodCddKSB7XG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMubGluZUhlaWdodCA9IGZpeHVwTGluZUhlaWdodChcbiAgICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnbGluZS1oZWlnaHQnXSxcbiAgICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnZm9udC1zaXplJ11cbiAgICAgICAgICA/IGZpeHVwRm9udFNpemUodk5vZGUucHJvcGVydGllcy5zdHlsZVsnZm9udC1zaXplJ10pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnbWFyZ2luLWxlZnQnXSB8fCB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydtYXJnaW4tcmlnaHQnXSkge1xuICAgICAgY29uc3QgbGVmdE1hcmdpbiA9IGZpeHVwTWFyZ2luKHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ21hcmdpbi1sZWZ0J10pO1xuICAgICAgY29uc3QgcmlnaHRNYXJnaW4gPSBmaXh1cE1hcmdpbih2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydtYXJnaW4tcmlnaHQnXSk7XG4gICAgICBjb25zdCBpbmRlbnRhdGlvbiA9IHt9O1xuICAgICAgaWYgKGxlZnRNYXJnaW4pIHtcbiAgICAgICAgaW5kZW50YXRpb24ubGVmdCA9IGxlZnRNYXJnaW47XG4gICAgICB9XG4gICAgICBpZiAocmlnaHRNYXJnaW4pIHtcbiAgICAgICAgaW5kZW50YXRpb24ucmlnaHQgPSByaWdodE1hcmdpbjtcbiAgICAgIH1cbiAgICAgIGlmIChsZWZ0TWFyZ2luIHx8IHJpZ2h0TWFyZ2luKSB7XG4gICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5pbmRlbnRhdGlvbiA9IGluZGVudGF0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS5kaXNwbGF5KSB7XG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMuZGlzcGxheSA9IHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuZGlzcGxheTtcbiAgICB9XG5cbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aCkge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLndpZHRoID0gdk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvLyBwYXJhZ3JhcGggb25seVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmlzUGFyYWdyYXBoKSB7XG4gICAgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlLnRhZ05hbWUgPT09ICdibG9ja3F1b3RlJykge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLmluZGVudGF0aW9uID0geyBsZWZ0OiAyODQgfTtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy50ZXh0QWxpZ24gPSAnanVzdGlmeSc7XG4gICAgfSBlbHNlIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS50YWdOYW1lID09PSAnY29kZScpIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5oaWdobGlnaHRDb2xvciA9ICdsaWdodEdyYXknO1xuICAgIH0gZWxzZSBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUudGFnTmFtZSA9PT0gJ3ByZScpIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5mb250ID0gJ0NvdXJpZXInO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RpZmllZEF0dHJpYnV0ZXM7XG59O1xuXG4vLyBodG1sIHRhZyB0byBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4vLyBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIGZvcm1hdHRpbmcgZnVuY3Rpb24gaWYgbmVlZGVkXG5jb25zdCBidWlsZEZvcm1hdHRpbmcgPSAoaHRtbFRhZywgb3B0aW9ucykgPT4ge1xuICBzd2l0Y2ggKGh0bWxUYWcpIHtcbiAgICBjYXNlICdzdHJvbmcnOlxuICAgIGNhc2UgJ2InOlxuICAgICAgcmV0dXJuIGJ1aWxkQm9sZCgpO1xuICAgIGNhc2UgJ2VtJzpcbiAgICBjYXNlICdpJzpcbiAgICAgIHJldHVybiBidWlsZEl0YWxpY3MoKTtcbiAgICBjYXNlICdpbnMnOlxuICAgIGNhc2UgJ3UnOlxuICAgICAgcmV0dXJuIGJ1aWxkVW5kZXJsaW5lKCk7XG4gICAgY2FzZSAnc3RyaWtlJzpcbiAgICBjYXNlICdkZWwnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIGJ1aWxkU3RyaWtlKCk7XG4gICAgY2FzZSAnc3ViJzpcbiAgICAgIHJldHVybiBidWlsZFZlcnRBbGlnbignc3Vic2NyaXB0Jyk7XG4gICAgY2FzZSAnc3VwJzpcbiAgICAgIHJldHVybiBidWlsZFZlcnRBbGlnbignc3VwZXJzY3JpcHQnKTtcbiAgICBjYXNlICdtYXJrJzpcbiAgICAgIHJldHVybiBidWlsZEhpZ2hsaWdodCgpO1xuICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgcmV0dXJuIGJ1aWxkSGlnaGxpZ2h0KCdsaWdodEdyYXknKTtcbiAgICBjYXNlICdoaWdobGlnaHRDb2xvcic6XG4gICAgICByZXR1cm4gYnVpbGRIaWdobGlnaHQob3B0aW9ucyAmJiBvcHRpb25zLmNvbG9yID8gb3B0aW9ucy5jb2xvciA6ICdsaWdodEdyYXknKTtcbiAgICBjYXNlICdmb250JzpcbiAgICBjYXNlICdwcmUnOlxuICAgICAgcmV0dXJuIGJ1aWxkUnVuRm9udEZyYWdtZW50KCdDb3VyaWVyJyk7XG4gICAgY2FzZSAnY29sb3InOlxuICAgICAgcmV0dXJuIGJ1aWxkQ29sb3Iob3B0aW9ucyAmJiBvcHRpb25zLmNvbG9yID8gb3B0aW9ucy5jb2xvciA6ICdibGFjaycpO1xuICAgIGNhc2UgJ2JhY2tncm91bmRDb2xvcic6XG4gICAgICByZXR1cm4gYnVpbGRTaGFkaW5nKG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xvciA/IG9wdGlvbnMuY29sb3IgOiAnYmxhY2snKTtcbiAgICBjYXNlICdmb250U2l6ZSc6XG4gICAgICAvLyBkb2VzIHRoaXMgbmVlZCBhIHVuaXQgb2YgbWVhc3VyZT9cbiAgICAgIHJldHVybiBidWlsZEZvbnRTaXplKG9wdGlvbnMgJiYgb3B0aW9ucy5mb250U2l6ZSA/IG9wdGlvbnMuZm9udFNpemUgOiAxMCk7XG4gICAgY2FzZSAnaHlwZXJsaW5rJzpcbiAgICAgIHJldHVybiBidWlsZFJ1blN0eWxlRnJhZ21lbnQoJ0h5cGVybGluaycpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBidWlsZFJ1blByb3BlcnRpZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBydW5Qcm9wZXJ0aWVzRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAnclByJyk7XG4gIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKGtleSA9PT0gJ2NvbG9yJyB8fCBrZXkgPT09ICdiYWNrZ3JvdW5kQ29sb3InIHx8IGtleSA9PT0gJ2hpZ2hsaWdodENvbG9yJykge1xuICAgICAgICBvcHRpb25zLmNvbG9yID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnZm9udFNpemUnKSB7XG4gICAgICAgIG9wdGlvbnMuZm9udFNpemUgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRpbmdGcmFnbWVudCA9IGJ1aWxkRm9ybWF0dGluZyhrZXksIG9wdGlvbnMpO1xuICAgICAgaWYgKGZvcm1hdHRpbmdGcmFnbWVudCkge1xuICAgICAgICBydW5Qcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KGZvcm1hdHRpbmdGcmFnbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcnVuUHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIHJ1blByb3BlcnRpZXNGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkUnVuID0gYXN5bmMgKHZOb2RlLCBhdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSkgPT4ge1xuICBjb25zdCBydW5GcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICdyJyk7XG4gIGNvbnN0IHJ1blByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkUnVuUHJvcGVydGllcyhjbG9uZURlZXAoYXR0cmlidXRlcykpO1xuXG4gIC8vIGNhc2Ugd2hlcmUgd2UgaGF2ZSByZWN1cnNpdmUgc3BhbnMgcmVwcmVzZW50aW5nIGZvbnQgY2hhbmdlc1xuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUudGFnTmFtZSA9PT0gJ3NwYW4nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgcmV0dXJuIGJ1aWxkUnVuT3JSdW5zKHZOb2RlLCBhdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSk7XG4gIH1cblxuICBpZiAoXG4gICAgaXNWTm9kZSh2Tm9kZSkgJiZcbiAgICBbXG4gICAgICAnc3Ryb25nJyxcbiAgICAgICdiJyxcbiAgICAgICdlbScsXG4gICAgICAnaScsXG4gICAgICAndScsXG4gICAgICAnaW5zJyxcbiAgICAgICdzdHJpa2UnLFxuICAgICAgJ2RlbCcsXG4gICAgICAncycsXG4gICAgICAnc3ViJyxcbiAgICAgICdzdXAnLFxuICAgICAgJ21hcmsnLFxuICAgICAgJ2Jsb2NrcXVvdGUnLFxuICAgICAgJ2NvZGUnLFxuICAgICAgJ3ByZScsXG4gICAgXS5pbmNsdWRlcyh2Tm9kZS50YWdOYW1lKVxuICApIHtcbiAgICBjb25zdCBydW5GcmFnbWVudHNBcnJheSA9IFtdO1xuXG4gICAgbGV0IHZOb2RlcyA9IFt2Tm9kZV07XG4gICAgLy8gY3JlYXRlIHRlbXAgcnVuIGZyYWdtZW50cyB0byBzcGxpdCB0aGUgcGFyYWdyYXBoIGludG8gZGlmZmVyZW50IHJ1bnNcbiAgICBsZXQgdGVtcEF0dHJpYnV0ZXMgPSBjbG9uZURlZXAoYXR0cmlidXRlcyk7XG4gICAgbGV0IHRlbXBSdW5GcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICdyJyk7XG4gICAgd2hpbGUgKHZOb2Rlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRlbXBWTm9kZSA9IHZOb2Rlcy5zaGlmdCgpO1xuICAgICAgaWYgKGlzVlRleHQodGVtcFZOb2RlKSkge1xuICAgICAgICBjb25zdCB0ZXh0RnJhZ21lbnQgPSBidWlsZFRleHRFbGVtZW50KHRlbXBWTm9kZS50ZXh0KTtcbiAgICAgICAgY29uc3QgdGVtcFJ1blByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkUnVuUHJvcGVydGllcyh7IC4uLmF0dHJpYnV0ZXMsIC4uLnRlbXBBdHRyaWJ1dGVzIH0pO1xuICAgICAgICB0ZW1wUnVuRnJhZ21lbnQuaW1wb3J0KHRlbXBSdW5Qcm9wZXJ0aWVzRnJhZ21lbnQpO1xuICAgICAgICB0ZW1wUnVuRnJhZ21lbnQuaW1wb3J0KHRleHRGcmFnbWVudCk7XG4gICAgICAgIHJ1bkZyYWdtZW50c0FycmF5LnB1c2godGVtcFJ1bkZyYWdtZW50KTtcblxuICAgICAgICAvLyByZSBpbml0aWFsaXplIHRlbXAgcnVuIGZyYWdtZW50cyB3aXRoIG5ldyBmcmFnbWVudFxuICAgICAgICB0ZW1wQXR0cmlidXRlcyA9IGNsb25lRGVlcChhdHRyaWJ1dGVzKTtcbiAgICAgICAgdGVtcFJ1bkZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoJ0B3JywgJ3InKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNWTm9kZSh0ZW1wVk5vZGUpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnc3Ryb25nJyxcbiAgICAgICAgICAgICdiJyxcbiAgICAgICAgICAgICdlbScsXG4gICAgICAgICAgICAnaScsXG4gICAgICAgICAgICAndScsXG4gICAgICAgICAgICAnaW5zJyxcbiAgICAgICAgICAgICdzdHJpa2UnLFxuICAgICAgICAgICAgJ2RlbCcsXG4gICAgICAgICAgICAncycsXG4gICAgICAgICAgICAnc3ViJyxcbiAgICAgICAgICAgICdzdXAnLFxuICAgICAgICAgICAgJ21hcmsnLFxuICAgICAgICAgICAgJ2NvZGUnLFxuICAgICAgICAgICAgJ3ByZScsXG4gICAgICAgICAgXS5pbmNsdWRlcyh0ZW1wVk5vZGUudGFnTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGVtcEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICBzd2l0Y2ggKHRlbXBWTm9kZS50YWdOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJvbmcnOlxuICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgIHRlbXBBdHRyaWJ1dGVzLnN0cm9uZyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgICAgICAgIHRlbXBBdHRyaWJ1dGVzLmkgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICB0ZW1wQXR0cmlidXRlcy51ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdWInOlxuICAgICAgICAgICAgICB0ZW1wQXR0cmlidXRlcy5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N1cCc6XG4gICAgICAgICAgICAgIHRlbXBBdHRyaWJ1dGVzLnN1cCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3JtYXR0aW5nRnJhZ21lbnQgPSBidWlsZEZvcm1hdHRpbmcodGVtcFZOb2RlKTtcblxuICAgICAgICAgIGlmIChmb3JtYXR0aW5nRnJhZ21lbnQpIHtcbiAgICAgICAgICAgIHJ1blByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQoZm9ybWF0dGluZ0ZyYWdtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZ28gYSBsYXllciBkZWVwZXIgaWYgdGhlcmUgaXMgYSBzcGFuIHNvbWV3aGVyZSBpbiB0aGUgY2hpbGRyZW5cbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wVk5vZGUudGFnTmFtZSA9PT0gJ3NwYW4nKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgY29uc3Qgc3BhbkZyYWdtZW50ID0gYXdhaXQgYnVpbGRSdW5PclJ1bnMoXG4gICAgICAgICAgICB0ZW1wVk5vZGUsXG4gICAgICAgICAgICB7IC4uLmF0dHJpYnV0ZXMsIC4uLnRlbXBBdHRyaWJ1dGVzIH0sXG4gICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBpZiBzcGFuRnJhZ21lbnQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gYWRkIGVhY2ggZnJhZ21lbnQgdG8gdGhlIHJ1bkZyYWdtZW50c0FycmF5LiBJZiB0aGUgZnJhZ21lbnQgaXMgYW4gYXJyYXksIHBlcmZvcm0gYSBkZXB0aCBmaXJzdCBzZWFyY2ggb24gdGhlIGFycmF5IHRvIGFkZCBlYWNoIGZyYWdtZW50IHRvIHRoZSBydW5GcmFnbWVudHNBcnJheVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNwYW5GcmFnbWVudCkpIHtcbiAgICAgICAgICAgIHNwYW5GcmFnbWVudC5mbGF0KEluZmluaXR5KTtcbiAgICAgICAgICAgIHJ1bkZyYWdtZW50c0FycmF5LnB1c2goLi4uc3BhbkZyYWdtZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcnVuRnJhZ21lbnRzQXJyYXkucHVzaChzcGFuRnJhZ21lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGRvIG5vdCBzbGljZSBhbmQgY29uY2F0IGNoaWxkcmVuIHNpbmNlIHRoaXMgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGluIHRoZSBidWlsZFJ1bk9yUnVucyBmdW5jdGlvblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wVk5vZGUuY2hpbGRyZW4gJiYgdGVtcFZOb2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBpZiAodGVtcFZOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzID0geyAuLi5hdHRyaWJ1dGVzLCAuLi50ZW1wQXR0cmlidXRlcyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdk5vZGVzID0gdGVtcFZOb2RlLmNoaWxkcmVuLnNsaWNlKCkuY29uY2F0KHZOb2Rlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChydW5GcmFnbWVudHNBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBydW5GcmFnbWVudHNBcnJheTtcbiAgICB9XG4gIH1cblxuICBydW5GcmFnbWVudC5pbXBvcnQocnVuUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgaWYgKGlzVlRleHQodk5vZGUpKSB7XG4gICAgY29uc3QgdGV4dEZyYWdtZW50ID0gYnVpbGRUZXh0RWxlbWVudCh2Tm9kZS50ZXh0KTtcbiAgICBydW5GcmFnbWVudC5pbXBvcnQodGV4dEZyYWdtZW50KTtcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMudHlwZSA9PT0gJ3BpY3R1cmUnKSB7XG4gICAgbGV0IHJlc3BvbnNlID0gbnVsbDtcblxuICAgIGNvbnN0IGJhc2U2NFVyaSA9IGRlY29kZVVSSUNvbXBvbmVudCh2Tm9kZS5wcm9wZXJ0aWVzLnNyYyk7XG4gICAgaWYgKGJhc2U2NFVyaSkge1xuICAgICAgcmVzcG9uc2UgPSBkb2N4RG9jdW1lbnRJbnN0YW5jZS5jcmVhdGVNZWRpYUZpbGUoYmFzZTY0VXJpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlLnppcFxuICAgICAgICAuZm9sZGVyKCd3b3JkJylcbiAgICAgICAgLmZvbGRlcignbWVkaWEnKVxuICAgICAgICAuZmlsZShyZXNwb25zZS5maWxlTmFtZVdpdGhFeHRlbnNpb24sIEJ1ZmZlci5mcm9tKHJlc3BvbnNlLmZpbGVDb250ZW50LCAnYmFzZTY0JyksIHtcbiAgICAgICAgICBjcmVhdGVGb2xkZXJzOiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRvY3VtZW50UmVsc0lkID0gZG9jeERvY3VtZW50SW5zdGFuY2UuY3JlYXRlRG9jdW1lbnRSZWxhdGlvbnNoaXBzKFxuICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZS5yZWxhdGlvbnNoaXBGaWxlbmFtZSxcbiAgICAgICAgaW1hZ2VUeXBlLFxuICAgICAgICBgbWVkaWEvJHtyZXNwb25zZS5maWxlTmFtZVdpdGhFeHRlbnNpb259YCxcbiAgICAgICAgaW50ZXJuYWxSZWxhdGlvbnNoaXBcbiAgICAgICk7XG5cbiAgICAgIGF0dHJpYnV0ZXMuaW5saW5lT3JBbmNob3JlZCA9IHRydWU7XG4gICAgICBhdHRyaWJ1dGVzLnJlbGF0aW9uc2hpcElkID0gZG9jdW1lbnRSZWxzSWQ7XG4gICAgICBhdHRyaWJ1dGVzLmlkID0gcmVzcG9uc2UuaWQ7XG4gICAgICBhdHRyaWJ1dGVzLmZpbGVDb250ZW50ID0gcmVzcG9uc2UuZmlsZUNvbnRlbnQ7XG4gICAgICBhdHRyaWJ1dGVzLmZpbGVOYW1lV2l0aEV4dGVuc2lvbiA9IHJlc3BvbnNlLmZpbGVOYW1lV2l0aEV4dGVuc2lvbjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGlubGluZU9yQW5jaG9yZWQsIC4uLm90aGVyQXR0cmlidXRlcyB9ID0gYXR0cmlidXRlcztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBjb25zdCBpbWFnZUZyYWdtZW50ID0gYnVpbGREcmF3aW5nKGlubGluZU9yQW5jaG9yZWQsIHR5cGUsIG90aGVyQXR0cmlidXRlcyk7XG4gICAgcnVuRnJhZ21lbnQuaW1wb3J0KGltYWdlRnJhZ21lbnQpO1xuICB9IGVsc2UgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlLnRhZ05hbWUgPT09ICdicicpIHtcbiAgICBjb25zdCBsaW5lQnJlYWtGcmFnbWVudCA9IGJ1aWxkTGluZUJyZWFrKCk7XG4gICAgcnVuRnJhZ21lbnQuaW1wb3J0KGxpbmVCcmVha0ZyYWdtZW50KTtcbiAgfVxuICBydW5GcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBydW5GcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkUnVuT3JSdW5zID0gYXN5bmMgKHZOb2RlLCBhdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSkgPT4ge1xuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUudGFnTmFtZSA9PT0gJ3NwYW4nKSB7XG4gICAgbGV0IHJ1bkZyYWdtZW50cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY2hpbGRWTm9kZSA9IHZOb2RlLmNoaWxkcmVuW2luZGV4XTtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQXR0cmlidXRlcyA9IG1vZGlmaWVkU3R5bGVBdHRyaWJ1dGVzQnVpbGRlcih2Tm9kZSwgYXR0cmlidXRlcyk7XG4gICAgICBjb25zdCB0ZW1wUnVuRnJhZ21lbnRzID0gYXdhaXQgYnVpbGRSdW4oY2hpbGRWTm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSk7XG4gICAgICBydW5GcmFnbWVudHMgPSBydW5GcmFnbWVudHMuY29uY2F0KFxuICAgICAgICBBcnJheS5pc0FycmF5KHRlbXBSdW5GcmFnbWVudHMpID8gdGVtcFJ1bkZyYWdtZW50cyA6IFt0ZW1wUnVuRnJhZ21lbnRzXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVuRnJhZ21lbnRzO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRlbXBSdW5GcmFnbWVudHMgPSBhd2FpdCBidWlsZFJ1bih2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpO1xuICAgIHJldHVybiB0ZW1wUnVuRnJhZ21lbnRzO1xuICB9XG59O1xuXG5jb25zdCBidWlsZFJ1bk9ySHlwZXJMaW5rID0gYXN5bmMgKHZOb2RlLCBhdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSkgPT4ge1xuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUudGFnTmFtZSA9PT0gJ2EnKSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwSWQgPSBkb2N4RG9jdW1lbnRJbnN0YW5jZS5jcmVhdGVEb2N1bWVudFJlbGF0aW9uc2hpcHMoXG4gICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZS5yZWxhdGlvbnNoaXBGaWxlbmFtZSxcbiAgICAgIGh5cGVybGlua1R5cGUsXG4gICAgICB2Tm9kZS5wcm9wZXJ0aWVzICYmIHZOb2RlLnByb3BlcnRpZXMuaHJlZiA/IHZOb2RlLnByb3BlcnRpZXMuaHJlZiA6ICcnXG4gICAgKTtcbiAgICBjb25zdCBoeXBlcmxpbmtGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53LCByOiBuYW1lc3BhY2VzLnIgfSB9KVxuICAgICAgLmVsZSgnQHcnLCAnaHlwZXJsaW5rJylcbiAgICAgIC5hdHQoJ0ByJywgJ2lkJywgYHJJZCR7cmVsYXRpb25zaGlwSWR9YCk7XG5cbiAgICBjb25zdCBtb2RpZmllZEF0dHJpYnV0ZXMgPSB7IC4uLmF0dHJpYnV0ZXMgfTtcbiAgICBtb2RpZmllZEF0dHJpYnV0ZXMuaHlwZXJsaW5rID0gdHJ1ZTtcblxuICAgIGNvbnN0IHJ1bkZyYWdtZW50cyA9IGF3YWl0IGJ1aWxkUnVuT3JSdW5zKFxuICAgICAgdk5vZGUuY2hpbGRyZW5bMF0sXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXG4gICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxuICAgICk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocnVuRnJhZ21lbnRzKSkge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcnVuRnJhZ21lbnQgPSBydW5GcmFnbWVudHNbaW5kZXhdO1xuXG4gICAgICAgIGh5cGVybGlua0ZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGh5cGVybGlua0ZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudHMpO1xuICAgIH1cbiAgICBoeXBlcmxpbmtGcmFnbWVudC51cCgpO1xuXG4gICAgcmV0dXJuIGh5cGVybGlua0ZyYWdtZW50O1xuICB9XG5cbiAgY29uc3QgcnVuRnJhZ21lbnRzID0gYXdhaXQgYnVpbGRSdW5PclJ1bnModk5vZGUsIGF0dHJpYnV0ZXMsIGRvY3hEb2N1bWVudEluc3RhbmNlKTtcblxuICByZXR1cm4gcnVuRnJhZ21lbnRzO1xufTtcblxuY29uc3QgYnVpbGROdW1iZXJpbmdQcm9wZXJ0aWVzID0gKGxldmVsSWQsIG51bWJlcmluZ0lkKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCAnbnVtUHInKVxuICAgIC5lbGUoJ0B3JywgJ2lsdmwnKVxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIFN0cmluZyhsZXZlbElkKSlcbiAgICAudXAoKVxuICAgIC5lbGUoJ0B3JywgJ251bUlkJylcbiAgICAuYXR0KCdAdycsICd2YWwnLCBTdHJpbmcobnVtYmVyaW5nSWQpKVxuICAgIC51cCgpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkTnVtYmVyaW5nSW5zdGFuY2VzID0gKCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ251bScpXG4gICAgLmVsZSgnQHcnLCAnYWJzdHJhY3ROdW1JZCcpXG4gICAgLnVwKClcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRTcGFjaW5nID0gKGxpbmVTcGFjaW5nLCBiZWZvcmVTcGFjaW5nLCBhZnRlclNwYWNpbmcpID0+IHtcbiAgY29uc3Qgc3BhY2luZ0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoJ0B3JywgJ3NwYWNpbmcnKTtcblxuICBpZiAobGluZVNwYWNpbmcpIHtcbiAgICBzcGFjaW5nRnJhZ21lbnQuYXR0KCdAdycsICdsaW5lJywgbGluZVNwYWNpbmcpO1xuICB9XG4gIGlmIChiZWZvcmVTcGFjaW5nKSB7XG4gICAgc3BhY2luZ0ZyYWdtZW50LmF0dCgnQHcnLCAnYmVmb3JlJywgYmVmb3JlU3BhY2luZyk7XG4gIH1cbiAgaWYgKGFmdGVyU3BhY2luZykge1xuICAgIHNwYWNpbmdGcmFnbWVudC5hdHQoJ0B3JywgJ2FmdGVyJywgYWZ0ZXJTcGFjaW5nKTtcbiAgfVxuXG4gIHNwYWNpbmdGcmFnbWVudC5hdHQoJ0B3JywgJ2xpbmVSdWxlJywgJ2F1dG8nKS51cCgpO1xuXG4gIHJldHVybiBzcGFjaW5nRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZEluZGVudGF0aW9uID0gKHsgbGVmdCwgcmlnaHQgfSkgPT4ge1xuICBjb25zdCBpbmRlbnRhdGlvbkZyYWdtZW50ID0gZnJhZ21lbnQoe1xuICAgIG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9LFxuICB9KS5lbGUoJ0B3JywgJ2luZCcpO1xuXG4gIGlmIChsZWZ0KSB7XG4gICAgaW5kZW50YXRpb25GcmFnbWVudC5hdHQoJ0B3JywgJ2xlZnQnLCBsZWZ0KTtcbiAgfVxuICBpZiAocmlnaHQpIHtcbiAgICBpbmRlbnRhdGlvbkZyYWdtZW50LmF0dCgnQHcnLCAncmlnaHQnLCByaWdodCk7XG4gIH1cblxuICBpbmRlbnRhdGlvbkZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIGluZGVudGF0aW9uRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZFBTdHlsZSA9IChzdHlsZSA9ICdOb3JtYWwnKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCAncFN0eWxlJylcbiAgICAuYXR0KCdAdycsICd2YWwnLCBzdHlsZSlcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRIb3Jpem9udGFsQWxpZ25tZW50ID0gKGhvcml6b250YWxBbGlnbm1lbnQpID0+IHtcbiAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT09ICdqdXN0aWZ5Jykge1xuICAgIGhvcml6b250YWxBbGlnbm1lbnQgPSAnYm90aCc7XG4gIH1cbiAgcmV0dXJuIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdqYycpXG4gICAgLmF0dCgnQHcnLCAndmFsJywgaG9yaXpvbnRhbEFsaWdubWVudClcbiAgICAudXAoKTtcbn07XG5cbmNvbnN0IGJ1aWxkUGFyYWdyYXBoQm9yZGVyID0gKCkgPT4ge1xuICBjb25zdCBwYXJhZ3JhcGhCb3JkZXJGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKFxuICAgICdAdycsXG4gICAgJ3BCZHInXG4gICk7XG4gIGNvbnN0IGJvcmRlcnNPYmplY3QgPSBjbG9uZURlZXAocGFyYWdyYXBoQm9yZGVyc09iamVjdCk7XG5cbiAgT2JqZWN0LmtleXMoYm9yZGVyc09iamVjdCkuZm9yRWFjaCgoYm9yZGVyTmFtZSkgPT4ge1xuICAgIGlmIChib3JkZXJzT2JqZWN0W2JvcmRlck5hbWVdKSB7XG4gICAgICBjb25zdCB7IHNpemUsIHNwYWNpbmcsIGNvbG9yIH0gPSBib3JkZXJzT2JqZWN0W2JvcmRlck5hbWVdO1xuXG4gICAgICBjb25zdCBib3JkZXJGcmFnbWVudCA9IGJ1aWxkQm9yZGVyKGJvcmRlck5hbWUsIHNpemUsIHNwYWNpbmcsIGNvbG9yKTtcbiAgICAgIHBhcmFncmFwaEJvcmRlckZyYWdtZW50LmltcG9ydChib3JkZXJGcmFnbWVudCk7XG4gICAgfVxuICB9KTtcblxuICBwYXJhZ3JhcGhCb3JkZXJGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBwYXJhZ3JhcGhCb3JkZXJGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkUGFyYWdyYXBoUHJvcGVydGllcyA9IChhdHRyaWJ1dGVzKSA9PiB7XG4gIGNvbnN0IHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKFxuICAgICdAdycsXG4gICAgJ3BQcidcbiAgKTtcbiAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdudW1iZXJpbmcnOlxuICAgICAgICAgIGNvbnN0IHsgbGV2ZWxJZCwgbnVtYmVyaW5nSWQgfSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICBjb25zdCBudW1iZXJpbmdQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZE51bWJlcmluZ1Byb3BlcnRpZXMobGV2ZWxJZCwgbnVtYmVyaW5nSWQpO1xuICAgICAgICAgIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQobnVtYmVyaW5nUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy5udW1iZXJpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RleHRBbGlnbic6XG4gICAgICAgICAgY29uc3QgaG9yaXpvbnRhbEFsaWdubWVudEZyYWdtZW50ID0gYnVpbGRIb3Jpem9udGFsQWxpZ25tZW50KGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgICAgICAgcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChob3Jpem9udGFsQWxpZ25tZW50RnJhZ21lbnQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnRleHRBbGlnbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFja2dyb3VuZENvbG9yJzpcbiAgICAgICAgICAvLyBBZGQgc2hhZGluZyB0byBQYXJhZ3JhcGggUHJvcGVydGllcyBvbmx5IGlmIGRpc3BsYXkgaXMgYmxvY2tcbiAgICAgICAgICAvLyBFc3NlbnRpYWxseSBpZiBiYWNrZ3JvdW5kIGNvbG9yIG5lZWRzIHRvIGJlIGFjcm9zcyB0aGUgcm93XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGlzcGxheSA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgY29uc3Qgc2hhZGluZ0ZyYWdtZW50ID0gYnVpbGRTaGFkaW5nKGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgICAgICAgICBwYXJhZ3JhcGhQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHNoYWRpbmdGcmFnbWVudCk7XG4gICAgICAgICAgICAvLyBGSVhNRTogSW5uZXIgcGFkZGluZyBpbiBjYXNlIG9mIHNoYWRlZCBwYXJhZ3JhcGhzLlxuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoQm9yZGVyRnJhZ21lbnQgPSBidWlsZFBhcmFncmFwaEJvcmRlcigpO1xuICAgICAgICAgICAgcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChwYXJhZ3JhcGhCb3JkZXJGcmFnbWVudCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhcmFncmFwaFN0eWxlJzpcbiAgICAgICAgICBjb25zdCBwU3R5bGVGcmFnbWVudCA9IGJ1aWxkUFN0eWxlKGF0dHJpYnV0ZXMucGFyYWdyYXBoU3R5bGUpO1xuICAgICAgICAgIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQocFN0eWxlRnJhZ21lbnQpO1xuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnBhcmFncmFwaFN0eWxlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbmRlbnRhdGlvbic6XG4gICAgICAgICAgY29uc3QgaW5kZW50YXRpb25GcmFnbWVudCA9IGJ1aWxkSW5kZW50YXRpb24oYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICBwYXJhZ3JhcGhQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KGluZGVudGF0aW9uRnJhZ21lbnQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmluZGVudGF0aW9uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3BhY2luZ0ZyYWdtZW50ID0gYnVpbGRTcGFjaW5nKFxuICAgICAgYXR0cmlidXRlcy5saW5lSGVpZ2h0LFxuICAgICAgYXR0cmlidXRlcy5iZWZvcmVTcGFjaW5nLFxuICAgICAgYXR0cmlidXRlcy5hZnRlclNwYWNpbmdcbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmxpbmVIZWlnaHQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgZGVsZXRlIGF0dHJpYnV0ZXMuYmVmb3JlU3BhY2luZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBkZWxldGUgYXR0cmlidXRlcy5hZnRlclNwYWNpbmc7XG5cbiAgICBwYXJhZ3JhcGhQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHNwYWNpbmdGcmFnbWVudCk7XG4gIH1cbiAgcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudDtcbn07XG5cbmNvbnN0IGNvbXB1dGVJbWFnZURpbWVuc2lvbnMgPSAodk5vZGUsIGF0dHJpYnV0ZXMpID0+IHtcbiAgY29uc3QgeyBtYXhpbXVtV2lkdGgsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0IH0gPSBhdHRyaWJ1dGVzO1xuICBjb25zdCBhc3BlY3RSYXRpbyA9IG9yaWdpbmFsV2lkdGggLyBvcmlnaW5hbEhlaWdodDtcbiAgY29uc3QgbWF4aW11bVdpZHRoSW5FTVUgPSBUV0lQVG9FTVUobWF4aW11bVdpZHRoKTtcbiAgbGV0IG9yaWdpbmFsV2lkdGhJbkVNVSA9IHBpeGVsVG9FTVUob3JpZ2luYWxXaWR0aCk7XG4gIGxldCBvcmlnaW5hbEhlaWdodEluRU1VID0gcGl4ZWxUb0VNVShvcmlnaW5hbEhlaWdodCk7XG4gIGlmIChvcmlnaW5hbFdpZHRoSW5FTVUgPiBtYXhpbXVtV2lkdGhJbkVNVSkge1xuICAgIG9yaWdpbmFsV2lkdGhJbkVNVSA9IG1heGltdW1XaWR0aEluRU1VO1xuICAgIG9yaWdpbmFsSGVpZ2h0SW5FTVUgPSBNYXRoLnJvdW5kKG9yaWdpbmFsV2lkdGhJbkVNVSAvIGFzcGVjdFJhdGlvKTtcbiAgfVxuICBsZXQgbW9kaWZpZWRIZWlnaHQ7XG4gIGxldCBtb2RpZmllZFdpZHRoO1xuXG4gIGlmICh2Tm9kZS5wcm9wZXJ0aWVzICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGUpIHtcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aCkge1xuICAgICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUud2lkdGggIT09ICdhdXRvJykge1xuICAgICAgICBpZiAocGl4ZWxSZWdleC50ZXN0KHZOb2RlLnByb3BlcnRpZXMuc3R5bGUud2lkdGgpKSB7XG4gICAgICAgICAgbW9kaWZpZWRXaWR0aCA9IHBpeGVsVG9FTVUodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aC5tYXRjaChwaXhlbFJlZ2V4KVsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGVyY2VudGFnZVJlZ2V4LnRlc3Qodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aCkpIHtcbiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlVmFsdWUgPSB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLndpZHRoLm1hdGNoKHBlcmNlbnRhZ2VSZWdleClbMV07XG5cbiAgICAgICAgICBtb2RpZmllZFdpZHRoID0gTWF0aC5yb3VuZCgocGVyY2VudGFnZVZhbHVlIC8gMTAwKSAqIG9yaWdpbmFsV2lkdGhJbkVNVSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lbHktaWZcbiAgICAgICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0ICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0ID09PSAnYXV0bycpIHtcbiAgICAgICAgICBtb2RpZmllZFdpZHRoID0gb3JpZ2luYWxXaWR0aEluRU1VO1xuICAgICAgICAgIG1vZGlmaWVkSGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHRJbkVNVTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS5oZWlnaHQpIHtcbiAgICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCAhPT0gJ2F1dG8nKSB7XG4gICAgICAgIGlmIChwaXhlbFJlZ2V4LnRlc3Qodk5vZGUucHJvcGVydGllcy5zdHlsZS5oZWlnaHQpKSB7XG4gICAgICAgICAgbW9kaWZpZWRIZWlnaHQgPSBwaXhlbFRvRU1VKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0Lm1hdGNoKHBpeGVsUmVnZXgpWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCkpIHtcbiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlVmFsdWUgPSB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLndpZHRoLm1hdGNoKHBlcmNlbnRhZ2VSZWdleClbMV07XG5cbiAgICAgICAgICBtb2RpZmllZEhlaWdodCA9IE1hdGgucm91bmQoKHBlcmNlbnRhZ2VWYWx1ZSAvIDEwMCkgKiBvcmlnaW5hbEhlaWdodEluRU1VKTtcbiAgICAgICAgICBpZiAoIW1vZGlmaWVkV2lkdGgpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkV2lkdGggPSBNYXRoLnJvdW5kKG1vZGlmaWVkSGVpZ2h0ICogYXNwZWN0UmF0aW8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmVseS1pZlxuICAgICAgICBpZiAobW9kaWZpZWRXaWR0aCkge1xuICAgICAgICAgIGlmICghbW9kaWZpZWRIZWlnaHQpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkSGVpZ2h0ID0gTWF0aC5yb3VuZChtb2RpZmllZFdpZHRoIC8gYXNwZWN0UmF0aW8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RpZmllZEhlaWdodCA9IG9yaWdpbmFsSGVpZ2h0SW5FTVU7XG4gICAgICAgICAgbW9kaWZpZWRXaWR0aCA9IG9yaWdpbmFsV2lkdGhJbkVNVTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobW9kaWZpZWRXaWR0aCAmJiAhbW9kaWZpZWRIZWlnaHQpIHtcbiAgICAgIG1vZGlmaWVkSGVpZ2h0ID0gTWF0aC5yb3VuZChtb2RpZmllZFdpZHRoIC8gYXNwZWN0UmF0aW8pO1xuICAgIH0gZWxzZSBpZiAobW9kaWZpZWRIZWlnaHQgJiYgIW1vZGlmaWVkV2lkdGgpIHtcbiAgICAgIG1vZGlmaWVkV2lkdGggPSBNYXRoLnJvdW5kKG1vZGlmaWVkSGVpZ2h0ICogYXNwZWN0UmF0aW8pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtb2RpZmllZFdpZHRoID0gb3JpZ2luYWxXaWR0aEluRU1VO1xuICAgIG1vZGlmaWVkSGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHRJbkVNVTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBhdHRyaWJ1dGVzLndpZHRoID0gbW9kaWZpZWRXaWR0aDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gbW9kaWZpZWRIZWlnaHQ7XG59O1xuXG5jb25zdCBidWlsZFBhcmFncmFwaCA9IGFzeW5jICh2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpID0+IHtcbiAgY29uc3QgcGFyYWdyYXBoRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAncCcpO1xuICBjb25zdCBtb2RpZmllZEF0dHJpYnV0ZXMgPSBtb2RpZmllZFN0eWxlQXR0cmlidXRlc0J1aWxkZXIodk5vZGUsIGF0dHJpYnV0ZXMsIHtcbiAgICBpc1BhcmFncmFwaDogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkUGFyYWdyYXBoUHJvcGVydGllcyhtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdHJvbmcnLFxuICAgICAgICAnYicsXG4gICAgICAgICdlbScsXG4gICAgICAgICdpJyxcbiAgICAgICAgJ3UnLFxuICAgICAgICAnaW5zJyxcbiAgICAgICAgJ3N0cmlrZScsXG4gICAgICAgICdkZWwnLFxuICAgICAgICAncycsXG4gICAgICAgICdzdWInLFxuICAgICAgICAnc3VwJyxcbiAgICAgICAgJ21hcmsnLFxuICAgICAgICAnYScsXG4gICAgICAgICdjb2RlJyxcbiAgICAgICAgJ3ByZScsXG4gICAgICBdLmluY2x1ZGVzKHZOb2RlLnRhZ05hbWUpXG4gICAgKSB7XG4gICAgICBjb25zdCBydW5Pckh5cGVybGlua0ZyYWdtZW50cyA9IGF3YWl0IGJ1aWxkUnVuT3JIeXBlckxpbmsoXG4gICAgICAgIHZOb2RlLFxuICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXG4gICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXG4gICAgICApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVuT3JIeXBlcmxpbmtGcmFnbWVudHMpKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgbGV0IGl0ZXJhdG9ySW5kZXggPSAwO1xuICAgICAgICAgIGl0ZXJhdG9ySW5kZXggPCBydW5Pckh5cGVybGlua0ZyYWdtZW50cy5sZW5ndGg7XG4gICAgICAgICAgaXRlcmF0b3JJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnQgPSBydW5Pckh5cGVybGlua0ZyYWdtZW50c1tpdGVyYXRvckluZGV4XTtcblxuICAgICAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5Pckh5cGVybGlua0ZyYWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYWdyYXBoRnJhZ21lbnQuaW1wb3J0KHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZOb2RlLnRhZ05hbWUgPT09ICdibG9ja3F1b3RlJykge1xuICAgICAgY29uc3QgcnVuRnJhZ21lbnRPckZyYWdtZW50cyA9IGF3YWl0IGJ1aWxkUnVuKHZOb2RlLCBhdHRyaWJ1dGVzKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bkZyYWdtZW50T3JGcmFnbWVudHMpKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBydW5GcmFnbWVudE9yRnJhZ21lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudE9yRnJhZ21lbnRzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudE9yRnJhZ21lbnRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBjaGlsZFZOb2RlID0gdk5vZGUuY2hpbGRyZW5baW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGRWTm9kZS50YWdOYW1lID09PSAnaW1nJykge1xuICAgICAgICAgIGxldCBiYXNlNjRTdHJpbmc7XG4gICAgICAgICAgY29uc3QgaW1hZ2VTb3VyY2UgPSBjaGlsZFZOb2RlLnByb3BlcnRpZXMuc3JjO1xuICAgICAgICAgIGlmIChpc1ZhbGlkVXJsKGltYWdlU291cmNlKSkge1xuICAgICAgICAgICAgYmFzZTY0U3RyaW5nID0gYXdhaXQgaW1hZ2VUb0Jhc2U2NChpbWFnZVNvdXJjZSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybmluZyhgc2tpcHBpbmcgaW1hZ2UgZG93bmxvYWQgYW5kIGNvbnZlcnNpb24gZHVlIHRvICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGJhc2U2NFN0cmluZyAmJiBtaW1lVHlwZXMubG9va3VwKGltYWdlU291cmNlKSkge1xuICAgICAgICAgICAgICBjaGlsZFZOb2RlLnByb3BlcnRpZXMuc3JjID0gYGRhdGE6JHttaW1lVHlwZXMubG9va3VwKFxuICAgICAgICAgICAgICAgIGltYWdlU291cmNlXG4gICAgICAgICAgICAgICl9O2Jhc2U2NCwgJHtiYXNlNjRTdHJpbmd9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGUsIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBiYXNlNjRTdHJpbmcgPSBpbWFnZVNvdXJjZS5tYXRjaCgvXmRhdGE6KFtBLVphLXotK1xcL10rKTtiYXNlNjQsKC4rKSQvKVsyXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShkZWNvZGVVUklDb21wb25lbnQoYmFzZTY0U3RyaW5nKSwgJ2Jhc2U2NCcpO1xuICAgICAgICAgIGNvbnN0IGltYWdlUHJvcGVydGllcyA9IHNpemVPZihpbWFnZUJ1ZmZlcik7XG5cbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMubWF4aW11bVdpZHRoID1cbiAgICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5tYXhpbXVtV2lkdGggfHwgZG9jeERvY3VtZW50SW5zdGFuY2UuYXZhaWxhYmxlRG9jdW1lbnRTcGFjZTtcbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMub3JpZ2luYWxXaWR0aCA9IGltYWdlUHJvcGVydGllcy53aWR0aDtcbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMub3JpZ2luYWxIZWlnaHQgPSBpbWFnZVByb3BlcnRpZXMuaGVpZ2h0O1xuXG4gICAgICAgICAgY29tcHV0ZUltYWdlRGltZW5zaW9ucyhjaGlsZFZOb2RlLCBtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzID0gYXdhaXQgYnVpbGRSdW5Pckh5cGVyTGluayhcbiAgICAgICAgICBjaGlsZFZOb2RlLFxuICAgICAgICAgIGlzVk5vZGUoY2hpbGRWTm9kZSkgJiYgY2hpbGRWTm9kZS50YWdOYW1lID09PSAnaW1nJ1xuICAgICAgICAgICAgPyB7IC4uLm1vZGlmaWVkQXR0cmlidXRlcywgdHlwZTogJ3BpY3R1cmUnIH1cbiAgICAgICAgICAgIDogbW9kaWZpZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzKSkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgaXRlcmF0b3JJbmRleCA9IDA7XG4gICAgICAgICAgICBpdGVyYXRvckluZGV4IDwgcnVuT3JIeXBlcmxpbmtGcmFnbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgaXRlcmF0b3JJbmRleCsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBydW5Pckh5cGVybGlua0ZyYWdtZW50ID0gcnVuT3JIeXBlcmxpbmtGcmFnbWVudHNbaXRlcmF0b3JJbmRleF07XG5cbiAgICAgICAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5Pckh5cGVybGlua0ZyYWdtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYWdyYXBoRnJhZ21lbnQuaW1wb3J0KHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBjYXNlIHBhcmFncmFwaHMgaGFzIHRvIGJlIHJlbmRlcmVkIHdoZXJlIHZUZXh0IGlzIHByZXNlbnQuIEVnLiB0YWJsZS1jZWxsXG4gICAgLy8gT3IgaW4gY2FzZSB0aGUgdk5vZGUgaXMgc29tZXRoaW5nIGxpa2UgaW1nXG4gICAgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlLnRhZ05hbWUgPT09ICdpbWcnKSB7XG4gICAgICBjb25zdCBpbWFnZVNvdXJjZSA9IHZOb2RlLnByb3BlcnRpZXMuc3JjO1xuICAgICAgbGV0IGJhc2U2NFN0cmluZyA9IGltYWdlU291cmNlO1xuICAgICAgaWYgKGlzVmFsaWRVcmwoaW1hZ2VTb3VyY2UpKSB7XG4gICAgICAgIGJhc2U2NFN0cmluZyA9IGF3YWl0IGltYWdlVG9CYXNlNjQoaW1hZ2VTb3VyY2UpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuaW5nKGBza2lwcGluZyBpbWFnZSBkb3dubG9hZCBhbmQgY29udmVyc2lvbiBkdWUgdG8gJHtlcnJvcn1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGJhc2U2NFN0cmluZyAmJiBtaW1lVHlwZXMubG9va3VwKGltYWdlU291cmNlKSkge1xuICAgICAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3JjID0gYGRhdGE6JHttaW1lVHlwZXMubG9va3VwKGltYWdlU291cmNlKX07YmFzZTY0LCAke2Jhc2U2NFN0cmluZ31gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmFncmFwaEZyYWdtZW50LnVwKCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoRnJhZ21lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZSwgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLm1hdGNoKC9eZGF0YTooW0EtWmEtei0rXFwvXSspO2Jhc2U2NCwoLispJC8pWzJdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGRlY29kZVVSSUNvbXBvbmVudChiYXNlNjRTdHJpbmcpLCAnYmFzZTY0Jyk7XG4gICAgICBjb25zdCBpbWFnZVByb3BlcnRpZXMgPSBzaXplT2YoaW1hZ2VCdWZmZXIpO1xuXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMubWF4aW11bVdpZHRoID1cbiAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm1heGltdW1XaWR0aCB8fCBkb2N4RG9jdW1lbnRJbnN0YW5jZS5hdmFpbGFibGVEb2N1bWVudFNwYWNlO1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm9yaWdpbmFsV2lkdGggPSBpbWFnZVByb3BlcnRpZXMud2lkdGg7XG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMub3JpZ2luYWxIZWlnaHQgPSBpbWFnZVByb3BlcnRpZXMuaGVpZ2h0O1xuXG4gICAgICBjb21wdXRlSW1hZ2VEaW1lbnNpb25zKHZOb2RlLCBtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICBjb25zdCBydW5GcmFnbWVudHMgPSBhd2FpdCBidWlsZFJ1bk9yUnVucyh2Tm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocnVuRnJhZ21lbnRzKSkge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcnVuRnJhZ21lbnQgPSBydW5GcmFnbWVudHNbaW5kZXhdO1xuXG4gICAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudHMpO1xuICAgIH1cbiAgfVxuICBwYXJhZ3JhcGhGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBwYXJhZ3JhcGhGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkR3JpZFNwYW5GcmFnbWVudCA9IChzcGFuVmFsdWUpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAuZWxlKCdAdycsICdncmlkU3BhbicpXG4gICAgLmF0dCgnQHcnLCAndmFsJywgc3BhblZhbHVlKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZFRhYmxlQ2VsbFNwYWNpbmcgPSAoY2VsbFNwYWNpbmcgPSAwKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCAndGJsQ2VsbFNwYWNpbmcnKVxuICAgIC5hdHQoJ0B3JywgJ3cnLCBjZWxsU3BhY2luZylcbiAgICAuYXR0KCdAdycsICd0eXBlJywgJ2R4YScpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkVGFibGVDZWxsQm9yZGVycyA9ICh0YWJsZUNlbGxCb3JkZXIpID0+IHtcbiAgY29uc3QgdGFibGVDZWxsQm9yZGVyc0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXG4gICAgJ0B3JyxcbiAgICAndGNCb3JkZXJzJ1xuICApO1xuXG4gIGNvbnN0IHsgY29sb3IsIHN0cm9rZSwgLi4uYm9yZGVycyB9ID0gdGFibGVDZWxsQm9yZGVyO1xuICBPYmplY3Qua2V5cyhib3JkZXJzKS5mb3JFYWNoKChib3JkZXIpID0+IHtcbiAgICBpZiAodGFibGVDZWxsQm9yZGVyW2JvcmRlcl0pIHtcbiAgICAgIGNvbnN0IGJvcmRlckZyYWdtZW50ID0gYnVpbGRCb3JkZXIoYm9yZGVyLCB0YWJsZUNlbGxCb3JkZXJbYm9yZGVyXSwgMCwgY29sb3IsIHN0cm9rZSk7XG4gICAgICB0YWJsZUNlbGxCb3JkZXJzRnJhZ21lbnQuaW1wb3J0KGJvcmRlckZyYWdtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHRhYmxlQ2VsbEJvcmRlcnNGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiB0YWJsZUNlbGxCb3JkZXJzRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZFRhYmxlQ2VsbFdpZHRoID0gKHRhYmxlQ2VsbFdpZHRoKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCAndGNXJylcbiAgICAuYXR0KCdAdycsICd3JywgZml4dXBDb2x1bW5XaWR0aCh0YWJsZUNlbGxXaWR0aCkpXG4gICAgLmF0dCgnQHcnLCAndHlwZScsICdkeGEnKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZFRhYmxlQ2VsbFByb3BlcnRpZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZShcbiAgICAnQHcnLFxuICAgICd0Y1ByJ1xuICApO1xuICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmRDb2xvcic6XG4gICAgICAgICAgY29uc3Qgc2hhZGluZ0ZyYWdtZW50ID0gYnVpbGRTaGFkaW5nKGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgICAgICAgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChzaGFkaW5nRnJhZ21lbnQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndmVydGljYWxBbGlnbic6XG4gICAgICAgICAgY29uc3QgdmVydGljYWxBbGlnbm1lbnRGcmFnbWVudCA9IGJ1aWxkVmVydGljYWxBbGlnbm1lbnQoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHZlcnRpY2FsQWxpZ25tZW50RnJhZ21lbnQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnZlcnRpY2FsQWxpZ247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbFNwYW4nOlxuICAgICAgICAgIGNvbnN0IGdyaWRTcGFuRnJhZ21lbnQgPSBidWlsZEdyaWRTcGFuRnJhZ21lbnQoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KGdyaWRTcGFuRnJhZ21lbnQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmNvbFNwYW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RhYmxlQ2VsbEJvcmRlcic6XG4gICAgICAgICAgY29uc3QgdGFibGVDZWxsQm9yZGVyRnJhZ21lbnQgPSBidWlsZFRhYmxlQ2VsbEJvcmRlcnMoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHRhYmxlQ2VsbEJvcmRlckZyYWdtZW50KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Jvd1NwYW4nOlxuICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTWVyZ2VGcmFnbWVudCA9IGJ1aWxkVmVydGljYWxNZXJnZShhdHRyaWJ1dGVzW2tleV0pO1xuICAgICAgICAgIHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodmVydGljYWxNZXJnZUZyYWdtZW50KTtcblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnJvd1NwYW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICBjb25zdCB3aWR0aEZyYWdtZW50ID0gYnVpbGRUYWJsZUNlbGxXaWR0aChhdHRyaWJ1dGVzW2tleV0pO1xuICAgICAgICAgIHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQod2lkdGhGcmFnbWVudCk7XG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudDtcbn07XG5cbmNvbnN0IGZpeHVwVGFibGVDZWxsQm9yZGVyID0gKHZOb2RlLCBhdHRyaWJ1dGVzKSA9PiB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodk5vZGUucHJvcGVydGllcy5zdHlsZSwgJ2JvcmRlcicpKSB7XG4gICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuYm9yZGVyID09PSAnbm9uZScgfHwgdk5vZGUucHJvcGVydGllcy5zdHlsZS5ib3JkZXIgPT09IDApIHtcbiAgICAgIGF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgY29uc3QgW2JvcmRlclNpemUsIGJvcmRlclN0cm9rZSwgYm9yZGVyQ29sb3JdID0gY3NzQm9yZGVyUGFyc2VyKFxuICAgICAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmJvcmRlclxuICAgICAgKTtcblxuICAgICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XG4gICAgICAgIHRvcDogYm9yZGVyU2l6ZSxcbiAgICAgICAgbGVmdDogYm9yZGVyU2l6ZSxcbiAgICAgICAgYm90dG9tOiBib3JkZXJTaXplLFxuICAgICAgICByaWdodDogYm9yZGVyU2l6ZSxcbiAgICAgICAgY29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgICBzdHJva2U6IGJvcmRlclN0cm9rZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItdG9wJ10gJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXRvcCddID09PSAnMCcpIHtcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxuICAgICAgdG9wOiAwLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXRvcCddICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci10b3AnXSAhPT0gJzAnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgY29uc3QgW2JvcmRlclNpemUsIGJvcmRlclN0cm9rZSwgYm9yZGVyQ29sb3JdID0gY3NzQm9yZGVyUGFyc2VyKFxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXRvcCddXG4gICAgKTtcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxuICAgICAgdG9wOiBib3JkZXJTaXplLFxuICAgICAgY29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgc3Ryb2tlOiBib3JkZXJTdHJva2UsXG4gICAgfTtcbiAgfVxuICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWxlZnQnXSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItbGVmdCddID09PSAnMCcpIHtcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxuICAgICAgbGVmdDogMCxcbiAgICB9O1xuICB9IGVsc2UgaWYgKFxuICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci1sZWZ0J10gJiZcbiAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItbGVmdCddICE9PSAnMCdcbiAgKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgY29uc3QgW2JvcmRlclNpemUsIGJvcmRlclN0cm9rZSwgYm9yZGVyQ29sb3JdID0gY3NzQm9yZGVyUGFyc2VyKFxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWxlZnQnXVxuICAgICk7XG4gICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XG4gICAgICAuLi5hdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlcixcbiAgICAgIGxlZnQ6IGJvcmRlclNpemUsXG4gICAgICBjb2xvcjogYm9yZGVyQ29sb3IsXG4gICAgICBzdHJva2U6IGJvcmRlclN0cm9rZSxcbiAgICB9O1xuICB9XG4gIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItYm90dG9tJ10gJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWJvdHRvbSddID09PSAnMCcpIHtcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxuICAgICAgYm90dG9tOiAwLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoXG4gICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWJvdHRvbSddICYmXG4gICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWJvdHRvbSddICE9PSAnMCdcbiAgKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgY29uc3QgW2JvcmRlclNpemUsIGJvcmRlclN0cm9rZSwgYm9yZGVyQ29sb3JdID0gY3NzQm9yZGVyUGFyc2VyKFxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWJvdHRvbSddXG4gICAgKTtcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxuICAgICAgYm90dG9tOiBib3JkZXJTaXplLFxuICAgICAgY29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgc3Ryb2tlOiBib3JkZXJTdHJva2UsXG4gICAgfTtcbiAgfVxuICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXJpZ2h0J10gJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXJpZ2h0J10gPT09ICcwJykge1xuICAgIGF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyID0ge1xuICAgICAgLi4uYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIsXG4gICAgICByaWdodDogMCxcbiAgICB9O1xuICB9IGVsc2UgaWYgKFxuICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci1yaWdodCddICYmXG4gICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXJpZ2h0J10gIT09ICcwJ1xuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBjb25zdCBbYm9yZGVyU2l6ZSwgYm9yZGVyU3Ryb2tlLCBib3JkZXJDb2xvcl0gPSBjc3NCb3JkZXJQYXJzZXIoXG4gICAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItcmlnaHQnXVxuICAgICk7XG4gICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XG4gICAgICAuLi5hdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlcixcbiAgICAgIHJpZ2h0OiBib3JkZXJTaXplLFxuICAgICAgY29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgc3Ryb2tlOiBib3JkZXJTdHJva2UsXG4gICAgfTtcbiAgfVxufTtcblxuY29uc3QgYnVpbGRUYWJsZUNlbGwgPSBhc3luYyAodk5vZGUsIGF0dHJpYnV0ZXMsIHJvd1NwYW5NYXAsIGNvbHVtbkluZGV4LCBkb2N4RG9jdW1lbnRJbnN0YW5jZSkgPT4ge1xuICBjb25zdCB0YWJsZUNlbGxGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICd0YycpO1xuXG4gIGxldCBtb2RpZmllZEF0dHJpYnV0ZXMgPSB7IC4uLmF0dHJpYnV0ZXMgfTtcbiAgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlLnByb3BlcnRpZXMpIHtcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5yb3dTcGFuKSB7XG4gICAgICByb3dTcGFuTWFwLnNldChjb2x1bW5JbmRleC5pbmRleCwgeyByb3dTcGFuOiB2Tm9kZS5wcm9wZXJ0aWVzLnJvd1NwYW4gLSAxLCBjb2xTcGFuOiAwIH0pO1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnJvd1NwYW4gPSAncmVzdGFydCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3Bhbk9iamVjdCA9IHJvd1NwYW5NYXAuZ2V0KGNvbHVtbkluZGV4LmluZGV4KTtcbiAgICAgIHJvd1NwYW5NYXAuc2V0KFxuICAgICAgICBjb2x1bW5JbmRleC5pbmRleCxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1vYmplY3Qtc3ByZWFkXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHByZXZpb3VzU3Bhbk9iamVjdCwge1xuICAgICAgICAgIHJvd1NwYW46IDAsXG4gICAgICAgICAgY29sU3BhbjogKHByZXZpb3VzU3Bhbk9iamVjdCAmJiBwcmV2aW91c1NwYW5PYmplY3QuY29sU3BhbikgfHwgMCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHZOb2RlLnByb3BlcnRpZXMuY29sU3BhbiB8fFxuICAgICAgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUgJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnY29sdW1uLXNwYW4nXSlcbiAgICApIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5jb2xTcGFuID1cbiAgICAgICAgdk5vZGUucHJvcGVydGllcy5jb2xTcGFuIHx8XG4gICAgICAgICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2NvbHVtbi1zcGFuJ10pO1xuICAgICAgY29uc3QgcHJldmlvdXNTcGFuT2JqZWN0ID0gcm93U3Bhbk1hcC5nZXQoY29sdW1uSW5kZXguaW5kZXgpO1xuICAgICAgcm93U3Bhbk1hcC5zZXQoXG4gICAgICAgIGNvbHVtbkluZGV4LmluZGV4LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLW9iamVjdC1zcHJlYWRcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcHJldmlvdXNTcGFuT2JqZWN0LCB7XG4gICAgICAgICAgY29sU3BhbjogcGFyc2VJbnQobW9kaWZpZWRBdHRyaWJ1dGVzLmNvbFNwYW4pIHx8IDAsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29sdW1uSW5kZXguaW5kZXggKz0gcGFyc2VJbnQobW9kaWZpZWRBdHRyaWJ1dGVzLmNvbFNwYW4pIC0gMTtcbiAgICB9XG4gICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUpIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4ubW9kaWZpZWRBdHRyaWJ1dGVzLFxuICAgICAgICAuLi5tb2RpZmllZFN0eWxlQXR0cmlidXRlc0J1aWxkZXIodk5vZGUsIGF0dHJpYnV0ZXMpLFxuICAgICAgfTtcblxuICAgICAgZml4dXBUYWJsZUNlbGxCb3JkZXIodk5vZGUsIG1vZGlmaWVkQXR0cmlidXRlcyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkVGFibGVDZWxsUHJvcGVydGllcyhtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICB0YWJsZUNlbGxGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgaWYgKHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY2hpbGRWTm9kZSA9IHZOb2RlLmNoaWxkcmVuW2luZGV4XTtcbiAgICAgIGlmIChpc1ZOb2RlKGNoaWxkVk5vZGUpICYmIGNoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ2ltZycpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VGcmFnbWVudCA9IGF3YWl0IGJ1aWxkSW1hZ2UoXG4gICAgICAgICAgZG9jeERvY3VtZW50SW5zdGFuY2UsXG4gICAgICAgICAgY2hpbGRWTm9kZSxcbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMubWF4aW11bVdpZHRoXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbWFnZUZyYWdtZW50KSB7XG4gICAgICAgICAgdGFibGVDZWxsRnJhZ21lbnQuaW1wb3J0KGltYWdlRnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzVk5vZGUoY2hpbGRWTm9kZSkgJiYgY2hpbGRWTm9kZS50YWdOYW1lID09PSAnZmlndXJlJykge1xuICAgICAgICBpZiAodk5vZGVIYXNDaGlsZHJlbihjaGlsZFZOb2RlKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1c1xuICAgICAgICAgIGZvciAobGV0IGl0ZXJhdG9ySW5kZXggPSAwOyBpdGVyYXRvckluZGV4IDwgY2hpbGRWTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGl0ZXJhdG9ySW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgZ3JhbmRDaGlsZFZOb2RlID0gY2hpbGRWTm9kZS5jaGlsZHJlbltpdGVyYXRvckluZGV4XTtcbiAgICAgICAgICAgIGlmIChncmFuZENoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ2ltZycpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGcmFnbWVudCA9IGF3YWl0IGJ1aWxkSW1hZ2UoXG4gICAgICAgICAgICAgICAgZG9jeERvY3VtZW50SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgZ3JhbmRDaGlsZFZOb2RlLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5tYXhpbXVtV2lkdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGltYWdlRnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICB0YWJsZUNlbGxGcmFnbWVudC5pbXBvcnQoaW1hZ2VGcmFnbWVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNWTm9kZShjaGlsZFZOb2RlKSAmJiBbJ3VsJywgJ29sJ10uaW5jbHVkZXMoY2hpbGRWTm9kZS50YWdOYW1lKSkge1xuICAgICAgICAvLyByZW5kZXIgbGlzdCBpbiB0YWJsZVxuICAgICAgICBpZiAodk5vZGVIYXNDaGlsZHJlbihjaGlsZFZOb2RlKSkge1xuICAgICAgICAgIGF3YWl0IGJ1aWxkTGlzdChjaGlsZFZOb2RlLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSwgdGFibGVDZWxsRnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhGcmFnbWVudCA9IGF3YWl0IGJ1aWxkUGFyYWdyYXBoKFxuICAgICAgICAgIGNoaWxkVk5vZGUsXG4gICAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGFibGVDZWxsRnJhZ21lbnQuaW1wb3J0KHBhcmFncmFwaEZyYWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYnVpbGRpbmcgd2l0aCBidWlsZFBhcmFncmFwaCgpIGlzbid0IHdvcmtpbmdcbiAgICBjb25zdCBwYXJhZ3JhcGhGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAgIC5lbGUoJ0B3JywgJ3AnKVxuICAgICAgLnVwKCk7XG4gICAgdGFibGVDZWxsRnJhZ21lbnQuaW1wb3J0KHBhcmFncmFwaEZyYWdtZW50KTtcbiAgfVxuICB0YWJsZUNlbGxGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiB0YWJsZUNlbGxGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkUm93U3BhbkNlbGwgPSAocm93U3Bhbk1hcCwgY29sdW1uSW5kZXgsIGF0dHJpYnV0ZXMpID0+IHtcbiAgY29uc3Qgcm93U3BhbkNlbGxGcmFnbWVudHMgPSBbXTtcbiAgbGV0IHNwYW5PYmplY3QgPSByb3dTcGFuTWFwLmdldChjb2x1bW5JbmRleC5pbmRleCk7XG4gIHdoaWxlIChzcGFuT2JqZWN0ICYmIHNwYW5PYmplY3Qucm93U3Bhbikge1xuICAgIGNvbnN0IHJvd1NwYW5DZWxsRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAndGMnKTtcblxuICAgIGNvbnN0IHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkVGFibGVDZWxsUHJvcGVydGllcyh7XG4gICAgICAuLi5hdHRyaWJ1dGVzLFxuICAgICAgcm93U3BhbjogJ2NvbnRpbnVlJyxcbiAgICAgIGNvbFNwYW46IHNwYW5PYmplY3QuY29sU3BhbiA/IHNwYW5PYmplY3QuY29sU3BhbiA6IDAsXG4gICAgfSk7XG4gICAgcm93U3BhbkNlbGxGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50KTtcblxuICAgIGNvbnN0IHBhcmFncmFwaEZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgICAgLmVsZSgnQHcnLCAncCcpXG4gICAgICAudXAoKTtcbiAgICByb3dTcGFuQ2VsbEZyYWdtZW50LmltcG9ydChwYXJhZ3JhcGhGcmFnbWVudCk7XG4gICAgcm93U3BhbkNlbGxGcmFnbWVudC51cCgpO1xuXG4gICAgcm93U3BhbkNlbGxGcmFnbWVudHMucHVzaChyb3dTcGFuQ2VsbEZyYWdtZW50KTtcblxuICAgIGlmIChzcGFuT2JqZWN0LnJvd1NwYW4gLSAxID09PSAwKSB7XG4gICAgICByb3dTcGFuTWFwLmRlbGV0ZShjb2x1bW5JbmRleC5pbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd1NwYW5NYXAuc2V0KGNvbHVtbkluZGV4LmluZGV4LCB7XG4gICAgICAgIHJvd1NwYW46IHNwYW5PYmplY3Qucm93U3BhbiAtIDEsXG4gICAgICAgIGNvbFNwYW46IHNwYW5PYmplY3QuY29sU3BhbiB8fCAwLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbHVtbkluZGV4LmluZGV4ICs9IHNwYW5PYmplY3QuY29sU3BhbiB8fCAxO1xuICAgIHNwYW5PYmplY3QgPSByb3dTcGFuTWFwLmdldChjb2x1bW5JbmRleC5pbmRleCk7XG4gIH1cblxuICByZXR1cm4gcm93U3BhbkNlbGxGcmFnbWVudHM7XG59O1xuXG5jb25zdCBidWlsZFRhYmxlUm93UHJvcGVydGllcyA9IChhdHRyaWJ1dGVzKSA9PiB7XG4gIGNvbnN0IHRhYmxlUm93UHJvcGVydGllc0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXG4gICAgJ0B3JyxcbiAgICAndHJQcidcbiAgKTtcbiAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICd0YWJsZVJvd0hlaWdodCc6XG4gICAgICAgICAgY29uc3QgdGFibGVSb3dIZWlnaHRGcmFnbWVudCA9IGJ1aWxkVGFibGVSb3dIZWlnaHQoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVSb3dIZWlnaHRGcmFnbWVudCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMudGFibGVSb3dIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Jvd0NhbnRTcGxpdCc6XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMucm93Q2FudFNwbGl0KSB7XG4gICAgICAgICAgICBjb25zdCBjYW50U3BsaXRGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcbiAgICAgICAgICAgICAgLmVsZSgnQHcnLCAnY2FudFNwbGl0JylcbiAgICAgICAgICAgICAgLnVwKCk7XG4gICAgICAgICAgICB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQoY2FudFNwbGl0RnJhZ21lbnQpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy5yb3dDYW50U3BsaXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHRhYmxlUm93UHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XG4gIHJldHVybiB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkVGFibGVSb3cgPSBhc3luYyAodk5vZGUsIGF0dHJpYnV0ZXMsIHJvd1NwYW5NYXAsIGRvY3hEb2N1bWVudEluc3RhbmNlKSA9PiB7XG4gIGNvbnN0IHRhYmxlUm93RnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAndHInKTtcbiAgY29uc3QgbW9kaWZpZWRBdHRyaWJ1dGVzID0geyAuLi5hdHRyaWJ1dGVzIH07XG4gIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgLy8gRklYTUU6IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGdldCByb3cgaGVpZ2h0IGZyb20gY2VsbCBzdHlsZVxuICAgIGlmIChcbiAgICAgICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0KSB8fFxuICAgICAgKHZOb2RlLmNoaWxkcmVuWzBdICYmXG4gICAgICAgIGlzVk5vZGUodk5vZGUuY2hpbGRyZW5bMF0pICYmXG4gICAgICAgIHZOb2RlLmNoaWxkcmVuWzBdLnByb3BlcnRpZXMuc3R5bGUgJiZcbiAgICAgICAgdk5vZGUuY2hpbGRyZW5bMF0ucHJvcGVydGllcy5zdHlsZS5oZWlnaHQpXG4gICAgKSB7XG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMudGFibGVSb3dIZWlnaHQgPSBmaXh1cFJvd0hlaWdodChcbiAgICAgICAgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUgJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZS5oZWlnaHQpIHx8XG4gICAgICAgICAgKHZOb2RlLmNoaWxkcmVuWzBdICYmXG4gICAgICAgICAgaXNWTm9kZSh2Tm9kZS5jaGlsZHJlblswXSkgJiZcbiAgICAgICAgICB2Tm9kZS5jaGlsZHJlblswXS5wcm9wZXJ0aWVzLnN0eWxlICYmXG4gICAgICAgICAgdk5vZGUuY2hpbGRyZW5bMF0ucHJvcGVydGllcy5zdHlsZS5oZWlnaHRcbiAgICAgICAgICAgID8gdk5vZGUuY2hpbGRyZW5bMF0ucHJvcGVydGllcy5zdHlsZS5oZWlnaHRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUpIHtcbiAgICAgIGZpeHVwVGFibGVDZWxsQm9yZGVyKHZOb2RlLCBtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRhYmxlUm93UHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGRUYWJsZVJvd1Byb3BlcnRpZXMobW9kaWZpZWRBdHRyaWJ1dGVzKTtcbiAgdGFibGVSb3dGcmFnbWVudC5pbXBvcnQodGFibGVSb3dQcm9wZXJ0aWVzRnJhZ21lbnQpO1xuXG4gIGNvbnN0IGNvbHVtbkluZGV4ID0geyBpbmRleDogMCB9O1xuXG4gIGlmICh2Tm9kZUhhc0NoaWxkcmVuKHZOb2RlKSkge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHZOb2RlLmNoaWxkcmVuLmZpbHRlcigoY2hpbGRWTm9kZSkgPT5cbiAgICAgIFsndGQnLCAndGgnXS5pbmNsdWRlcyhjaGlsZFZOb2RlLnRhZ05hbWUpXG4gICAgKTtcbiAgICBjb25zdCBtYXhpbXVtQ29sdW1uV2lkdGggPSBkb2N4RG9jdW1lbnRJbnN0YW5jZS5hdmFpbGFibGVEb2N1bWVudFNwYWNlIC8gdGFibGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlQ29sdW1ucykge1xuICAgICAgY29uc3Qgcm93U3BhbkNlbGxGcmFnbWVudHMgPSBidWlsZFJvd1NwYW5DZWxsKHJvd1NwYW5NYXAsIGNvbHVtbkluZGV4LCBtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93U3BhbkNlbGxGcmFnbWVudHMpKSB7XG4gICAgICAgIGZvciAobGV0IGl0ZXJhdG9ySW5kZXggPSAwOyBpdGVyYXRvckluZGV4IDwgcm93U3BhbkNlbGxGcmFnbWVudHMubGVuZ3RoOyBpdGVyYXRvckluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCByb3dTcGFuQ2VsbEZyYWdtZW50ID0gcm93U3BhbkNlbGxGcmFnbWVudHNbaXRlcmF0b3JJbmRleF07XG5cbiAgICAgICAgICB0YWJsZVJvd0ZyYWdtZW50LmltcG9ydChyb3dTcGFuQ2VsbEZyYWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdGFibGVDZWxsRnJhZ21lbnQgPSBhd2FpdCBidWlsZFRhYmxlQ2VsbChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICB7IC4uLm1vZGlmaWVkQXR0cmlidXRlcywgbWF4aW11bVdpZHRoOiBtYXhpbXVtQ29sdW1uV2lkdGggfSxcbiAgICAgICAgcm93U3Bhbk1hcCxcbiAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXG4gICAgICApO1xuICAgICAgY29sdW1uSW5kZXguaW5kZXgrKztcblxuICAgICAgdGFibGVSb3dGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsRnJhZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb2x1bW5JbmRleC5pbmRleCA8IHJvd1NwYW5NYXAuc2l6ZSkge1xuICAgIGNvbnN0IHJvd1NwYW5DZWxsRnJhZ21lbnRzID0gYnVpbGRSb3dTcGFuQ2VsbChyb3dTcGFuTWFwLCBjb2x1bW5JbmRleCwgbW9kaWZpZWRBdHRyaWJ1dGVzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dTcGFuQ2VsbEZyYWdtZW50cykpIHtcbiAgICAgIGZvciAobGV0IGl0ZXJhdG9ySW5kZXggPSAwOyBpdGVyYXRvckluZGV4IDwgcm93U3BhbkNlbGxGcmFnbWVudHMubGVuZ3RoOyBpdGVyYXRvckluZGV4KyspIHtcbiAgICAgICAgY29uc3Qgcm93U3BhbkNlbGxGcmFnbWVudCA9IHJvd1NwYW5DZWxsRnJhZ21lbnRzW2l0ZXJhdG9ySW5kZXhdO1xuXG4gICAgICAgIHRhYmxlUm93RnJhZ21lbnQuaW1wb3J0KHJvd1NwYW5DZWxsRnJhZ21lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRhYmxlUm93RnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gdGFibGVSb3dGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkVGFibGVHcmlkQ29sID0gKGdyaWRXaWR0aCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ2dyaWRDb2wnKVxuICAgIC5hdHQoJ0B3JywgJ3cnLCBTdHJpbmcoZ3JpZFdpZHRoKSk7XG5cbmNvbnN0IGJ1aWxkVGFibGVHcmlkID0gKHZOb2RlLCBhdHRyaWJ1dGVzKSA9PiB7XG4gIGNvbnN0IHRhYmxlR3JpZEZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoJ0B3JywgJ3RibEdyaWQnKTtcbiAgaWYgKHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB2Tm9kZS5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkVk5vZGUpID0+IGNoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ2NvbCcpO1xuICAgIGNvbnN0IGdyaWRXaWR0aCA9IGF0dHJpYnV0ZXMubWF4aW11bVdpZHRoIC8gZ3JpZENvbHVtbnMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGdyaWRDb2x1bW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdGFibGVHcmlkQ29sRnJhZ21lbnQgPSBidWlsZFRhYmxlR3JpZENvbChncmlkV2lkdGgpO1xuICAgICAgdGFibGVHcmlkRnJhZ21lbnQuaW1wb3J0KHRhYmxlR3JpZENvbEZyYWdtZW50KTtcbiAgICB9XG4gIH1cbiAgdGFibGVHcmlkRnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gdGFibGVHcmlkRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZFRhYmxlR3JpZEZyb21UYWJsZVJvdyA9ICh2Tm9kZSwgYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICd0YmxHcmlkJyk7XG4gIGlmICh2Tm9kZUhhc0NoaWxkcmVuKHZOb2RlKSkge1xuICAgIGNvbnN0IG51bWJlck9mR3JpZENvbHVtbnMgPSB2Tm9kZS5jaGlsZHJlbi5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjaGlsZFZOb2RlKSA9PiB7XG4gICAgICBjb25zdCBjb2xTcGFuID1cbiAgICAgICAgY2hpbGRWTm9kZS5wcm9wZXJ0aWVzLmNvbFNwYW4gfHxcbiAgICAgICAgKGNoaWxkVk5vZGUucHJvcGVydGllcy5zdHlsZSAmJiBjaGlsZFZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2NvbHVtbi1zcGFuJ10pO1xuXG4gICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAoY29sU3BhbiA/IHBhcnNlSW50KGNvbFNwYW4pIDogMSk7XG4gICAgfSwgMCk7XG4gICAgY29uc3QgZ3JpZFdpZHRoID0gYXR0cmlidXRlcy5tYXhpbXVtV2lkdGggLyBudW1iZXJPZkdyaWRDb2x1bW5zO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mR3JpZENvbHVtbnM7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRhYmxlR3JpZENvbEZyYWdtZW50ID0gYnVpbGRUYWJsZUdyaWRDb2woZ3JpZFdpZHRoKTtcbiAgICAgIHRhYmxlR3JpZEZyYWdtZW50LmltcG9ydCh0YWJsZUdyaWRDb2xGcmFnbWVudCk7XG4gICAgfVxuICB9XG4gIHRhYmxlR3JpZEZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIHRhYmxlR3JpZEZyYWdtZW50O1xufTtcblxuY29uc3QgYnVpbGRUYWJsZUJvcmRlcnMgPSAodGFibGVCb3JkZXIpID0+IHtcbiAgY29uc3QgdGFibGVCb3JkZXJzRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZShcbiAgICAnQHcnLFxuICAgICd0YmxCb3JkZXJzJ1xuICApO1xuXG4gIGNvbnN0IHsgY29sb3IsIHN0cm9rZSwgLi4uYm9yZGVycyB9ID0gdGFibGVCb3JkZXI7XG5cbiAgT2JqZWN0LmtleXMoYm9yZGVycykuZm9yRWFjaCgoYm9yZGVyKSA9PiB7XG4gICAgaWYgKGJvcmRlcnNbYm9yZGVyXSkge1xuICAgICAgY29uc3QgYm9yZGVyRnJhZ21lbnQgPSBidWlsZEJvcmRlcihib3JkZXIsIGJvcmRlcnNbYm9yZGVyXSwgMCwgY29sb3IsIHN0cm9rZSk7XG4gICAgICB0YWJsZUJvcmRlcnNGcmFnbWVudC5pbXBvcnQoYm9yZGVyRnJhZ21lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgdGFibGVCb3JkZXJzRnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gdGFibGVCb3JkZXJzRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZFRhYmxlV2lkdGggPSAodGFibGVXaWR0aCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxuICAgIC5lbGUoJ0B3JywgJ3RibFcnKVxuICAgIC5hdHQoJ0B3JywgJ3R5cGUnLCAnZHhhJylcbiAgICAuYXR0KCdAdycsICd3JywgU3RyaW5nKHRhYmxlV2lkdGgpKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZENlbGxNYXJnaW4gPSAoc2lkZSwgbWFyZ2luKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXG4gICAgLmVsZSgnQHcnLCBzaWRlKVxuICAgIC5hdHQoJ0B3JywgJ3R5cGUnLCAnZHhhJylcbiAgICAuYXR0KCdAdycsICd3JywgU3RyaW5nKG1hcmdpbikpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkVGFibGVDZWxsTWFyZ2lucyA9IChtYXJnaW4pID0+IHtcbiAgY29uc3QgdGFibGVDZWxsTWFyRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZShcbiAgICAnQHcnLFxuICAgICd0YmxDZWxsTWFyJ1xuICApO1xuXG4gIFsndG9wJywgJ2JvdHRvbSddLmZvckVhY2goKHNpZGUpID0+IHtcbiAgICBjb25zdCBtYXJnaW5GcmFnbWVudCA9IGJ1aWxkQ2VsbE1hcmdpbihzaWRlLCBtYXJnaW4gLyAyKTtcbiAgICB0YWJsZUNlbGxNYXJGcmFnbWVudC5pbXBvcnQobWFyZ2luRnJhZ21lbnQpO1xuICB9KTtcbiAgWydsZWZ0JywgJ3JpZ2h0J10uZm9yRWFjaCgoc2lkZSkgPT4ge1xuICAgIGNvbnN0IG1hcmdpbkZyYWdtZW50ID0gYnVpbGRDZWxsTWFyZ2luKHNpZGUsIG1hcmdpbik7XG4gICAgdGFibGVDZWxsTWFyRnJhZ21lbnQuaW1wb3J0KG1hcmdpbkZyYWdtZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRhYmxlQ2VsbE1hckZyYWdtZW50O1xufTtcblxuY29uc3QgYnVpbGRUYWJsZVByb3BlcnRpZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCB0YWJsZVByb3BlcnRpZXNGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKFxuICAgICdAdycsXG4gICAgJ3RibFByJ1xuICApO1xuXG4gIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAndGFibGVCb3JkZXInOlxuICAgICAgICAgIGNvbnN0IHRhYmxlQm9yZGVyc0ZyYWdtZW50ID0gYnVpbGRUYWJsZUJvcmRlcnMoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVCb3JkZXJzRnJhZ21lbnQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnRhYmxlQm9yZGVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0YWJsZUNlbGxTcGFjaW5nJzpcbiAgICAgICAgICBjb25zdCB0YWJsZUNlbGxTcGFjaW5nRnJhZ21lbnQgPSBidWlsZFRhYmxlQ2VsbFNwYWNpbmcoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsU3BhY2luZ0ZyYWdtZW50KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy50YWJsZUNlbGxTcGFjaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3aWR0aCc6XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXNba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGVXaWR0aEZyYWdtZW50ID0gYnVpbGRUYWJsZVdpZHRoKGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgICAgICAgICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVXaWR0aEZyYWdtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgdGFibGVDZWxsTWFyZ2luRnJhZ21lbnQgPSBidWlsZFRhYmxlQ2VsbE1hcmdpbnMoMTYwKTtcbiAgdGFibGVQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHRhYmxlQ2VsbE1hcmdpbkZyYWdtZW50KTtcblxuICAvLyBieSBkZWZhdWx0LCBhbGwgdGFibGVzIGFyZSBjZW50ZXIgYWxpZ25lZC5cbiAgY29uc3QgYWxpZ25tZW50RnJhZ21lbnQgPSBidWlsZEhvcml6b250YWxBbGlnbm1lbnQoJ2NlbnRlcicpO1xuICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQoYWxpZ25tZW50RnJhZ21lbnQpO1xuXG4gIHRhYmxlUHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIHRhYmxlUHJvcGVydGllc0ZyYWdtZW50O1xufTtcblxuY29uc3QgY3NzQm9yZGVyUGFyc2VyID0gKGJvcmRlclN0cmluZykgPT4ge1xuICBsZXQgW3NpemUsIHN0cm9rZSwgY29sb3JdID0gYm9yZGVyU3RyaW5nLnNwbGl0KCcgJyk7XG5cbiAgaWYgKHBvaW50UmVnZXgudGVzdChzaXplKSkge1xuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IHNpemUubWF0Y2gocG9pbnRSZWdleCk7XG4gICAgLy8gY29udmVydCBwb2ludCB0byBlaWdodGggb2YgYSBwb2ludFxuICAgIHNpemUgPSBwb2ludFRvRUlQKG1hdGNoZWRQYXJ0c1sxXSk7XG4gIH0gZWxzZSBpZiAocGl4ZWxSZWdleC50ZXN0KHNpemUpKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gc2l6ZS5tYXRjaChwaXhlbFJlZ2V4KTtcbiAgICAvLyBjb252ZXJ0IHBpeGVscyB0byBlaWdodGggb2YgYSBwb2ludFxuICAgIHNpemUgPSBwaXhlbFRvRUlQKG1hdGNoZWRQYXJ0c1sxXSk7XG4gIH1cbiAgc3Ryb2tlID0gc3Ryb2tlICYmIFsnZGFzaGVkJywgJ2RvdHRlZCcsICdkb3VibGUnXS5pbmNsdWRlcyhzdHJva2UpID8gc3Ryb2tlIDogJ3NpbmdsZSc7XG5cbiAgY29sb3IgPSBjb2xvciAmJiBmaXh1cENvbG9yQ29kZShjb2xvcikudG9VcHBlckNhc2UoKTtcblxuICByZXR1cm4gW3NpemUsIHN0cm9rZSwgY29sb3JdO1xufTtcblxuY29uc3QgYnVpbGRUYWJsZSA9IGFzeW5jICh2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpID0+IHtcbiAgY29uc3QgdGFibGVGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICd0YmwnKTtcbiAgY29uc3QgbW9kaWZpZWRBdHRyaWJ1dGVzID0geyAuLi5hdHRyaWJ1dGVzIH07XG4gIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgdGFibGVBdHRyaWJ1dGVzID0gdk5vZGUucHJvcGVydGllcy5hdHRyaWJ1dGVzIHx8IHt9O1xuICAgIGNvbnN0IHRhYmxlU3R5bGVzID0gdk5vZGUucHJvcGVydGllcy5zdHlsZSB8fCB7fTtcbiAgICBjb25zdCB0YWJsZUJvcmRlcnMgPSB7fTtcbiAgICBjb25zdCB0YWJsZUNlbGxCb3JkZXJzID0ge307XG4gICAgbGV0IFtib3JkZXJTaXplLCBib3JkZXJTdHJpa2UsIGJvcmRlckNvbG9yXSA9IFsyLCAnc2luZ2xlJywgJzAwMDAwMCddO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIGlmICghaXNOYU4odGFibGVBdHRyaWJ1dGVzLmJvcmRlcikpIHtcbiAgICAgIGJvcmRlclNpemUgPSBwYXJzZUludCh0YWJsZUF0dHJpYnV0ZXMuYm9yZGVyLCAxMCk7XG4gICAgfVxuXG4gICAgLy8gY3NzIHN0eWxlIG92ZXJyaWRlcyB0YWJsZSBib3JkZXIgcHJvcGVydGllc1xuICAgIGlmICh0YWJsZVN0eWxlcy5ib3JkZXIpIHtcbiAgICAgIGNvbnN0IFtjc3NTaXplLCBjc3NTdHJva2UsIGNzc0NvbG9yXSA9IGNzc0JvcmRlclBhcnNlcih0YWJsZVN0eWxlcy5ib3JkZXIpO1xuICAgICAgYm9yZGVyU2l6ZSA9IGNzc1NpemUgfHwgYm9yZGVyU2l6ZTtcbiAgICAgIGJvcmRlckNvbG9yID0gY3NzQ29sb3IgfHwgYm9yZGVyQ29sb3I7XG4gICAgICBib3JkZXJTdHJpa2UgPSBjc3NTdHJva2UgfHwgYm9yZGVyU3RyaWtlO1xuICAgIH1cblxuICAgIHRhYmxlQm9yZGVycy50b3AgPSBib3JkZXJTaXplO1xuICAgIHRhYmxlQm9yZGVycy5ib3R0b20gPSBib3JkZXJTaXplO1xuICAgIHRhYmxlQm9yZGVycy5sZWZ0ID0gYm9yZGVyU2l6ZTtcbiAgICB0YWJsZUJvcmRlcnMucmlnaHQgPSBib3JkZXJTaXplO1xuICAgIHRhYmxlQm9yZGVycy5zdHJva2UgPSBib3JkZXJTdHJpa2U7XG4gICAgdGFibGVCb3JkZXJzLmNvbG9yID0gYm9yZGVyQ29sb3I7XG5cbiAgICBpZiAodGFibGVTdHlsZXNbJ2JvcmRlci1jb2xsYXBzZSddID09PSAnY29sbGFwc2UnKSB7XG4gICAgICB0YWJsZUJvcmRlcnMuaW5zaWRlViA9IGJvcmRlclNpemU7XG4gICAgICB0YWJsZUJvcmRlcnMuaW5zaWRlSCA9IGJvcmRlclNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlQm9yZGVycy5pbnNpZGVWID0gMDtcbiAgICAgIHRhYmxlQm9yZGVycy5pbnNpZGVIID0gMDtcbiAgICAgIHRhYmxlQ2VsbEJvcmRlcnMudG9wID0gMTtcbiAgICAgIHRhYmxlQ2VsbEJvcmRlcnMuYm90dG9tID0gMTtcbiAgICAgIHRhYmxlQ2VsbEJvcmRlcnMubGVmdCA9IDE7XG4gICAgICB0YWJsZUNlbGxCb3JkZXJzLnJpZ2h0ID0gMTtcbiAgICB9XG5cbiAgICBtb2RpZmllZEF0dHJpYnV0ZXMudGFibGVCb3JkZXIgPSB0YWJsZUJvcmRlcnM7XG4gICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnRhYmxlQ2VsbFNwYWNpbmcgPSAwO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKHRhYmxlQ2VsbEJvcmRlcnMpLmxlbmd0aCkge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHRhYmxlQ2VsbEJvcmRlcnM7XG4gICAgfVxuXG4gICAgbGV0IG1pbmltdW1XaWR0aDtcbiAgICBsZXQgbWF4aW11bVdpZHRoO1xuICAgIGxldCB3aWR0aDtcbiAgICAvLyBDYWxjdWxhdGUgbWluaW11bSB3aWR0aCBvZiB0YWJsZVxuICAgIGlmIChwaXhlbFJlZ2V4LnRlc3QodGFibGVTdHlsZXNbJ21pbi13aWR0aCddKSkge1xuICAgICAgbWluaW11bVdpZHRoID0gcGl4ZWxUb1RXSVAodGFibGVTdHlsZXNbJ21pbi13aWR0aCddLm1hdGNoKHBpeGVsUmVnZXgpWzFdKTtcbiAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2VSZWdleC50ZXN0KHRhYmxlU3R5bGVzWydtaW4td2lkdGgnXSkpIHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2VWYWx1ZSA9IHRhYmxlU3R5bGVzWydtaW4td2lkdGgnXS5tYXRjaChwZXJjZW50YWdlUmVnZXgpWzFdO1xuICAgICAgbWluaW11bVdpZHRoID0gTWF0aC5yb3VuZCgocGVyY2VudGFnZVZhbHVlIC8gMTAwKSAqIGF0dHJpYnV0ZXMubWF4aW11bVdpZHRoKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgbWF4aW11bSB3aWR0aCBvZiB0YWJsZVxuICAgIGlmIChwaXhlbFJlZ2V4LnRlc3QodGFibGVTdHlsZXNbJ21heC13aWR0aCddKSkge1xuICAgICAgcGl4ZWxSZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgbWF4aW11bVdpZHRoID0gcGl4ZWxUb1RXSVAodGFibGVTdHlsZXNbJ21heC13aWR0aCddLm1hdGNoKHBpeGVsUmVnZXgpWzFdKTtcbiAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2VSZWdleC50ZXN0KHRhYmxlU3R5bGVzWydtYXgtd2lkdGgnXSkpIHtcbiAgICAgIHBlcmNlbnRhZ2VSZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgY29uc3QgcGVyY2VudGFnZVZhbHVlID0gdGFibGVTdHlsZXNbJ21heC13aWR0aCddLm1hdGNoKHBlcmNlbnRhZ2VSZWdleClbMV07XG4gICAgICBtYXhpbXVtV2lkdGggPSBNYXRoLnJvdW5kKChwZXJjZW50YWdlVmFsdWUgLyAxMDApICogYXR0cmlidXRlcy5tYXhpbXVtV2lkdGgpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBzcGVjaWZpZWQgd2lkdGggb2YgdGFibGVcbiAgICBpZiAocGl4ZWxSZWdleC50ZXN0KHRhYmxlU3R5bGVzLndpZHRoKSkge1xuICAgICAgcGl4ZWxSZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgd2lkdGggPSBwaXhlbFRvVFdJUCh0YWJsZVN0eWxlcy53aWR0aC5tYXRjaChwaXhlbFJlZ2V4KVsxXSk7XG4gICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh0YWJsZVN0eWxlcy53aWR0aCkpIHtcbiAgICAgIHBlcmNlbnRhZ2VSZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgY29uc3QgcGVyY2VudGFnZVZhbHVlID0gdGFibGVTdHlsZXMud2lkdGgubWF0Y2gocGVyY2VudGFnZVJlZ2V4KVsxXTtcbiAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCgocGVyY2VudGFnZVZhbHVlIC8gMTAwKSAqIGF0dHJpYnV0ZXMubWF4aW11bVdpZHRoKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3aWR0aCBpc24ndCBzdXBwbGllZCwgd2Ugc2hvdWxkIGhhdmUgbWluLXdpZHRoIGFzIHRoZSB3aWR0aC5cbiAgICBpZiAod2lkdGgpIHtcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCA9IHdpZHRoO1xuICAgICAgaWYgKG1heGltdW1XaWR0aCkge1xuICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMud2lkdGggPSBNYXRoLm1pbihtb2RpZmllZEF0dHJpYnV0ZXMud2lkdGgsIG1heGltdW1XaWR0aCk7XG4gICAgICB9XG4gICAgICBpZiAobWluaW11bVdpZHRoKSB7XG4gICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCA9IE1hdGgubWF4KG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCwgbWluaW11bVdpZHRoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1pbmltdW1XaWR0aCkge1xuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLndpZHRoID0gbWluaW11bVdpZHRoO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZWRBdHRyaWJ1dGVzLndpZHRoKSB7XG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMud2lkdGggPSBNYXRoLm1pbihtb2RpZmllZEF0dHJpYnV0ZXMud2lkdGgsIGF0dHJpYnV0ZXMubWF4aW11bVdpZHRoKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGFibGVQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZFRhYmxlUHJvcGVydGllcyhtb2RpZmllZEF0dHJpYnV0ZXMpO1xuICB0YWJsZUZyYWdtZW50LmltcG9ydCh0YWJsZVByb3BlcnRpZXNGcmFnbWVudCk7XG5cbiAgY29uc3Qgcm93U3Bhbk1hcCA9IG5ldyBNYXAoKTtcblxuICBpZiAodk5vZGVIYXNDaGlsZHJlbih2Tm9kZSkpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdk5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjaGlsZFZOb2RlID0gdk5vZGUuY2hpbGRyZW5baW5kZXhdO1xuICAgICAgaWYgKGNoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ2NvbGdyb3VwJykge1xuICAgICAgICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGJ1aWxkVGFibGVHcmlkKGNoaWxkVk5vZGUsIG1vZGlmaWVkQXR0cmlidXRlcyk7XG4gICAgICAgIHRhYmxlRnJhZ21lbnQuaW1wb3J0KHRhYmxlR3JpZEZyYWdtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRWTm9kZS50YWdOYW1lID09PSAndGhlYWQnKSB7XG4gICAgICAgIGZvciAobGV0IGl0ZXJhdG9ySW5kZXggPSAwOyBpdGVyYXRvckluZGV4IDwgY2hpbGRWTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGl0ZXJhdG9ySW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGdyYW5kQ2hpbGRWTm9kZSA9IGNoaWxkVk5vZGUuY2hpbGRyZW5baXRlcmF0b3JJbmRleF07XG4gICAgICAgICAgaWYgKGdyYW5kQ2hpbGRWTm9kZS50YWdOYW1lID09PSAndHInKSB7XG4gICAgICAgICAgICBpZiAoaXRlcmF0b3JJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGJ1aWxkVGFibGVHcmlkRnJvbVRhYmxlUm93KFxuICAgICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVHcmlkRnJhZ21lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFibGVSb3dGcmFnbWVudCA9IGF3YWl0IGJ1aWxkVGFibGVSb3coXG4gICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcbiAgICAgICAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICByb3dTcGFuTWFwLFxuICAgICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQuaW1wb3J0KHRhYmxlUm93RnJhZ21lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaGlsZFZOb2RlLnRhZ05hbWUgPT09ICd0Ym9keScpIHtcbiAgICAgICAgZm9yIChsZXQgaXRlcmF0b3JJbmRleCA9IDA7IGl0ZXJhdG9ySW5kZXggPCBjaGlsZFZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaXRlcmF0b3JJbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgZ3JhbmRDaGlsZFZOb2RlID0gY2hpbGRWTm9kZS5jaGlsZHJlbltpdGVyYXRvckluZGV4XTtcbiAgICAgICAgICBpZiAoZ3JhbmRDaGlsZFZOb2RlLnRhZ05hbWUgPT09ICd0cicpIHtcbiAgICAgICAgICAgIGlmIChpdGVyYXRvckluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhYmxlR3JpZEZyYWdtZW50ID0gYnVpbGRUYWJsZUdyaWRGcm9tVGFibGVSb3coXG4gICAgICAgICAgICAgICAgZ3JhbmRDaGlsZFZOb2RlLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0YWJsZUZyYWdtZW50LmltcG9ydCh0YWJsZUdyaWRGcmFnbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YWJsZVJvd0ZyYWdtZW50ID0gYXdhaXQgYnVpbGRUYWJsZVJvdyhcbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZFZOb2RlLFxuICAgICAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIHJvd1NwYW5NYXAsXG4gICAgICAgICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVSb3dGcmFnbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ3RyJykge1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGJ1aWxkVGFibGVHcmlkRnJvbVRhYmxlUm93KGNoaWxkVk5vZGUsIG1vZGlmaWVkQXR0cmlidXRlcyk7XG4gICAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVHcmlkRnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlUm93RnJhZ21lbnQgPSBhd2FpdCBidWlsZFRhYmxlUm93KFxuICAgICAgICAgIGNoaWxkVk5vZGUsXG4gICAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgIHJvd1NwYW5NYXAsXG4gICAgICAgICAgZG9jeERvY3VtZW50SW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVSb3dGcmFnbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHRhYmxlRnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gdGFibGVGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkUHJlc2V0R2VvbWV0cnkgPSAoKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pXG4gICAgLmVsZSgnQGEnLCAncHJzdEdlb20nKVxuICAgIC5hdHQoJ3Byc3QnLCAncmVjdCcpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkRXh0ZW50cyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEgfSB9KVxuICAgIC5lbGUoJ0BhJywgJ2V4dCcpXG4gICAgLmF0dCgnY3gnLCB3aWR0aClcbiAgICAuYXR0KCdjeScsIGhlaWdodClcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRPZmZzZXQgPSAoKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pXG4gICAgLmVsZSgnQGEnLCAnb2ZmJylcbiAgICAuYXR0KCd4JywgJzAnKVxuICAgIC5hdHQoJ3knLCAnMCcpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkR3JhcGhpY0ZyYW1lVHJhbnNmb3JtID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgY29uc3QgZ3JhcGhpY0ZyYW1lVHJhbnNmb3JtRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pLmVsZShcbiAgICAnQGEnLFxuICAgICd4ZnJtJ1xuICApO1xuXG4gIGNvbnN0IG9mZnNldEZyYWdtZW50ID0gYnVpbGRPZmZzZXQoKTtcbiAgZ3JhcGhpY0ZyYW1lVHJhbnNmb3JtRnJhZ21lbnQuaW1wb3J0KG9mZnNldEZyYWdtZW50KTtcbiAgY29uc3QgZXh0ZW50c0ZyYWdtZW50ID0gYnVpbGRFeHRlbnRzKGF0dHJpYnV0ZXMpO1xuICBncmFwaGljRnJhbWVUcmFuc2Zvcm1GcmFnbWVudC5pbXBvcnQoZXh0ZW50c0ZyYWdtZW50KTtcblxuICBncmFwaGljRnJhbWVUcmFuc2Zvcm1GcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBncmFwaGljRnJhbWVUcmFuc2Zvcm1GcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkU2hhcGVQcm9wZXJ0aWVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgY29uc3Qgc2hhcGVQcm9wZXJ0aWVzID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBwaWM6IG5hbWVzcGFjZXMucGljIH0gfSkuZWxlKCdAcGljJywgJ3NwUHInKTtcblxuICBjb25zdCBncmFwaGljRnJhbWVUcmFuc2Zvcm1GcmFnbWVudCA9IGJ1aWxkR3JhcGhpY0ZyYW1lVHJhbnNmb3JtKGF0dHJpYnV0ZXMpO1xuICBzaGFwZVByb3BlcnRpZXMuaW1wb3J0KGdyYXBoaWNGcmFtZVRyYW5zZm9ybUZyYWdtZW50KTtcbiAgY29uc3QgcHJlc2V0R2VvbWV0cnlGcmFnbWVudCA9IGJ1aWxkUHJlc2V0R2VvbWV0cnkoKTtcbiAgc2hhcGVQcm9wZXJ0aWVzLmltcG9ydChwcmVzZXRHZW9tZXRyeUZyYWdtZW50KTtcblxuICBzaGFwZVByb3BlcnRpZXMudXAoKTtcblxuICByZXR1cm4gc2hhcGVQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgYnVpbGRGaWxsUmVjdCA9ICgpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgYTogbmFtZXNwYWNlcy5hIH0gfSlcbiAgICAuZWxlKCdAYScsICdmaWxsUmVjdCcpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkU3RyZXRjaCA9ICgpID0+IHtcbiAgY29uc3Qgc3RyZXRjaEZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEgfSB9KS5lbGUoJ0BhJywgJ3N0cmV0Y2gnKTtcblxuICBjb25zdCBmaWxsUmVjdEZyYWdtZW50ID0gYnVpbGRGaWxsUmVjdCgpO1xuICBzdHJldGNoRnJhZ21lbnQuaW1wb3J0KGZpbGxSZWN0RnJhZ21lbnQpO1xuXG4gIHN0cmV0Y2hGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBzdHJldGNoRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZFNyY1JlY3RGcmFnbWVudCA9ICgpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgYTogbmFtZXNwYWNlcy5hIH0gfSlcbiAgICAuZWxlKCdAYScsICdzcmNSZWN0JylcbiAgICAuYXR0KCdiJywgJzAnKVxuICAgIC5hdHQoJ2wnLCAnMCcpXG4gICAgLmF0dCgncicsICcwJylcbiAgICAuYXR0KCd0JywgJzAnKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZEJpbmFyeUxhcmdlSW1hZ2VPclBpY3R1cmUgPSAocmVsYXRpb25zaGlwSWQpID0+XG4gIGZyYWdtZW50KHtcbiAgICBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEsIHI6IG5hbWVzcGFjZXMuciB9LFxuICB9KVxuICAgIC5lbGUoJ0BhJywgJ2JsaXAnKVxuICAgIC5hdHQoJ0ByJywgJ2VtYmVkJywgYHJJZCR7cmVsYXRpb25zaGlwSWR9YClcbiAgICAvLyBGSVhNRTogcG9zc2libGUgdmFsdWVzICdlbWFpbCcsICdub25lJywgJ3ByaW50JywgJ2hxcHJpbnQnLCAnc2NyZWVuJ1xuICAgIC5hdHQoJ2NzdGF0ZScsICdwcmludCcpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkQmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGwgPSAocmVsYXRpb25zaGlwSWQpID0+IHtcbiAgY29uc3QgYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGxGcmFnbWVudCA9IGZyYWdtZW50KHtcbiAgICBuYW1lc3BhY2VBbGlhczogeyBwaWM6IG5hbWVzcGFjZXMucGljIH0sXG4gIH0pLmVsZSgnQHBpYycsICdibGlwRmlsbCcpO1xuICBjb25zdCBiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRnJhZ21lbnQgPSBidWlsZEJpbmFyeUxhcmdlSW1hZ2VPclBpY3R1cmUocmVsYXRpb25zaGlwSWQpO1xuICBiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRmlsbEZyYWdtZW50LmltcG9ydChiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRnJhZ21lbnQpO1xuICBjb25zdCBzcmNSZWN0RnJhZ21lbnQgPSBidWlsZFNyY1JlY3RGcmFnbWVudCgpO1xuICBiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRmlsbEZyYWdtZW50LmltcG9ydChzcmNSZWN0RnJhZ21lbnQpO1xuICBjb25zdCBzdHJldGNoRnJhZ21lbnQgPSBidWlsZFN0cmV0Y2goKTtcbiAgYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGxGcmFnbWVudC5pbXBvcnQoc3RyZXRjaEZyYWdtZW50KTtcblxuICBiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRmlsbEZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIGJpbmFyeUxhcmdlSW1hZ2VPclBpY3R1cmVGaWxsRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZE5vblZpc3VhbFBpY3R1cmVEcmF3aW5nUHJvcGVydGllcyA9ICgpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgcGljOiBuYW1lc3BhY2VzLnBpYyB9IH0pXG4gICAgLmVsZSgnQHBpYycsICdjTnZQaWNQcicpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkTm9uVmlzdWFsRHJhd2luZ1Byb3BlcnRpZXMgPSAoXG4gIHBpY3R1cmVJZCxcbiAgcGljdHVyZU5hbWVXaXRoRXh0ZW5zaW9uLFxuICBwaWN0dXJlRGVzY3JpcHRpb24gPSAnJ1xuKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHBpYzogbmFtZXNwYWNlcy5waWMgfSB9KVxuICAgIC5lbGUoJ0BwaWMnLCAnY052UHInKVxuICAgIC5hdHQoJ2lkJywgcGljdHVyZUlkKVxuICAgIC5hdHQoJ25hbWUnLCBwaWN0dXJlTmFtZVdpdGhFeHRlbnNpb24pXG4gICAgLmF0dCgnZGVzY3InLCBwaWN0dXJlRGVzY3JpcHRpb24pXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkTm9uVmlzdWFsUGljdHVyZVByb3BlcnRpZXMgPSAoXG4gIHBpY3R1cmVJZCxcbiAgcGljdHVyZU5hbWVXaXRoRXh0ZW5zaW9uLFxuICBwaWN0dXJlRGVzY3JpcHRpb25cbikgPT4ge1xuICBjb25zdCBub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50ID0gZnJhZ21lbnQoe1xuICAgIG5hbWVzcGFjZUFsaWFzOiB7IHBpYzogbmFtZXNwYWNlcy5waWMgfSxcbiAgfSkuZWxlKCdAcGljJywgJ252UGljUHInKTtcbiAgLy8gVE9ETzogSGFuZGxlIHBpY3R1cmUgYXR0cmlidXRlc1xuICBjb25zdCBub25WaXN1YWxEcmF3aW5nUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGROb25WaXN1YWxEcmF3aW5nUHJvcGVydGllcyhcbiAgICBwaWN0dXJlSWQsXG4gICAgcGljdHVyZU5hbWVXaXRoRXh0ZW5zaW9uLFxuICAgIHBpY3R1cmVEZXNjcmlwdGlvblxuICApO1xuICBub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChub25WaXN1YWxEcmF3aW5nUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgY29uc3Qgbm9uVmlzdWFsUGljdHVyZURyYXdpbmdQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZE5vblZpc3VhbFBpY3R1cmVEcmF3aW5nUHJvcGVydGllcygpO1xuICBub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChub25WaXN1YWxQaWN0dXJlRHJhd2luZ1Byb3BlcnRpZXNGcmFnbWVudCk7XG4gIG5vblZpc3VhbFBpY3R1cmVQcm9wZXJ0aWVzRnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gbm9uVmlzdWFsUGljdHVyZVByb3BlcnRpZXNGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkUGljdHVyZSA9ICh7XG4gIGlkLFxuICBmaWxlTmFtZVdpdGhFeHRlbnNpb24sXG4gIGRlc2NyaXB0aW9uLFxuICByZWxhdGlvbnNoaXBJZCxcbiAgd2lkdGgsXG4gIGhlaWdodCxcbn0pID0+IHtcbiAgY29uc3QgcGljdHVyZUZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBwaWM6IG5hbWVzcGFjZXMucGljIH0gfSkuZWxlKCdAcGljJywgJ3BpYycpO1xuICBjb25zdCBub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGROb25WaXN1YWxQaWN0dXJlUHJvcGVydGllcyhcbiAgICBpZCxcbiAgICBmaWxlTmFtZVdpdGhFeHRlbnNpb24sXG4gICAgZGVzY3JpcHRpb25cbiAgKTtcbiAgcGljdHVyZUZyYWdtZW50LmltcG9ydChub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgY29uc3QgYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGwgPSBidWlsZEJpbmFyeUxhcmdlSW1hZ2VPclBpY3R1cmVGaWxsKHJlbGF0aW9uc2hpcElkKTtcbiAgcGljdHVyZUZyYWdtZW50LmltcG9ydChiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRmlsbCk7XG4gIGNvbnN0IHNoYXBlUHJvcGVydGllcyA9IGJ1aWxkU2hhcGVQcm9wZXJ0aWVzKHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgcGljdHVyZUZyYWdtZW50LmltcG9ydChzaGFwZVByb3BlcnRpZXMpO1xuICBwaWN0dXJlRnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gcGljdHVyZUZyYWdtZW50O1xufTtcblxuY29uc3QgYnVpbGRHcmFwaGljRGF0YSA9IChncmFwaGljVHlwZSwgYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBncmFwaGljRGF0YUZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEgfSB9KVxuICAgIC5lbGUoJ0BhJywgJ2dyYXBoaWNEYXRhJylcbiAgICAuYXR0KCd1cmknLCAnaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3BpY3R1cmUnKTtcbiAgaWYgKGdyYXBoaWNUeXBlID09PSAncGljdHVyZScpIHtcbiAgICBjb25zdCBwaWN0dXJlRnJhZ21lbnQgPSBidWlsZFBpY3R1cmUoYXR0cmlidXRlcyk7XG4gICAgZ3JhcGhpY0RhdGFGcmFnbWVudC5pbXBvcnQocGljdHVyZUZyYWdtZW50KTtcbiAgfVxuICBncmFwaGljRGF0YUZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIGdyYXBoaWNEYXRhRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZEdyYXBoaWMgPSAoZ3JhcGhpY1R5cGUsIGF0dHJpYnV0ZXMpID0+IHtcbiAgY29uc3QgZ3JhcGhpY0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEgfSB9KS5lbGUoJ0BhJywgJ2dyYXBoaWMnKTtcbiAgLy8gVE9ETzogSGFuZGxlIGRyYXdpbmcgdHlwZVxuICBjb25zdCBncmFwaGljRGF0YUZyYWdtZW50ID0gYnVpbGRHcmFwaGljRGF0YShncmFwaGljVHlwZSwgYXR0cmlidXRlcyk7XG4gIGdyYXBoaWNGcmFnbWVudC5pbXBvcnQoZ3JhcGhpY0RhdGFGcmFnbWVudCk7XG4gIGdyYXBoaWNGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBncmFwaGljRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZERyYXdpbmdPYmplY3ROb25WaXN1YWxQcm9wZXJ0aWVzID0gKHBpY3R1cmVJZCwgcGljdHVyZU5hbWUpID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgd3A6IG5hbWVzcGFjZXMud3AgfSB9KVxuICAgIC5lbGUoJ0B3cCcsICdkb2NQcicpXG4gICAgLmF0dCgnaWQnLCBwaWN0dXJlSWQpXG4gICAgLmF0dCgnbmFtZScsIHBpY3R1cmVOYW1lKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZFdyYXBTcXVhcmUgPSAoKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHdwOiBuYW1lc3BhY2VzLndwIH0gfSlcbiAgICAuZWxlKCdAd3AnLCAnd3JhcFNxdWFyZScpXG4gICAgLmF0dCgnd3JhcFRleHQnLCAnYm90aFNpZGVzJylcbiAgICAuYXR0KCdkaXN0QicsICcyMjg2MDAnKVxuICAgIC5hdHQoJ2Rpc3RUJywgJzIyODYwMCcpXG4gICAgLmF0dCgnZGlzdEwnLCAnMjI4NjAwJylcbiAgICAuYXR0KCdkaXN0UicsICcyMjg2MDAnKVxuICAgIC51cCgpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbnN0IGJ1aWxkV3JhcE5vbmUgPSAoKSA9PlxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHdwOiBuYW1lc3BhY2VzLndwIH0gfSlcbiAgICAuZWxlKCdAd3AnLCAnd3JhcE5vbmUnKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZEVmZmVjdEV4dGVudEZyYWdtZW50ID0gKCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXG4gICAgLmVsZSgnQHdwJywgJ2VmZmVjdEV4dGVudCcpXG4gICAgLmF0dCgnYicsICcwJylcbiAgICAuYXR0KCdsJywgJzAnKVxuICAgIC5hdHQoJ3InLCAnMCcpXG4gICAgLmF0dCgndCcsICcwJylcbiAgICAudXAoKTtcblxuY29uc3QgYnVpbGRFeHRlbnQgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+XG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgd3A6IG5hbWVzcGFjZXMud3AgfSB9KVxuICAgIC5lbGUoJ0B3cCcsICdleHRlbnQnKVxuICAgIC5hdHQoJ2N4Jywgd2lkdGgpXG4gICAgLmF0dCgnY3knLCBoZWlnaHQpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkUG9zaXRpb25WID0gKCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXG4gICAgLmVsZSgnQHdwJywgJ3Bvc2l0aW9uVicpXG4gICAgLmF0dCgncmVsYXRpdmVGcm9tJywgJ3BhcmFncmFwaCcpXG4gICAgLmVsZSgnQHdwJywgJ3Bvc09mZnNldCcpXG4gICAgLnR4dCgnMTkwNTAnKVxuICAgIC51cCgpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkUG9zaXRpb25IID0gKCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXG4gICAgLmVsZSgnQHdwJywgJ3Bvc2l0aW9uSCcpXG4gICAgLmF0dCgncmVsYXRpdmVGcm9tJywgJ2NvbHVtbicpXG4gICAgLmVsZSgnQHdwJywgJ3Bvc09mZnNldCcpXG4gICAgLnR4dCgnMTkwNTAnKVxuICAgIC51cCgpXG4gICAgLnVwKCk7XG5cbmNvbnN0IGJ1aWxkU2ltcGxlUG9zID0gKCkgPT5cbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXG4gICAgLmVsZSgnQHdwJywgJ3NpbXBsZVBvcycpXG4gICAgLmF0dCgneCcsICcwJylcbiAgICAuYXR0KCd5JywgJzAnKVxuICAgIC51cCgpO1xuXG5jb25zdCBidWlsZEFuY2hvcmVkRHJhd2luZyA9IChncmFwaGljVHlwZSwgYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBhbmNob3JlZERyYXdpbmdGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgd3A6IG5hbWVzcGFjZXMud3AgfSB9KVxuICAgIC5lbGUoJ0B3cCcsICdhbmNob3InKVxuICAgIC5hdHQoJ2Rpc3RCJywgJzAnKVxuICAgIC5hdHQoJ2Rpc3RMJywgJzAnKVxuICAgIC5hdHQoJ2Rpc3RSJywgJzAnKVxuICAgIC5hdHQoJ2Rpc3RUJywgJzAnKVxuICAgIC5hdHQoJ3JlbGF0aXZlSGVpZ2h0JywgJzAnKVxuICAgIC5hdHQoJ2JlaGluZERvYycsICdmYWxzZScpXG4gICAgLmF0dCgnbG9ja2VkJywgJ3RydWUnKVxuICAgIC5hdHQoJ2xheW91dEluQ2VsbCcsICd0cnVlJylcbiAgICAuYXR0KCdhbGxvd092ZXJsYXAnLCAnZmFsc2UnKVxuICAgIC5hdHQoJ3NpbXBsZVBvcycsICdmYWxzZScpO1xuICAvLyBFdmVuIHRob3VnaCBzaW1wbGVQb3MgaXNudCBzdXBwb3J0ZWQgYnkgV29yZCAyMDA3IHNpbXBsZVBvcyBpcyByZXF1aXJlZC5cbiAgY29uc3Qgc2ltcGxlUG9zRnJhZ21lbnQgPSBidWlsZFNpbXBsZVBvcygpO1xuICBhbmNob3JlZERyYXdpbmdGcmFnbWVudC5pbXBvcnQoc2ltcGxlUG9zRnJhZ21lbnQpO1xuICBjb25zdCBwb3NpdGlvbkhGcmFnbWVudCA9IGJ1aWxkUG9zaXRpb25IKCk7XG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydChwb3NpdGlvbkhGcmFnbWVudCk7XG4gIGNvbnN0IHBvc2l0aW9uVkZyYWdtZW50ID0gYnVpbGRQb3NpdGlvblYoKTtcbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQuaW1wb3J0KHBvc2l0aW9uVkZyYWdtZW50KTtcbiAgY29uc3QgZXh0ZW50RnJhZ21lbnQgPSBidWlsZEV4dGVudCh7IHdpZHRoOiBhdHRyaWJ1dGVzLndpZHRoLCBoZWlnaHQ6IGF0dHJpYnV0ZXMuaGVpZ2h0IH0pO1xuICBhbmNob3JlZERyYXdpbmdGcmFnbWVudC5pbXBvcnQoZXh0ZW50RnJhZ21lbnQpO1xuICBjb25zdCBlZmZlY3RFeHRlbnRGcmFnbWVudCA9IGJ1aWxkRWZmZWN0RXh0ZW50RnJhZ21lbnQoKTtcbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGVmZmVjdEV4dGVudEZyYWdtZW50KTtcbiAgY29uc3Qgd3JhcFNxdWFyZUZyYWdtZW50ID0gYnVpbGRXcmFwU3F1YXJlKCk7XG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydCh3cmFwU3F1YXJlRnJhZ21lbnQpO1xuICBjb25zdCBkcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGREcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllcyhcbiAgICBhdHRyaWJ1dGVzLmlkLFxuICAgIGF0dHJpYnV0ZXMuZmlsZU5hbWVXaXRoRXh0ZW5zaW9uXG4gICk7XG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydChkcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllc0ZyYWdtZW50KTtcbiAgY29uc3QgZ3JhcGhpY0ZyYWdtZW50ID0gYnVpbGRHcmFwaGljKGdyYXBoaWNUeXBlLCBhdHRyaWJ1dGVzKTtcbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGdyYXBoaWNGcmFnbWVudCk7XG5cbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQudXAoKTtcblxuICByZXR1cm4gYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQ7XG59O1xuXG5jb25zdCBidWlsZElubGluZURyYXdpbmcgPSAoZ3JhcGhpY1R5cGUsIGF0dHJpYnV0ZXMpID0+IHtcbiAgY29uc3QgaW5saW5lRHJhd2luZ0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXG4gICAgLmVsZSgnQHdwJywgJ2lubGluZScpXG4gICAgLmF0dCgnZGlzdEInLCAnMCcpXG4gICAgLmF0dCgnZGlzdEwnLCAnMCcpXG4gICAgLmF0dCgnZGlzdFInLCAnMCcpXG4gICAgLmF0dCgnZGlzdFQnLCAnMCcpO1xuXG4gIGNvbnN0IGV4dGVudEZyYWdtZW50ID0gYnVpbGRFeHRlbnQoeyB3aWR0aDogYXR0cmlidXRlcy53aWR0aCwgaGVpZ2h0OiBhdHRyaWJ1dGVzLmhlaWdodCB9KTtcbiAgaW5saW5lRHJhd2luZ0ZyYWdtZW50LmltcG9ydChleHRlbnRGcmFnbWVudCk7XG4gIGNvbnN0IGVmZmVjdEV4dGVudEZyYWdtZW50ID0gYnVpbGRFZmZlY3RFeHRlbnRGcmFnbWVudCgpO1xuICBpbmxpbmVEcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGVmZmVjdEV4dGVudEZyYWdtZW50KTtcbiAgY29uc3QgZHJhd2luZ09iamVjdE5vblZpc3VhbFByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkRHJhd2luZ09iamVjdE5vblZpc3VhbFByb3BlcnRpZXMoXG4gICAgYXR0cmlidXRlcy5pZCxcbiAgICBhdHRyaWJ1dGVzLmZpbGVOYW1lV2l0aEV4dGVuc2lvblxuICApO1xuICBpbmxpbmVEcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGRyYXdpbmdPYmplY3ROb25WaXN1YWxQcm9wZXJ0aWVzRnJhZ21lbnQpO1xuICBjb25zdCBncmFwaGljRnJhZ21lbnQgPSBidWlsZEdyYXBoaWMoZ3JhcGhpY1R5cGUsIGF0dHJpYnV0ZXMpO1xuICBpbmxpbmVEcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGdyYXBoaWNGcmFnbWVudCk7XG5cbiAgaW5saW5lRHJhd2luZ0ZyYWdtZW50LnVwKCk7XG5cbiAgcmV0dXJuIGlubGluZURyYXdpbmdGcmFnbWVudDtcbn07XG5cbmNvbnN0IGJ1aWxkRHJhd2luZyA9IChpbmxpbmVPckFuY2hvcmVkID0gZmFsc2UsIGdyYXBoaWNUeXBlLCBhdHRyaWJ1dGVzKSA9PiB7XG4gIGNvbnN0IGRyYXdpbmdGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICdkcmF3aW5nJyk7XG4gIGNvbnN0IGlubGluZU9yQW5jaG9yZWREcmF3aW5nRnJhZ21lbnQgPSBpbmxpbmVPckFuY2hvcmVkXG4gICAgPyBidWlsZElubGluZURyYXdpbmcoZ3JhcGhpY1R5cGUsIGF0dHJpYnV0ZXMpXG4gICAgOiBidWlsZEFuY2hvcmVkRHJhd2luZyhncmFwaGljVHlwZSwgYXR0cmlidXRlcyk7XG4gIGRyYXdpbmdGcmFnbWVudC5pbXBvcnQoaW5saW5lT3JBbmNob3JlZERyYXdpbmdGcmFnbWVudCk7XG4gIGRyYXdpbmdGcmFnbWVudC51cCgpO1xuXG4gIHJldHVybiBkcmF3aW5nRnJhZ21lbnQ7XG59O1xuXG5leHBvcnQge1xuICBidWlsZFBhcmFncmFwaCxcbiAgYnVpbGRUYWJsZSxcbiAgYnVpbGROdW1iZXJpbmdJbnN0YW5jZXMsXG4gIGJ1aWxkTGluZUJyZWFrLFxuICBidWlsZEluZGVudGF0aW9uLFxuICBidWlsZFRleHRFbGVtZW50LFxuICBidWlsZEJvbGQsXG4gIGJ1aWxkSXRhbGljcyxcbiAgYnVpbGRVbmRlcmxpbmUsXG4gIGJ1aWxkRHJhd2luZyxcbiAgZml4dXBMaW5lSGVpZ2h0LFxufTtcbiJdfQ==
|
|
1678
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3NoYXJlZC93b3JkL2hlbHBlcnMveG1sLWJ1aWxkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFxQztBQUNyQywwQkFBMEI7QUFDMUIsc0NBQXNDO0FBQ3RDLHlDQUF5QztBQUN6QyxnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxPQUFPLE1BQU0sNEJBQTRCLENBQUM7QUFDakQsT0FBTyxPQUFPLE1BQU0sNEJBQTRCLENBQUM7QUFDakQsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxzQ0FBc0M7QUFDdEMsMkNBQTJDO0FBQzND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QWUsQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixPQUFPLEVBQ0wsY0FBYyxFQUNkLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxFQUNaLGVBQWUsR0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cclxuLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tZWxzZS1yZXR1cm4gKi9cclxuaW1wb3J0IHsgZnJhZ21lbnQgfSBmcm9tICd4bWxidWlsZGVyMic7XHJcbmltcG9ydCBpc1ZOb2RlIGZyb20gJ3ZpcnR1YWwtZG9tL3Zub2RlL2lzLXZub2RlJztcclxuaW1wb3J0IGlzVlRleHQgZnJvbSAndmlydHVhbC1kb20vdm5vZGUvaXMtdnRleHQnO1xyXG5pbXBvcnQgY29sb3JOYW1lcyBmcm9tICdjb2xvci1uYW1lJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IGltYWdlVG9CYXNlNjQgZnJvbSAnaW1hZ2UtdG8tYmFzZTY0JztcclxuaW1wb3J0IG1pbWVUeXBlcyBmcm9tICdtaW1lLXR5cGVzJztcclxuaW1wb3J0IHNpemVPZiBmcm9tICdpbWFnZS1zaXplJztcclxuXHJcbmltcG9ydCBuYW1lc3BhY2VzIGZyb20gJy4uL25hbWVzcGFjZXMnO1xyXG5pbXBvcnQge1xyXG4gIHJnYlRvSGV4LFxyXG4gIGhzbFRvSGV4LFxyXG4gIGhzbFJlZ2V4LFxyXG4gIHJnYlJlZ2V4LFxyXG4gIGhleFJlZ2V4LFxyXG4gIGhleDNSZWdleCxcclxuICBoZXgzVG9IZXgsXHJcbn0gZnJvbSAnLi4vdXRpbHMvY29sb3ItY29udmVyc2lvbic7XHJcbmltcG9ydCB7XHJcbiAgcGl4ZWxUb0VNVSxcclxuICBwaXhlbFJlZ2V4LFxyXG4gIFRXSVBUb0VNVSxcclxuICBwZXJjZW50YWdlUmVnZXgsXHJcbiAgcG9pbnRSZWdleCxcclxuICBwb2ludFRvSElQLFxyXG4gIEhJUFRvVFdJUCxcclxuICBwb2ludFRvVFdJUCxcclxuICBwaXhlbFRvSElQLFxyXG4gIHBpeGVsVG9UV0lQLFxyXG4gIHBpeGVsVG9FSVAsXHJcbiAgcG9pbnRUb0VJUCxcclxuICBjbVRvVFdJUCxcclxuICBjbVJlZ2V4LFxyXG4gIGluY2hSZWdleCxcclxuICBpbmNoVG9UV0lQLFxyXG59IGZyb20gJy4uL3V0aWxzL3VuaXQtY29udmVyc2lvbic7XHJcbi8vIEZJWE1FOiByZW1vdmUgdGhlIGN5Y2xpYyBkZXBlbmRlbmN5XHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcclxuaW1wb3J0IHsgYnVpbGRJbWFnZSwgYnVpbGRMaXN0IH0gZnJvbSAnLi9yZW5kZXItZG9jdW1lbnQtZmlsZSc7XHJcbmltcG9ydCB7XHJcbiAgZGVmYXVsdEZvbnQsXHJcbiAgaHlwZXJsaW5rVHlwZSxcclxuICBwYXJhZ3JhcGhCb3JkZXJzT2JqZWN0LFxyXG4gIGNvbG9ybGVzc0NvbG9ycyxcclxuICB2ZXJ0aWNhbEFsaWduVmFsdWVzLFxyXG4gIGltYWdlVHlwZSxcclxuICBpbnRlcm5hbFJlbGF0aW9uc2hpcCxcclxufSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyB2Tm9kZUhhc0NoaWxkcmVuIH0gZnJvbSAnLi4vdXRpbHMvdm5vZGUnO1xyXG5pbXBvcnQgeyBpc1ZhbGlkVXJsIH0gZnJvbSAnLi4vdXRpbHMvdXJsJztcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxyXG5jb25zdCBmaXh1cENvbG9yQ29kZSA9IChjb2xvckNvZGVTdHJpbmcpID0+IHtcclxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbG9yTmFtZXMsIGNvbG9yQ29kZVN0cmluZy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgY29uc3QgW3JlZCwgZ3JlZW4sIGJsdWVdID0gY29sb3JOYW1lc1tjb2xvckNvZGVTdHJpbmcudG9Mb3dlckNhc2UoKV07XHJcblxyXG4gICAgcmV0dXJuIHJnYlRvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpO1xyXG4gIH0gZWxzZSBpZiAocmdiUmVnZXgudGVzdChjb2xvckNvZGVTdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBjb2xvckNvZGVTdHJpbmcubWF0Y2gocmdiUmVnZXgpO1xyXG4gICAgY29uc3QgcmVkID0gbWF0Y2hlZFBhcnRzWzFdO1xyXG4gICAgY29uc3QgZ3JlZW4gPSBtYXRjaGVkUGFydHNbMl07XHJcbiAgICBjb25zdCBibHVlID0gbWF0Y2hlZFBhcnRzWzNdO1xyXG5cclxuICAgIHJldHVybiByZ2JUb0hleChyZWQsIGdyZWVuLCBibHVlKTtcclxuICB9IGVsc2UgaWYgKGhzbFJlZ2V4LnRlc3QoY29sb3JDb2RlU3RyaW5nKSkge1xyXG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gY29sb3JDb2RlU3RyaW5nLm1hdGNoKGhzbFJlZ2V4KTtcclxuICAgIGNvbnN0IGh1ZSA9IG1hdGNoZWRQYXJ0c1sxXTtcclxuICAgIGNvbnN0IHNhdHVyYXRpb24gPSBtYXRjaGVkUGFydHNbMl07XHJcbiAgICBjb25zdCBsdW1pbm9zaXR5ID0gbWF0Y2hlZFBhcnRzWzNdO1xyXG5cclxuICAgIHJldHVybiBoc2xUb0hleChodWUsIHNhdHVyYXRpb24sIGx1bWlub3NpdHkpO1xyXG4gIH0gZWxzZSBpZiAoaGV4UmVnZXgudGVzdChjb2xvckNvZGVTdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBjb2xvckNvZGVTdHJpbmcubWF0Y2goaGV4UmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBtYXRjaGVkUGFydHNbMV07XHJcbiAgfSBlbHNlIGlmIChoZXgzUmVnZXgudGVzdChjb2xvckNvZGVTdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBjb2xvckNvZGVTdHJpbmcubWF0Y2goaGV4M1JlZ2V4KTtcclxuICAgIGNvbnN0IHJlZCA9IG1hdGNoZWRQYXJ0c1sxXTtcclxuICAgIGNvbnN0IGdyZWVuID0gbWF0Y2hlZFBhcnRzWzJdO1xyXG4gICAgY29uc3QgYmx1ZSA9IG1hdGNoZWRQYXJ0c1szXTtcclxuXHJcbiAgICByZXR1cm4gaGV4M1RvSGV4KHJlZCwgZ3JlZW4sIGJsdWUpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gJzAwMDAwMCc7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYnVpbGRSdW5Gb250RnJhZ21lbnQgPSAoZm9udE5hbWUgPSBkZWZhdWx0Rm9udCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICdyRm9udHMnKVxyXG4gICAgLmF0dCgnQHcnLCAnYXNjaWknLCBmb250TmFtZSlcclxuICAgIC5hdHQoJ0B3JywgJ2hBbnNpJywgZm9udE5hbWUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkUnVuU3R5bGVGcmFnbWVudCA9ICh0eXBlID0gJ0h5cGVybGluaycpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnclN0eWxlJylcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIHR5cGUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkVGFibGVSb3dIZWlnaHQgPSAodGFibGVSb3dIZWlnaHQpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAndHJIZWlnaHQnKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgdGFibGVSb3dIZWlnaHQpXHJcbiAgICAuYXR0KCdAdycsICdoUnVsZScsICdhdExlYXN0JylcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRWZXJ0aWNhbEFsaWdubWVudCA9ICh2ZXJ0aWNhbEFsaWdubWVudCkgPT4ge1xyXG4gIGlmICh2ZXJ0aWNhbEFsaWdubWVudC50b0xvd2VyQ2FzZSgpID09PSAnbWlkZGxlJykge1xyXG4gICAgdmVydGljYWxBbGlnbm1lbnQgPSAnY2VudGVyJztcclxuICB9XHJcblxyXG4gIHJldHVybiBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICd2QWxpZ24nKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgdmVydGljYWxBbGlnbm1lbnQpXHJcbiAgICAudXAoKTtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkVmVydGljYWxNZXJnZSA9ICh2ZXJ0aWNhbE1lcmdlID0gJ2NvbnRpbnVlJykgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICd2TWVyZ2UnKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgdmVydGljYWxNZXJnZSlcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRDb2xvciA9IChjb2xvckNvZGUpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnY29sb3InKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgY29sb3JDb2RlKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZEZvbnRTaXplID0gKGZvbnRTaXplKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgJ3N6JylcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIGZvbnRTaXplKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZFNoYWRpbmcgPSAoY29sb3JDb2RlKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgJ3NoZCcpXHJcbiAgICAuYXR0KCdAdycsICd2YWwnLCAnY2xlYXInKVxyXG4gICAgLmF0dCgnQHcnLCAnZmlsbCcsIGNvbG9yQ29kZSlcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRIaWdobGlnaHQgPSAoY29sb3IgPSAneWVsbG93JykgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICdoaWdobGlnaHQnKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgY29sb3IpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkVmVydEFsaWduID0gKHR5cGUgPSAnYmFzZWxpbmUnKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgJ3ZlcnRBbGlnbicpXHJcbiAgICAuYXR0KCdAdycsICd2YWwnLCB0eXBlKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZFN0cmlrZSA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnc3RyaWtlJylcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIHRydWUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkQm9sZCA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnYicpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkSXRhbGljcyA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnaScpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkVW5kZXJsaW5lID0gKHR5cGUgPSAnc2luZ2xlJykgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICd1JylcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIHR5cGUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkTGluZUJyZWFrID0gKHR5cGUgPSAndGV4dFdyYXBwaW5nJykgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICdicicpXHJcbiAgICAuYXR0KCdAdycsICd0eXBlJywgdHlwZSlcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRCb3JkZXIgPSAoXHJcbiAgYm9yZGVyU2lkZSA9ICd0b3AnLFxyXG4gIGJvcmRlclNpemUgPSAwLFxyXG4gIGJvcmRlclNwYWNpbmcgPSAwLFxyXG4gIGJvcmRlckNvbG9yID0gZml4dXBDb2xvckNvZGUoJ2JsYWNrJyksXHJcbiAgYm9yZGVyU3Ryb2tlID0gJ3NpbmdsZSdcclxuKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgYm9yZGVyU2lkZSlcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIGJvcmRlclN0cm9rZSlcclxuICAgIC5hdHQoJ0B3JywgJ3N6JywgYm9yZGVyU2l6ZSlcclxuICAgIC5hdHQoJ0B3JywgJ3NwYWNlJywgYm9yZGVyU3BhY2luZylcclxuICAgIC5hdHQoJ0B3JywgJ2NvbG9yJywgYm9yZGVyQ29sb3IpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkVGV4dEVsZW1lbnQgPSAodGV4dCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICd0JylcclxuICAgIC5hdHQoJ0B4bWwnLCAnc3BhY2UnLCAncHJlc2VydmUnKVxyXG4gICAgLnR4dCh0ZXh0KVxyXG4gICAgLnVwKCk7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cclxuY29uc3QgZml4dXBMaW5lSGVpZ2h0ID0gKGxpbmVIZWlnaHQsIGZvbnRTaXplKSA9PiB7XHJcbiAgLy8gRklYTUU6IElmIGxpbmUgaGVpZ2h0IGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSBudW1iZXJcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXHJcbiAgaWYgKCFpc05hTihsaW5lSGVpZ2h0KSkge1xyXG4gICAgaWYgKGZvbnRTaXplKSB7XHJcbiAgICAgIGNvbnN0IGFjdHVhbExpbmVIZWlnaHQgPSArbGluZUhlaWdodCAqIGZvbnRTaXplO1xyXG5cclxuICAgICAgcmV0dXJuIEhJUFRvVFdJUChhY3R1YWxMaW5lSGVpZ2h0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIDI0MCBUV0lQIG9yIDEyIHBvaW50IGlzIGRlZmF1bHQgbGluZSBoZWlnaHRcclxuICAgICAgcmV0dXJuICtsaW5lSGVpZ2h0ICogMjQwO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyAyNDAgVFdJUCBvciAxMiBwb2ludCBpcyBkZWZhdWx0IGxpbmUgaGVpZ2h0XHJcbiAgICByZXR1cm4gMjQwO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxyXG5jb25zdCBmaXh1cEZvbnRTaXplID0gKGZvbnRTaXplU3RyaW5nKSA9PiB7XHJcbiAgaWYgKHBvaW50UmVnZXgudGVzdChmb250U2l6ZVN0cmluZykpIHtcclxuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGZvbnRTaXplU3RyaW5nLm1hdGNoKHBvaW50UmVnZXgpO1xyXG4gICAgLy8gY29udmVydCBwb2ludCB0byBoYWxmIHBvaW50XHJcbiAgICByZXR1cm4gcG9pbnRUb0hJUChtYXRjaGVkUGFydHNbMV0pO1xyXG4gIH0gZWxzZSBpZiAocGl4ZWxSZWdleC50ZXN0KGZvbnRTaXplU3RyaW5nKSkge1xyXG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gZm9udFNpemVTdHJpbmcubWF0Y2gocGl4ZWxSZWdleCk7XHJcbiAgICAvLyBjb252ZXJ0IHBpeGVscyB0byBoYWxmIHBvaW50XHJcbiAgICByZXR1cm4gcGl4ZWxUb0hJUChtYXRjaGVkUGFydHNbMV0pO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxyXG5jb25zdCBmaXh1cFJvd0hlaWdodCA9IChyb3dIZWlnaHRTdHJpbmcpID0+IHtcclxuICBpZiAocG9pbnRSZWdleC50ZXN0KHJvd0hlaWdodFN0cmluZykpIHtcclxuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IHJvd0hlaWdodFN0cmluZy5tYXRjaChwb2ludFJlZ2V4KTtcclxuICAgIC8vIGNvbnZlcnQgcG9pbnQgdG8gaGFsZiBwb2ludFxyXG4gICAgcmV0dXJuIHBvaW50VG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XHJcbiAgfSBlbHNlIGlmIChwaXhlbFJlZ2V4LnRlc3Qocm93SGVpZ2h0U3RyaW5nKSkge1xyXG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gcm93SGVpZ2h0U3RyaW5nLm1hdGNoKHBpeGVsUmVnZXgpO1xyXG4gICAgLy8gY29udmVydCBwaXhlbHMgdG8gaGFsZiBwb2ludFxyXG4gICAgcmV0dXJuIHBpeGVsVG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XHJcbiAgfSBlbHNlIGlmIChjbVJlZ2V4LnRlc3Qocm93SGVpZ2h0U3RyaW5nKSkge1xyXG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gcm93SGVpZ2h0U3RyaW5nLm1hdGNoKGNtUmVnZXgpO1xyXG4gICAgcmV0dXJuIGNtVG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XHJcbiAgfSBlbHNlIGlmIChpbmNoUmVnZXgudGVzdChyb3dIZWlnaHRTdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSByb3dIZWlnaHRTdHJpbmcubWF0Y2goaW5jaFJlZ2V4KTtcclxuICAgIHJldHVybiBpbmNoVG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXHJcbmNvbnN0IGZpeHVwQ29sdW1uV2lkdGggPSAoY29sdW1uV2lkdGhTdHJpbmcpID0+IHtcclxuICBpZiAocG9pbnRSZWdleC50ZXN0KGNvbHVtbldpZHRoU3RyaW5nKSkge1xyXG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gY29sdW1uV2lkdGhTdHJpbmcubWF0Y2gocG9pbnRSZWdleCk7XHJcbiAgICByZXR1cm4gcG9pbnRUb1RXSVAobWF0Y2hlZFBhcnRzWzFdKTtcclxuICB9IGVsc2UgaWYgKHBpeGVsUmVnZXgudGVzdChjb2x1bW5XaWR0aFN0cmluZykpIHtcclxuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IGNvbHVtbldpZHRoU3RyaW5nLm1hdGNoKHBpeGVsUmVnZXgpO1xyXG4gICAgcmV0dXJuIHBpeGVsVG9UV0lQKG1hdGNoZWRQYXJ0c1sxXSk7XHJcbiAgfSBlbHNlIGlmIChjbVJlZ2V4LnRlc3QoY29sdW1uV2lkdGhTdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBjb2x1bW5XaWR0aFN0cmluZy5tYXRjaChjbVJlZ2V4KTtcclxuICAgIHJldHVybiBjbVRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xyXG4gIH0gZWxzZSBpZiAoaW5jaFJlZ2V4LnRlc3QoY29sdW1uV2lkdGhTdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBjb2x1bW5XaWR0aFN0cmluZy5tYXRjaChpbmNoUmVnZXgpO1xyXG4gICAgcmV0dXJuIGluY2hUb1RXSVAobWF0Y2hlZFBhcnRzWzFdKTtcclxuICB9XHJcbn07XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cclxuY29uc3QgZml4dXBNYXJnaW4gPSAobWFyZ2luU3RyaW5nKSA9PiB7XHJcbiAgaWYgKHBvaW50UmVnZXgudGVzdChtYXJnaW5TdHJpbmcpKSB7XHJcbiAgICBjb25zdCBtYXRjaGVkUGFydHMgPSBtYXJnaW5TdHJpbmcubWF0Y2gocG9pbnRSZWdleCk7XHJcbiAgICAvLyBjb252ZXJ0IHBvaW50IHRvIGhhbGYgcG9pbnRcclxuICAgIHJldHVybiBwb2ludFRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xyXG4gIH0gZWxzZSBpZiAocGl4ZWxSZWdleC50ZXN0KG1hcmdpblN0cmluZykpIHtcclxuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IG1hcmdpblN0cmluZy5tYXRjaChwaXhlbFJlZ2V4KTtcclxuICAgIC8vIGNvbnZlcnQgcGl4ZWxzIHRvIGhhbGYgcG9pbnRcclxuICAgIHJldHVybiBwaXhlbFRvVFdJUChtYXRjaGVkUGFydHNbMV0pO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IG1vZGlmaWVkU3R5bGVBdHRyaWJ1dGVzQnVpbGRlciA9ICh2Tm9kZSwgYXR0cmlidXRlcywgb3B0aW9ucykgPT4ge1xyXG4gIGNvbnN0IG1vZGlmaWVkQXR0cmlidXRlcyA9IHsgLi4uYXR0cmlidXRlcyB9O1xyXG5cclxuICAvLyBzdHlsZXNcclxuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUucHJvcGVydGllcyAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlKSB7XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS5jb2xvciAmJiAhY29sb3JsZXNzQ29sb3JzLmluY2x1ZGVzKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuY29sb3IpKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5jb2xvciA9IGZpeHVwQ29sb3JDb2RlKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuY29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYmFja2dyb3VuZC1jb2xvciddICYmXHJcbiAgICAgICFjb2xvcmxlc3NDb2xvcnMuaW5jbHVkZXModk5vZGUucHJvcGVydGllcy5zdHlsZVsnYmFja2dyb3VuZC1jb2xvciddKVxyXG4gICAgKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5iYWNrZ3JvdW5kQ29sb3IgPSBmaXh1cENvbG9yQ29kZShcclxuICAgICAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ11cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ3ZlcnRpY2FsLWFsaWduJ10gJiZcclxuICAgICAgdmVydGljYWxBbGlnblZhbHVlcy5pbmNsdWRlcyh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWyd2ZXJ0aWNhbC1hbGlnbiddKVxyXG4gICAgKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy52ZXJ0aWNhbEFsaWduID0gdk5vZGUucHJvcGVydGllcy5zdHlsZVsndmVydGljYWwtYWxpZ24nXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ3RleHQtYWxpZ24nXSAmJlxyXG4gICAgICBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJywgJ2p1c3RpZnknXS5pbmNsdWRlcyh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWyd0ZXh0LWFsaWduJ10pXHJcbiAgICApIHtcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnRleHRBbGlnbiA9IHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ3RleHQtYWxpZ24nXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGSVhNRTogcmVtb3ZlIGJvbGQgY2hlY2sgd2hlbiBvdGhlciBmb250IHdlaWdodHMgYXJlIGhhbmRsZWQuXHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnZm9udC13ZWlnaHQnXSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydmb250LXdlaWdodCddID09PSAnYm9sZCcpIHtcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnN0cm9uZyA9IHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2ZvbnQtd2VpZ2h0J107XHJcbiAgICB9XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnZm9udC1zaXplJ10pIHtcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLmZvbnRTaXplID0gZml4dXBGb250U2l6ZSh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydmb250LXNpemUnXSk7XHJcbiAgICB9XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnbGluZS1oZWlnaHQnXSkge1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMubGluZUhlaWdodCA9IGZpeHVwTGluZUhlaWdodChcclxuICAgICAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydsaW5lLWhlaWdodCddLFxyXG4gICAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2ZvbnQtc2l6ZSddXHJcbiAgICAgICAgICA/IGZpeHVwRm9udFNpemUodk5vZGUucHJvcGVydGllcy5zdHlsZVsnZm9udC1zaXplJ10pXHJcbiAgICAgICAgICA6IG51bGxcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydtYXJnaW4tbGVmdCddIHx8IHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ21hcmdpbi1yaWdodCddKSB7XHJcbiAgICAgIGNvbnN0IGxlZnRNYXJnaW4gPSBmaXh1cE1hcmdpbih2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydtYXJnaW4tbGVmdCddKTtcclxuICAgICAgY29uc3QgcmlnaHRNYXJnaW4gPSBmaXh1cE1hcmdpbih2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydtYXJnaW4tcmlnaHQnXSk7XHJcbiAgICAgIGNvbnN0IGluZGVudGF0aW9uID0ge307XHJcbiAgICAgIGlmIChsZWZ0TWFyZ2luKSB7XHJcbiAgICAgICAgaW5kZW50YXRpb24ubGVmdCA9IGxlZnRNYXJnaW47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJpZ2h0TWFyZ2luKSB7XHJcbiAgICAgICAgaW5kZW50YXRpb24ucmlnaHQgPSByaWdodE1hcmdpbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGVmdE1hcmdpbiB8fCByaWdodE1hcmdpbikge1xyXG4gICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5pbmRlbnRhdGlvbiA9IGluZGVudGF0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS5kaXNwbGF5KSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5kaXNwbGF5ID0gdk5vZGUucHJvcGVydGllcy5zdHlsZS5kaXNwbGF5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLndpZHRoKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCA9IHZOb2RlLnByb3BlcnRpZXMuc3R5bGUud2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwYXJhZ3JhcGggb25seVxyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaXNQYXJhZ3JhcGgpIHtcclxuICAgIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS50YWdOYW1lID09PSAnYmxvY2txdW90ZScpIHtcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLmluZGVudGF0aW9uID0geyBsZWZ0OiAyODQgfTtcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLnRleHRBbGlnbiA9ICdqdXN0aWZ5JztcclxuICAgIH0gZWxzZSBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUudGFnTmFtZSA9PT0gJ2NvZGUnKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5oaWdobGlnaHRDb2xvciA9ICdsaWdodEdyYXknO1xyXG4gICAgfSBlbHNlIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS50YWdOYW1lID09PSAncHJlJykge1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMuZm9udCA9ICdDb3VyaWVyJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtb2RpZmllZEF0dHJpYnV0ZXM7XHJcbn07XHJcblxyXG4vLyBodG1sIHRhZyB0byBmb3JtYXR0aW5nIGZ1bmN0aW9uXHJcbi8vIG9wdGlvbnMgYXJlIHBhc3NlZCB0byB0aGUgZm9ybWF0dGluZyBmdW5jdGlvbiBpZiBuZWVkZWRcclxuY29uc3QgYnVpbGRGb3JtYXR0aW5nID0gKGh0bWxUYWcsIG9wdGlvbnMpID0+IHtcclxuICBzd2l0Y2ggKGh0bWxUYWcpIHtcclxuICAgIGNhc2UgJ3N0cm9uZyc6XHJcbiAgICBjYXNlICdiJzpcclxuICAgICAgcmV0dXJuIGJ1aWxkQm9sZCgpO1xyXG4gICAgY2FzZSAnZW0nOlxyXG4gICAgY2FzZSAnaSc6XHJcbiAgICAgIHJldHVybiBidWlsZEl0YWxpY3MoKTtcclxuICAgIGNhc2UgJ2lucyc6XHJcbiAgICBjYXNlICd1JzpcclxuICAgICAgcmV0dXJuIGJ1aWxkVW5kZXJsaW5lKCk7XHJcbiAgICBjYXNlICdzdHJpa2UnOlxyXG4gICAgY2FzZSAnZGVsJzpcclxuICAgIGNhc2UgJ3MnOlxyXG4gICAgICByZXR1cm4gYnVpbGRTdHJpa2UoKTtcclxuICAgIGNhc2UgJ3N1Yic6XHJcbiAgICAgIHJldHVybiBidWlsZFZlcnRBbGlnbignc3Vic2NyaXB0Jyk7XHJcbiAgICBjYXNlICdzdXAnOlxyXG4gICAgICByZXR1cm4gYnVpbGRWZXJ0QWxpZ24oJ3N1cGVyc2NyaXB0Jyk7XHJcbiAgICBjYXNlICdtYXJrJzpcclxuICAgICAgcmV0dXJuIGJ1aWxkSGlnaGxpZ2h0KCk7XHJcbiAgICBjYXNlICdjb2RlJzpcclxuICAgICAgcmV0dXJuIGJ1aWxkSGlnaGxpZ2h0KCdsaWdodEdyYXknKTtcclxuICAgIGNhc2UgJ2hpZ2hsaWdodENvbG9yJzpcclxuICAgICAgcmV0dXJuIGJ1aWxkSGlnaGxpZ2h0KG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xvciA/IG9wdGlvbnMuY29sb3IgOiAnbGlnaHRHcmF5Jyk7XHJcbiAgICBjYXNlICdmb250JzpcclxuICAgIGNhc2UgJ3ByZSc6XHJcbiAgICAgIHJldHVybiBidWlsZFJ1bkZvbnRGcmFnbWVudCgnQ291cmllcicpO1xyXG4gICAgY2FzZSAnY29sb3InOlxyXG4gICAgICByZXR1cm4gYnVpbGRDb2xvcihvcHRpb25zICYmIG9wdGlvbnMuY29sb3IgPyBvcHRpb25zLmNvbG9yIDogJ2JsYWNrJyk7XHJcbiAgICBjYXNlICdiYWNrZ3JvdW5kQ29sb3InOlxyXG4gICAgICByZXR1cm4gYnVpbGRTaGFkaW5nKG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xvciA/IG9wdGlvbnMuY29sb3IgOiAnYmxhY2snKTtcclxuICAgIGNhc2UgJ2ZvbnRTaXplJzpcclxuICAgICAgLy8gZG9lcyB0aGlzIG5lZWQgYSB1bml0IG9mIG1lYXN1cmU/XHJcbiAgICAgIHJldHVybiBidWlsZEZvbnRTaXplKG9wdGlvbnMgJiYgb3B0aW9ucy5mb250U2l6ZSA/IG9wdGlvbnMuZm9udFNpemUgOiAxMCk7XHJcbiAgICBjYXNlICdoeXBlcmxpbmsnOlxyXG4gICAgICByZXR1cm4gYnVpbGRSdW5TdHlsZUZyYWdtZW50KCdIeXBlcmxpbmsnKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRSdW5Qcm9wZXJ0aWVzID0gKGF0dHJpYnV0ZXMpID0+IHtcclxuICBjb25zdCBydW5Qcm9wZXJ0aWVzRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAnclByJyk7XHJcbiAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xyXG4gICAgICBpZiAoa2V5ID09PSAnY29sb3InIHx8IGtleSA9PT0gJ2JhY2tncm91bmRDb2xvcicgfHwga2V5ID09PSAnaGlnaGxpZ2h0Q29sb3InKSB7XHJcbiAgICAgICAgb3B0aW9ucy5jb2xvciA9IGF0dHJpYnV0ZXNba2V5XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGtleSA9PT0gJ2ZvbnRTaXplJykge1xyXG4gICAgICAgIG9wdGlvbnMuZm9udFNpemUgPSBhdHRyaWJ1dGVzW2tleV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZvcm1hdHRpbmdGcmFnbWVudCA9IGJ1aWxkRm9ybWF0dGluZyhrZXksIG9wdGlvbnMpO1xyXG4gICAgICBpZiAoZm9ybWF0dGluZ0ZyYWdtZW50KSB7XHJcbiAgICAgICAgcnVuUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChmb3JtYXR0aW5nRnJhZ21lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcnVuUHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBydW5Qcm9wZXJ0aWVzRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFJ1biA9IGFzeW5jICh2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpID0+IHtcclxuICBjb25zdCBydW5GcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICdyJyk7XHJcbiAgY29uc3QgcnVuUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGRSdW5Qcm9wZXJ0aWVzKGNsb25lRGVlcChhdHRyaWJ1dGVzKSk7XHJcblxyXG4gIC8vIGNhc2Ugd2hlcmUgd2UgaGF2ZSByZWN1cnNpdmUgc3BhbnMgcmVwcmVzZW50aW5nIGZvbnQgY2hhbmdlc1xyXG4gIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS50YWdOYW1lID09PSAnc3BhbicpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxyXG4gICAgcmV0dXJuIGJ1aWxkUnVuT3JSdW5zKHZOb2RlLCBhdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBpc1ZOb2RlKHZOb2RlKSAmJlxyXG4gICAgW1xyXG4gICAgICAnc3Ryb25nJyxcclxuICAgICAgJ2InLFxyXG4gICAgICAnZW0nLFxyXG4gICAgICAnaScsXHJcbiAgICAgICd1JyxcclxuICAgICAgJ2lucycsXHJcbiAgICAgICdzdHJpa2UnLFxyXG4gICAgICAnZGVsJyxcclxuICAgICAgJ3MnLFxyXG4gICAgICAnc3ViJyxcclxuICAgICAgJ3N1cCcsXHJcbiAgICAgICdtYXJrJyxcclxuICAgICAgJ2Jsb2NrcXVvdGUnLFxyXG4gICAgICAnY29kZScsXHJcbiAgICAgICdwcmUnLFxyXG4gICAgXS5pbmNsdWRlcyh2Tm9kZS50YWdOYW1lKVxyXG4gICkge1xyXG4gICAgY29uc3QgcnVuRnJhZ21lbnRzQXJyYXkgPSBbXTtcclxuXHJcbiAgICBsZXQgdk5vZGVzID0gW3ZOb2RlXTtcclxuICAgIC8vIGNyZWF0ZSB0ZW1wIHJ1biBmcmFnbWVudHMgdG8gc3BsaXQgdGhlIHBhcmFncmFwaCBpbnRvIGRpZmZlcmVudCBydW5zXHJcbiAgICBsZXQgdGVtcEF0dHJpYnV0ZXMgPSBjbG9uZURlZXAoYXR0cmlidXRlcyk7XHJcbiAgICBsZXQgdGVtcFJ1bkZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoJ0B3JywgJ3InKTtcclxuICAgIHdoaWxlICh2Tm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHRlbXBWTm9kZSA9IHZOb2Rlcy5zaGlmdCgpO1xyXG4gICAgICBpZiAoaXNWVGV4dCh0ZW1wVk5vZGUpKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dEZyYWdtZW50ID0gYnVpbGRUZXh0RWxlbWVudCh0ZW1wVk5vZGUudGV4dCk7XHJcbiAgICAgICAgY29uc3QgdGVtcFJ1blByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkUnVuUHJvcGVydGllcyh7IC4uLmF0dHJpYnV0ZXMsIC4uLnRlbXBBdHRyaWJ1dGVzIH0pO1xyXG4gICAgICAgIHRlbXBSdW5GcmFnbWVudC5pbXBvcnQodGVtcFJ1blByb3BlcnRpZXNGcmFnbWVudCk7XHJcbiAgICAgICAgdGVtcFJ1bkZyYWdtZW50LmltcG9ydCh0ZXh0RnJhZ21lbnQpO1xyXG4gICAgICAgIHJ1bkZyYWdtZW50c0FycmF5LnB1c2godGVtcFJ1bkZyYWdtZW50KTtcclxuXHJcbiAgICAgICAgLy8gcmUgaW5pdGlhbGl6ZSB0ZW1wIHJ1biBmcmFnbWVudHMgd2l0aCBuZXcgZnJhZ21lbnRcclxuICAgICAgICB0ZW1wQXR0cmlidXRlcyA9IGNsb25lRGVlcChhdHRyaWJ1dGVzKTtcclxuICAgICAgICB0ZW1wUnVuRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAncicpO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzVk5vZGUodGVtcFZOb2RlKSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIFtcclxuICAgICAgICAgICAgJ3N0cm9uZycsXHJcbiAgICAgICAgICAgICdiJyxcclxuICAgICAgICAgICAgJ2VtJyxcclxuICAgICAgICAgICAgJ2knLFxyXG4gICAgICAgICAgICAndScsXHJcbiAgICAgICAgICAgICdpbnMnLFxyXG4gICAgICAgICAgICAnc3RyaWtlJyxcclxuICAgICAgICAgICAgJ2RlbCcsXHJcbiAgICAgICAgICAgICdzJyxcclxuICAgICAgICAgICAgJ3N1YicsXHJcbiAgICAgICAgICAgICdzdXAnLFxyXG4gICAgICAgICAgICAnbWFyaycsXHJcbiAgICAgICAgICAgICdjb2RlJyxcclxuICAgICAgICAgICAgJ3ByZScsXHJcbiAgICAgICAgICBdLmluY2x1ZGVzKHRlbXBWTm9kZS50YWdOYW1lKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGVtcEF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICAgIHN3aXRjaCAodGVtcFZOb2RlLnRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3Ryb25nJzpcclxuICAgICAgICAgICAgY2FzZSAnYic6XHJcbiAgICAgICAgICAgICAgdGVtcEF0dHJpYnV0ZXMuc3Ryb25nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaSc6XHJcbiAgICAgICAgICAgICAgdGVtcEF0dHJpYnV0ZXMuaSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3UnOlxyXG4gICAgICAgICAgICAgIHRlbXBBdHRyaWJ1dGVzLnUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzdWInOlxyXG4gICAgICAgICAgICAgIHRlbXBBdHRyaWJ1dGVzLnN1YiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N1cCc6XHJcbiAgICAgICAgICAgICAgdGVtcEF0dHJpYnV0ZXMuc3VwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRpbmdGcmFnbWVudCA9IGJ1aWxkRm9ybWF0dGluZyh0ZW1wVk5vZGUpO1xyXG5cclxuICAgICAgICAgIGlmIChmb3JtYXR0aW5nRnJhZ21lbnQpIHtcclxuICAgICAgICAgICAgcnVuUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChmb3JtYXR0aW5nRnJhZ21lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gZ28gYSBsYXllciBkZWVwZXIgaWYgdGhlcmUgaXMgYSBzcGFuIHNvbWV3aGVyZSBpbiB0aGUgY2hpbGRyZW5cclxuICAgICAgICB9IGVsc2UgaWYgKHRlbXBWTm9kZS50YWdOYW1lID09PSAnc3BhbicpIHtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxyXG4gICAgICAgICAgY29uc3Qgc3BhbkZyYWdtZW50ID0gYXdhaXQgYnVpbGRSdW5PclJ1bnMoXHJcbiAgICAgICAgICAgIHRlbXBWTm9kZSxcclxuICAgICAgICAgICAgeyAuLi5hdHRyaWJ1dGVzLCAuLi50ZW1wQXR0cmlidXRlcyB9LFxyXG4gICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBpZiBzcGFuRnJhZ21lbnQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gYWRkIGVhY2ggZnJhZ21lbnQgdG8gdGhlIHJ1bkZyYWdtZW50c0FycmF5LiBJZiB0aGUgZnJhZ21lbnQgaXMgYW4gYXJyYXksIHBlcmZvcm0gYSBkZXB0aCBmaXJzdCBzZWFyY2ggb24gdGhlIGFycmF5IHRvIGFkZCBlYWNoIGZyYWdtZW50IHRvIHRoZSBydW5GcmFnbWVudHNBcnJheVxyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3BhbkZyYWdtZW50KSkge1xyXG4gICAgICAgICAgICBzcGFuRnJhZ21lbnQuZmxhdChJbmZpbml0eSk7XHJcbiAgICAgICAgICAgIHJ1bkZyYWdtZW50c0FycmF5LnB1c2goLi4uc3BhbkZyYWdtZW50KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJ1bkZyYWdtZW50c0FycmF5LnB1c2goc3BhbkZyYWdtZW50KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBkbyBub3Qgc2xpY2UgYW5kIGNvbmNhdCBjaGlsZHJlbiBzaW5jZSB0aGlzIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBpbiB0aGUgYnVpbGRSdW5PclJ1bnMgZnVuY3Rpb25cclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGVtcFZOb2RlLmNoaWxkcmVuICYmIHRlbXBWTm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICBpZiAodGVtcFZOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7IC4uLmF0dHJpYnV0ZXMsIC4uLnRlbXBBdHRyaWJ1dGVzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2Tm9kZXMgPSB0ZW1wVk5vZGUuY2hpbGRyZW4uc2xpY2UoKS5jb25jYXQodk5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJ1bkZyYWdtZW50c0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gcnVuRnJhZ21lbnRzQXJyYXk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBydW5GcmFnbWVudC5pbXBvcnQocnVuUHJvcGVydGllc0ZyYWdtZW50KTtcclxuICBpZiAoaXNWVGV4dCh2Tm9kZSkpIHtcclxuICAgIGNvbnN0IHRleHRGcmFnbWVudCA9IGJ1aWxkVGV4dEVsZW1lbnQodk5vZGUudGV4dCk7XHJcbiAgICBydW5GcmFnbWVudC5pbXBvcnQodGV4dEZyYWdtZW50KTtcclxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy50eXBlID09PSAncGljdHVyZScpIHtcclxuICAgIGxldCByZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgYmFzZTY0VXJpID0gZGVjb2RlVVJJQ29tcG9uZW50KHZOb2RlLnByb3BlcnRpZXMuc3JjKTtcclxuICAgIGlmIChiYXNlNjRVcmkpIHtcclxuICAgICAgcmVzcG9uc2UgPSBkb2N4RG9jdW1lbnRJbnN0YW5jZS5jcmVhdGVNZWRpYUZpbGUoYmFzZTY0VXJpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgZG9jeERvY3VtZW50SW5zdGFuY2UuemlwXHJcbiAgICAgICAgLmZvbGRlcignd29yZCcpXHJcbiAgICAgICAgLmZvbGRlcignbWVkaWEnKVxyXG4gICAgICAgIC5maWxlKHJlc3BvbnNlLmZpbGVOYW1lV2l0aEV4dGVuc2lvbiwgQnVmZmVyLmZyb20ocmVzcG9uc2UuZmlsZUNvbnRlbnQsICdiYXNlNjQnKSwge1xyXG4gICAgICAgICAgY3JlYXRlRm9sZGVyczogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkb2N1bWVudFJlbHNJZCA9IGRvY3hEb2N1bWVudEluc3RhbmNlLmNyZWF0ZURvY3VtZW50UmVsYXRpb25zaGlwcyhcclxuICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZS5yZWxhdGlvbnNoaXBGaWxlbmFtZSxcclxuICAgICAgICBpbWFnZVR5cGUsXHJcbiAgICAgICAgYG1lZGlhLyR7cmVzcG9uc2UuZmlsZU5hbWVXaXRoRXh0ZW5zaW9ufWAsXHJcbiAgICAgICAgaW50ZXJuYWxSZWxhdGlvbnNoaXBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF0dHJpYnV0ZXMuaW5saW5lT3JBbmNob3JlZCA9IHRydWU7XHJcbiAgICAgIGF0dHJpYnV0ZXMucmVsYXRpb25zaGlwSWQgPSBkb2N1bWVudFJlbHNJZDtcclxuICAgICAgYXR0cmlidXRlcy5pZCA9IHJlc3BvbnNlLmlkO1xyXG4gICAgICBhdHRyaWJ1dGVzLmZpbGVDb250ZW50ID0gcmVzcG9uc2UuZmlsZUNvbnRlbnQ7XHJcbiAgICAgIGF0dHJpYnV0ZXMuZmlsZU5hbWVXaXRoRXh0ZW5zaW9uID0gcmVzcG9uc2UuZmlsZU5hbWVXaXRoRXh0ZW5zaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgdHlwZSwgaW5saW5lT3JBbmNob3JlZCwgLi4ub3RoZXJBdHRyaWJ1dGVzIH0gPSBhdHRyaWJ1dGVzO1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXHJcbiAgICBjb25zdCBpbWFnZUZyYWdtZW50ID0gYnVpbGREcmF3aW5nKGlubGluZU9yQW5jaG9yZWQsIHR5cGUsIG90aGVyQXR0cmlidXRlcyk7XHJcbiAgICBydW5GcmFnbWVudC5pbXBvcnQoaW1hZ2VGcmFnbWVudCk7XHJcbiAgfSBlbHNlIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS50YWdOYW1lID09PSAnYnInKSB7XHJcbiAgICBjb25zdCBsaW5lQnJlYWtGcmFnbWVudCA9IGJ1aWxkTGluZUJyZWFrKCk7XHJcbiAgICBydW5GcmFnbWVudC5pbXBvcnQobGluZUJyZWFrRnJhZ21lbnQpO1xyXG4gIH1cclxuICBydW5GcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gcnVuRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFJ1bk9yUnVucyA9IGFzeW5jICh2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpID0+IHtcclxuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGUudGFnTmFtZSA9PT0gJ3NwYW4nKSB7XHJcbiAgICBsZXQgcnVuRnJhZ21lbnRzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBjaGlsZFZOb2RlID0gdk5vZGUuY2hpbGRyZW5baW5kZXhdO1xyXG4gICAgICBjb25zdCBtb2RpZmllZEF0dHJpYnV0ZXMgPSBtb2RpZmllZFN0eWxlQXR0cmlidXRlc0J1aWxkZXIodk5vZGUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICBjb25zdCB0ZW1wUnVuRnJhZ21lbnRzID0gYXdhaXQgYnVpbGRSdW4oY2hpbGRWTm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSk7XHJcbiAgICAgIHJ1bkZyYWdtZW50cyA9IHJ1bkZyYWdtZW50cy5jb25jYXQoXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheSh0ZW1wUnVuRnJhZ21lbnRzKSA/IHRlbXBSdW5GcmFnbWVudHMgOiBbdGVtcFJ1bkZyYWdtZW50c11cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcnVuRnJhZ21lbnRzO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCB0ZW1wUnVuRnJhZ21lbnRzID0gYXdhaXQgYnVpbGRSdW4odk5vZGUsIGF0dHJpYnV0ZXMsIGRvY3hEb2N1bWVudEluc3RhbmNlKTtcclxuICAgIHJldHVybiB0ZW1wUnVuRnJhZ21lbnRzO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkUnVuT3JIeXBlckxpbmsgPSBhc3luYyAodk5vZGUsIGF0dHJpYnV0ZXMsIGRvY3hEb2N1bWVudEluc3RhbmNlKSA9PiB7XHJcbiAgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlLnRhZ05hbWUgPT09ICdhJykge1xyXG4gICAgY29uc3QgcmVsYXRpb25zaGlwSWQgPSBkb2N4RG9jdW1lbnRJbnN0YW5jZS5jcmVhdGVEb2N1bWVudFJlbGF0aW9uc2hpcHMoXHJcbiAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlLnJlbGF0aW9uc2hpcEZpbGVuYW1lLFxyXG4gICAgICBoeXBlcmxpbmtUeXBlLFxyXG4gICAgICB2Tm9kZS5wcm9wZXJ0aWVzICYmIHZOb2RlLnByb3BlcnRpZXMuaHJlZiA/IHZOb2RlLnByb3BlcnRpZXMuaHJlZiA6ICcnXHJcbiAgICApO1xyXG4gICAgY29uc3QgaHlwZXJsaW5rRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudywgcjogbmFtZXNwYWNlcy5yIH0gfSlcclxuICAgICAgLmVsZSgnQHcnLCAnaHlwZXJsaW5rJylcclxuICAgICAgLmF0dCgnQHInLCAnaWQnLCBgcklkJHtyZWxhdGlvbnNoaXBJZH1gKTtcclxuXHJcbiAgICBjb25zdCBtb2RpZmllZEF0dHJpYnV0ZXMgPSB7IC4uLmF0dHJpYnV0ZXMgfTtcclxuICAgIG1vZGlmaWVkQXR0cmlidXRlcy5oeXBlcmxpbmsgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHJ1bkZyYWdtZW50cyA9IGF3YWl0IGJ1aWxkUnVuT3JSdW5zKFxyXG4gICAgICB2Tm9kZS5jaGlsZHJlblswXSxcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLFxyXG4gICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgKTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bkZyYWdtZW50cykpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBydW5GcmFnbWVudCA9IHJ1bkZyYWdtZW50c1tpbmRleF07XHJcblxyXG4gICAgICAgIGh5cGVybGlua0ZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGh5cGVybGlua0ZyYWdtZW50LmltcG9ydChydW5GcmFnbWVudHMpO1xyXG4gICAgfVxyXG4gICAgaHlwZXJsaW5rRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgICByZXR1cm4gaHlwZXJsaW5rRnJhZ21lbnQ7XHJcbiAgfVxyXG5cclxuICBjb25zdCBydW5GcmFnbWVudHMgPSBhd2FpdCBidWlsZFJ1bk9yUnVucyh2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpO1xyXG5cclxuICByZXR1cm4gcnVuRnJhZ21lbnRzO1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGROdW1iZXJpbmdQcm9wZXJ0aWVzID0gKGxldmVsSWQsIG51bWJlcmluZ0lkKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgJ251bVByJylcclxuICAgIC5lbGUoJ0B3JywgJ2lsdmwnKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgU3RyaW5nKGxldmVsSWQpKVxyXG4gICAgLnVwKClcclxuICAgIC5lbGUoJ0B3JywgJ251bUlkJylcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIFN0cmluZyhudW1iZXJpbmdJZCkpXHJcbiAgICAudXAoKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZE51bWJlcmluZ0luc3RhbmNlcyA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnbnVtJylcclxuICAgIC5lbGUoJ0B3JywgJ2Fic3RyYWN0TnVtSWQnKVxyXG4gICAgLnVwKClcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRTcGFjaW5nID0gKGxpbmVTcGFjaW5nLCBiZWZvcmVTcGFjaW5nLCBhZnRlclNwYWNpbmcpID0+IHtcclxuICBjb25zdCBzcGFjaW5nRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAnc3BhY2luZycpO1xyXG5cclxuICBpZiAobGluZVNwYWNpbmcpIHtcclxuICAgIHNwYWNpbmdGcmFnbWVudC5hdHQoJ0B3JywgJ2xpbmUnLCBsaW5lU3BhY2luZyk7XHJcbiAgfVxyXG4gIGlmIChiZWZvcmVTcGFjaW5nKSB7XHJcbiAgICBzcGFjaW5nRnJhZ21lbnQuYXR0KCdAdycsICdiZWZvcmUnLCBiZWZvcmVTcGFjaW5nKTtcclxuICB9XHJcbiAgaWYgKGFmdGVyU3BhY2luZykge1xyXG4gICAgc3BhY2luZ0ZyYWdtZW50LmF0dCgnQHcnLCAnYWZ0ZXInLCBhZnRlclNwYWNpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3BhY2luZ0ZyYWdtZW50LmF0dCgnQHcnLCAnbGluZVJ1bGUnLCAnYXV0bycpLnVwKCk7XHJcblxyXG4gIHJldHVybiBzcGFjaW5nRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZEluZGVudGF0aW9uID0gKHsgbGVmdCwgcmlnaHQgfSkgPT4ge1xyXG4gIGNvbnN0IGluZGVudGF0aW9uRnJhZ21lbnQgPSBmcmFnbWVudCh7XHJcbiAgICBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSxcclxuICB9KS5lbGUoJ0B3JywgJ2luZCcpO1xyXG5cclxuICBpZiAobGVmdCkge1xyXG4gICAgaW5kZW50YXRpb25GcmFnbWVudC5hdHQoJ0B3JywgJ2xlZnQnLCBsZWZ0KTtcclxuICB9XHJcbiAgaWYgKHJpZ2h0KSB7XHJcbiAgICBpbmRlbnRhdGlvbkZyYWdtZW50LmF0dCgnQHcnLCAncmlnaHQnLCByaWdodCk7XHJcbiAgfVxyXG5cclxuICBpbmRlbnRhdGlvbkZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBpbmRlbnRhdGlvbkZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRQU3R5bGUgPSAoc3R5bGUgPSAnTm9ybWFsJykgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICdwU3R5bGUnKVxyXG4gICAgLmF0dCgnQHcnLCAndmFsJywgc3R5bGUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkSG9yaXpvbnRhbEFsaWdubWVudCA9IChob3Jpem9udGFsQWxpZ25tZW50KSA9PiB7XHJcbiAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT09ICdqdXN0aWZ5Jykge1xyXG4gICAgaG9yaXpvbnRhbEFsaWdubWVudCA9ICdib3RoJztcclxuICB9XHJcbiAgcmV0dXJuIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgJ2pjJylcclxuICAgIC5hdHQoJ0B3JywgJ3ZhbCcsIGhvcml6b250YWxBbGlnbm1lbnQpXHJcbiAgICAudXAoKTtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkUGFyYWdyYXBoQm9yZGVyID0gKCkgPT4ge1xyXG4gIGNvbnN0IHBhcmFncmFwaEJvcmRlckZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXHJcbiAgICAnQHcnLFxyXG4gICAgJ3BCZHInXHJcbiAgKTtcclxuICBjb25zdCBib3JkZXJzT2JqZWN0ID0gY2xvbmVEZWVwKHBhcmFncmFwaEJvcmRlcnNPYmplY3QpO1xyXG5cclxuICBPYmplY3Qua2V5cyhib3JkZXJzT2JqZWN0KS5mb3JFYWNoKChib3JkZXJOYW1lKSA9PiB7XHJcbiAgICBpZiAoYm9yZGVyc09iamVjdFtib3JkZXJOYW1lXSkge1xyXG4gICAgICBjb25zdCB7IHNpemUsIHNwYWNpbmcsIGNvbG9yIH0gPSBib3JkZXJzT2JqZWN0W2JvcmRlck5hbWVdO1xyXG5cclxuICAgICAgY29uc3QgYm9yZGVyRnJhZ21lbnQgPSBidWlsZEJvcmRlcihib3JkZXJOYW1lLCBzaXplLCBzcGFjaW5nLCBjb2xvcik7XHJcbiAgICAgIHBhcmFncmFwaEJvcmRlckZyYWdtZW50LmltcG9ydChib3JkZXJGcmFnbWVudCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHBhcmFncmFwaEJvcmRlckZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBwYXJhZ3JhcGhCb3JkZXJGcmFnbWVudDtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkUGFyYWdyYXBoUHJvcGVydGllcyA9IChhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXHJcbiAgICAnQHcnLFxyXG4gICAgJ3BQcidcclxuICApO1xyXG4gIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSAnbnVtYmVyaW5nJzpcclxuICAgICAgICAgIGNvbnN0IHsgbGV2ZWxJZCwgbnVtYmVyaW5nSWQgfSA9IGF0dHJpYnV0ZXNba2V5XTtcclxuICAgICAgICAgIGNvbnN0IG51bWJlcmluZ1Byb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkTnVtYmVyaW5nUHJvcGVydGllcyhsZXZlbElkLCBudW1iZXJpbmdJZCk7XHJcbiAgICAgICAgICBwYXJhZ3JhcGhQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KG51bWJlcmluZ1Byb3BlcnRpZXNGcmFnbWVudCk7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLm51bWJlcmluZztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RleHRBbGlnbic6XHJcbiAgICAgICAgICBjb25zdCBob3Jpem9udGFsQWxpZ25tZW50RnJhZ21lbnQgPSBidWlsZEhvcml6b250YWxBbGlnbm1lbnQoYXR0cmlidXRlc1trZXldKTtcclxuICAgICAgICAgIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQoaG9yaXpvbnRhbEFsaWdubWVudEZyYWdtZW50KTtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMudGV4dEFsaWduO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnYmFja2dyb3VuZENvbG9yJzpcclxuICAgICAgICAgIC8vIEFkZCBzaGFkaW5nIHRvIFBhcmFncmFwaCBQcm9wZXJ0aWVzIG9ubHkgaWYgZGlzcGxheSBpcyBibG9ja1xyXG4gICAgICAgICAgLy8gRXNzZW50aWFsbHkgaWYgYmFja2dyb3VuZCBjb2xvciBuZWVkcyB0byBiZSBhY3Jvc3MgdGhlIHJvd1xyXG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGlzcGxheSA9PT0gJ2Jsb2NrJykge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFkaW5nRnJhZ21lbnQgPSBidWlsZFNoYWRpbmcoYXR0cmlidXRlc1trZXldKTtcclxuICAgICAgICAgICAgcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChzaGFkaW5nRnJhZ21lbnQpO1xyXG4gICAgICAgICAgICAvLyBGSVhNRTogSW5uZXIgcGFkZGluZyBpbiBjYXNlIG9mIHNoYWRlZCBwYXJhZ3JhcGhzLlxyXG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhCb3JkZXJGcmFnbWVudCA9IGJ1aWxkUGFyYWdyYXBoQm9yZGVyKCk7XHJcbiAgICAgICAgICAgIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQocGFyYWdyYXBoQm9yZGVyRnJhZ21lbnQpO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncGFyYWdyYXBoU3R5bGUnOlxyXG4gICAgICAgICAgY29uc3QgcFN0eWxlRnJhZ21lbnQgPSBidWlsZFBTdHlsZShhdHRyaWJ1dGVzLnBhcmFncmFwaFN0eWxlKTtcclxuICAgICAgICAgIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQocFN0eWxlRnJhZ21lbnQpO1xyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMucGFyYWdyYXBoU3R5bGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdpbmRlbnRhdGlvbic6XHJcbiAgICAgICAgICBjb25zdCBpbmRlbnRhdGlvbkZyYWdtZW50ID0gYnVpbGRJbmRlbnRhdGlvbihhdHRyaWJ1dGVzW2tleV0pO1xyXG4gICAgICAgICAgcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChpbmRlbnRhdGlvbkZyYWdtZW50KTtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMuaW5kZW50YXRpb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc3BhY2luZ0ZyYWdtZW50ID0gYnVpbGRTcGFjaW5nKFxyXG4gICAgICBhdHRyaWJ1dGVzLmxpbmVIZWlnaHQsXHJcbiAgICAgIGF0dHJpYnV0ZXMuYmVmb3JlU3BhY2luZyxcclxuICAgICAgYXR0cmlidXRlcy5hZnRlclNwYWNpbmdcclxuICAgICk7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmxpbmVIZWlnaHQ7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmJlZm9yZVNwYWNpbmc7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmFmdGVyU3BhY2luZztcclxuXHJcbiAgICBwYXJhZ3JhcGhQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHNwYWNpbmdGcmFnbWVudCk7XHJcbiAgfVxyXG4gIHBhcmFncmFwaFByb3BlcnRpZXNGcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gcGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgY29tcHV0ZUltYWdlRGltZW5zaW9ucyA9ICh2Tm9kZSwgYXR0cmlidXRlcykgPT4ge1xyXG4gIGNvbnN0IHsgbWF4aW11bVdpZHRoLCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCB9ID0gYXR0cmlidXRlcztcclxuICBjb25zdCBhc3BlY3RSYXRpbyA9IG9yaWdpbmFsV2lkdGggLyBvcmlnaW5hbEhlaWdodDtcclxuICBjb25zdCBtYXhpbXVtV2lkdGhJbkVNVSA9IFRXSVBUb0VNVShtYXhpbXVtV2lkdGgpO1xyXG4gIGxldCBvcmlnaW5hbFdpZHRoSW5FTVUgPSBwaXhlbFRvRU1VKG9yaWdpbmFsV2lkdGgpO1xyXG4gIGxldCBvcmlnaW5hbEhlaWdodEluRU1VID0gcGl4ZWxUb0VNVShvcmlnaW5hbEhlaWdodCk7XHJcbiAgaWYgKG9yaWdpbmFsV2lkdGhJbkVNVSA+IG1heGltdW1XaWR0aEluRU1VKSB7XHJcbiAgICBvcmlnaW5hbFdpZHRoSW5FTVUgPSBtYXhpbXVtV2lkdGhJbkVNVTtcclxuICAgIG9yaWdpbmFsSGVpZ2h0SW5FTVUgPSBNYXRoLnJvdW5kKG9yaWdpbmFsV2lkdGhJbkVNVSAvIGFzcGVjdFJhdGlvKTtcclxuICB9XHJcbiAgbGV0IG1vZGlmaWVkSGVpZ2h0O1xyXG4gIGxldCBtb2RpZmllZFdpZHRoO1xyXG5cclxuICBpZiAodk5vZGUucHJvcGVydGllcyAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlKSB7XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aCkge1xyXG4gICAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aCAhPT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgaWYgKHBpeGVsUmVnZXgudGVzdCh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLndpZHRoKSkge1xyXG4gICAgICAgICAgbW9kaWZpZWRXaWR0aCA9IHBpeGVsVG9FTVUodk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aC5tYXRjaChwaXhlbFJlZ2V4KVsxXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLndpZHRoKSkge1xyXG4gICAgICAgICAgY29uc3QgcGVyY2VudGFnZVZhbHVlID0gdk5vZGUucHJvcGVydGllcy5zdHlsZS53aWR0aC5tYXRjaChwZXJjZW50YWdlUmVnZXgpWzFdO1xyXG5cclxuICAgICAgICAgIG1vZGlmaWVkV2lkdGggPSBNYXRoLnJvdW5kKChwZXJjZW50YWdlVmFsdWUgLyAxMDApICogb3JpZ2luYWxXaWR0aEluRU1VKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmVseS1pZlxyXG4gICAgICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICBtb2RpZmllZFdpZHRoID0gb3JpZ2luYWxXaWR0aEluRU1VO1xyXG4gICAgICAgICAgbW9kaWZpZWRIZWlnaHQgPSBvcmlnaW5hbEhlaWdodEluRU1VO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0KSB7XHJcbiAgICAgIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCAhPT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgaWYgKHBpeGVsUmVnZXgudGVzdCh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCkpIHtcclxuICAgICAgICAgIG1vZGlmaWVkSGVpZ2h0ID0gcGl4ZWxUb0VNVSh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodC5tYXRjaChwaXhlbFJlZ2V4KVsxXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCkpIHtcclxuICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VWYWx1ZSA9IHZOb2RlLnByb3BlcnRpZXMuc3R5bGUud2lkdGgubWF0Y2gocGVyY2VudGFnZVJlZ2V4KVsxXTtcclxuXHJcbiAgICAgICAgICBtb2RpZmllZEhlaWdodCA9IE1hdGgucm91bmQoKHBlcmNlbnRhZ2VWYWx1ZSAvIDEwMCkgKiBvcmlnaW5hbEhlaWdodEluRU1VKTtcclxuICAgICAgICAgIGlmICghbW9kaWZpZWRXaWR0aCkge1xyXG4gICAgICAgICAgICBtb2RpZmllZFdpZHRoID0gTWF0aC5yb3VuZChtb2RpZmllZEhlaWdodCAqIGFzcGVjdFJhdGlvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmVseS1pZlxyXG4gICAgICAgIGlmIChtb2RpZmllZFdpZHRoKSB7XHJcbiAgICAgICAgICBpZiAoIW1vZGlmaWVkSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIG1vZGlmaWVkSGVpZ2h0ID0gTWF0aC5yb3VuZChtb2RpZmllZFdpZHRoIC8gYXNwZWN0UmF0aW8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBtb2RpZmllZEhlaWdodCA9IG9yaWdpbmFsSGVpZ2h0SW5FTVU7XHJcbiAgICAgICAgICBtb2RpZmllZFdpZHRoID0gb3JpZ2luYWxXaWR0aEluRU1VO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1vZGlmaWVkV2lkdGggJiYgIW1vZGlmaWVkSGVpZ2h0KSB7XHJcbiAgICAgIG1vZGlmaWVkSGVpZ2h0ID0gTWF0aC5yb3VuZChtb2RpZmllZFdpZHRoIC8gYXNwZWN0UmF0aW8pO1xyXG4gICAgfSBlbHNlIGlmIChtb2RpZmllZEhlaWdodCAmJiAhbW9kaWZpZWRXaWR0aCkge1xyXG4gICAgICBtb2RpZmllZFdpZHRoID0gTWF0aC5yb3VuZChtb2RpZmllZEhlaWdodCAqIGFzcGVjdFJhdGlvKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgbW9kaWZpZWRXaWR0aCA9IG9yaWdpbmFsV2lkdGhJbkVNVTtcclxuICAgIG1vZGlmaWVkSGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHRJbkVNVTtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gIGF0dHJpYnV0ZXMud2lkdGggPSBtb2RpZmllZFdpZHRoO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gbW9kaWZpZWRIZWlnaHQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFBhcmFncmFwaCA9IGFzeW5jICh2Tm9kZSwgYXR0cmlidXRlcywgZG9jeERvY3VtZW50SW5zdGFuY2UpID0+IHtcclxuICBjb25zdCBwYXJhZ3JhcGhGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICdwJyk7XHJcbiAgY29uc3QgbW9kaWZpZWRBdHRyaWJ1dGVzID0gbW9kaWZpZWRTdHlsZUF0dHJpYnV0ZXNCdWlsZGVyKHZOb2RlLCBhdHRyaWJ1dGVzLCB7XHJcbiAgICBpc1BhcmFncmFwaDogdHJ1ZSxcclxuICB9KTtcclxuICBjb25zdCBwYXJhZ3JhcGhQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZFBhcmFncmFwaFByb3BlcnRpZXMobW9kaWZpZWRBdHRyaWJ1dGVzKTtcclxuICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocGFyYWdyYXBoUHJvcGVydGllc0ZyYWdtZW50KTtcclxuICBpZiAoaXNWTm9kZSh2Tm9kZSkgJiYgdk5vZGVIYXNDaGlsZHJlbih2Tm9kZSkpIHtcclxuICAgIGlmIChcclxuICAgICAgW1xyXG4gICAgICAgICdzcGFuJyxcclxuICAgICAgICAnc3Ryb25nJyxcclxuICAgICAgICAnYicsXHJcbiAgICAgICAgJ2VtJyxcclxuICAgICAgICAnaScsXHJcbiAgICAgICAgJ3UnLFxyXG4gICAgICAgICdpbnMnLFxyXG4gICAgICAgICdzdHJpa2UnLFxyXG4gICAgICAgICdkZWwnLFxyXG4gICAgICAgICdzJyxcclxuICAgICAgICAnc3ViJyxcclxuICAgICAgICAnc3VwJyxcclxuICAgICAgICAnbWFyaycsXHJcbiAgICAgICAgJ2EnLFxyXG4gICAgICAgICdjb2RlJyxcclxuICAgICAgICAncHJlJyxcclxuICAgICAgXS5pbmNsdWRlcyh2Tm9kZS50YWdOYW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzID0gYXdhaXQgYnVpbGRSdW5Pckh5cGVyTGluayhcclxuICAgICAgICB2Tm9kZSxcclxuICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgZG9jeERvY3VtZW50SW5zdGFuY2VcclxuICAgICAgKTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVuT3JIeXBlcmxpbmtGcmFnbWVudHMpKSB7XHJcbiAgICAgICAgZm9yIChcclxuICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuICAgICAgICAgIGl0ZXJhdG9ySW5kZXggPCBydW5Pckh5cGVybGlua0ZyYWdtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICBpdGVyYXRvckluZGV4KytcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnQgPSBydW5Pckh5cGVybGlua0ZyYWdtZW50c1tpdGVyYXRvckluZGV4XTtcclxuXHJcbiAgICAgICAgICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocnVuT3JIeXBlcmxpbmtGcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcmFncmFwaEZyYWdtZW50LmltcG9ydChydW5Pckh5cGVybGlua0ZyYWdtZW50cyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodk5vZGUudGFnTmFtZSA9PT0gJ2Jsb2NrcXVvdGUnKSB7XHJcbiAgICAgIGNvbnN0IHJ1bkZyYWdtZW50T3JGcmFnbWVudHMgPSBhd2FpdCBidWlsZFJ1bih2Tm9kZSwgYXR0cmlidXRlcyk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bkZyYWdtZW50T3JGcmFnbWVudHMpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJ1bkZyYWdtZW50T3JGcmFnbWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocnVuRnJhZ21lbnRPckZyYWdtZW50c1tpbmRleF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocnVuRnJhZ21lbnRPckZyYWdtZW50cyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZFZOb2RlID0gdk5vZGUuY2hpbGRyZW5baW5kZXhdO1xyXG4gICAgICAgIGlmIChjaGlsZFZOb2RlLnRhZ05hbWUgPT09ICdpbWcnKSB7XHJcbiAgICAgICAgICBsZXQgYmFzZTY0U3RyaW5nO1xyXG4gICAgICAgICAgY29uc3QgaW1hZ2VTb3VyY2UgPSBjaGlsZFZOb2RlLnByb3BlcnRpZXMuc3JjO1xyXG4gICAgICAgICAgaWYgKGlzVmFsaWRVcmwoaW1hZ2VTb3VyY2UpKSB7XHJcbiAgICAgICAgICAgIGJhc2U2NFN0cmluZyA9IGF3YWl0IGltYWdlVG9CYXNlNjQoaW1hZ2VTb3VyY2UpLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuaW5nKGBza2lwcGluZyBpbWFnZSBkb3dubG9hZCBhbmQgY29udmVyc2lvbiBkdWUgdG8gJHtlcnJvcn1gKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmFzZTY0U3RyaW5nICYmIG1pbWVUeXBlcy5sb29rdXAoaW1hZ2VTb3VyY2UpKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRWTm9kZS5wcm9wZXJ0aWVzLnNyYyA9IGBkYXRhOiR7bWltZVR5cGVzLmxvb2t1cChcclxuICAgICAgICAgICAgICAgIGltYWdlU291cmNlXHJcbiAgICAgICAgICAgICAgKX07YmFzZTY0LCAke2Jhc2U2NFN0cmluZ31gO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGUsIHByZWZlci1kZXN0cnVjdHVyaW5nXHJcbiAgICAgICAgICAgIGJhc2U2NFN0cmluZyA9IGltYWdlU291cmNlLm1hdGNoKC9eZGF0YTooW0EtWmEtei0rXFwvXSspO2Jhc2U2NCwoLispJC8pWzJdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShkZWNvZGVVUklDb21wb25lbnQoYmFzZTY0U3RyaW5nKSwgJ2Jhc2U2NCcpO1xyXG4gICAgICAgICAgY29uc3QgaW1hZ2VQcm9wZXJ0aWVzID0gc2l6ZU9mKGltYWdlQnVmZmVyKTtcclxuXHJcbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMubWF4aW11bVdpZHRoID1cclxuICAgICAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm1heGltdW1XaWR0aCB8fCBkb2N4RG9jdW1lbnRJbnN0YW5jZS5hdmFpbGFibGVEb2N1bWVudFNwYWNlO1xyXG4gICAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm9yaWdpbmFsV2lkdGggPSBpbWFnZVByb3BlcnRpZXMud2lkdGg7XHJcbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMub3JpZ2luYWxIZWlnaHQgPSBpbWFnZVByb3BlcnRpZXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGNvbXB1dGVJbWFnZURpbWVuc2lvbnMoY2hpbGRWTm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnVuT3JIeXBlcmxpbmtGcmFnbWVudHMgPSBhd2FpdCBidWlsZFJ1bk9ySHlwZXJMaW5rKFxyXG4gICAgICAgICAgY2hpbGRWTm9kZSxcclxuICAgICAgICAgIGlzVk5vZGUoY2hpbGRWTm9kZSkgJiYgY2hpbGRWTm9kZS50YWdOYW1lID09PSAnaW1nJ1xyXG4gICAgICAgICAgICA/IHsgLi4ubW9kaWZpZWRBdHRyaWJ1dGVzLCB0eXBlOiAncGljdHVyZScgfVxyXG4gICAgICAgICAgICA6IG1vZGlmaWVkQXR0cmlidXRlcyxcclxuICAgICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydW5Pckh5cGVybGlua0ZyYWdtZW50cykpIHtcclxuICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuICAgICAgICAgICAgaXRlcmF0b3JJbmRleCA8IHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgaXRlcmF0b3JJbmRleCsrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgcnVuT3JIeXBlcmxpbmtGcmFnbWVudCA9IHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnRzW2l0ZXJhdG9ySW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgcGFyYWdyYXBoRnJhZ21lbnQuaW1wb3J0KHJ1bk9ySHlwZXJsaW5rRnJhZ21lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocnVuT3JIeXBlcmxpbmtGcmFnbWVudHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBJbiBjYXNlIHBhcmFncmFwaHMgaGFzIHRvIGJlIHJlbmRlcmVkIHdoZXJlIHZUZXh0IGlzIHByZXNlbnQuIEVnLiB0YWJsZS1jZWxsXHJcbiAgICAvLyBPciBpbiBjYXNlIHRoZSB2Tm9kZSBpcyBzb21ldGhpbmcgbGlrZSBpbWdcclxuICAgIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS50YWdOYW1lID09PSAnaW1nJykge1xyXG4gICAgICBjb25zdCBpbWFnZVNvdXJjZSA9IHZOb2RlLnByb3BlcnRpZXMuc3JjO1xyXG4gICAgICBsZXQgYmFzZTY0U3RyaW5nID0gaW1hZ2VTb3VyY2U7XHJcbiAgICAgIGlmIChpc1ZhbGlkVXJsKGltYWdlU291cmNlKSkge1xyXG4gICAgICAgIGJhc2U2NFN0cmluZyA9IGF3YWl0IGltYWdlVG9CYXNlNjQoaW1hZ2VTb3VyY2UpLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUud2FybmluZyhgc2tpcHBpbmcgaW1hZ2UgZG93bmxvYWQgYW5kIGNvbnZlcnNpb24gZHVlIHRvICR7ZXJyb3J9YCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChiYXNlNjRTdHJpbmcgJiYgbWltZVR5cGVzLmxvb2t1cChpbWFnZVNvdXJjZSkpIHtcclxuICAgICAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3JjID0gYGRhdGE6JHttaW1lVHlwZXMubG9va3VwKGltYWdlU291cmNlKX07YmFzZTY0LCAke2Jhc2U2NFN0cmluZ31gO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYXJhZ3JhcGhGcmFnbWVudC51cCgpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGhGcmFnbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlLCBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xyXG4gICAgICAgIGJhc2U2NFN0cmluZyA9IGJhc2U2NFN0cmluZy5tYXRjaCgvXmRhdGE6KFtBLVphLXotK1xcL10rKTtiYXNlNjQsKC4rKSQvKVsyXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShkZWNvZGVVUklDb21wb25lbnQoYmFzZTY0U3RyaW5nKSwgJ2Jhc2U2NCcpO1xyXG4gICAgICBjb25zdCBpbWFnZVByb3BlcnRpZXMgPSBzaXplT2YoaW1hZ2VCdWZmZXIpO1xyXG5cclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm1heGltdW1XaWR0aCA9XHJcbiAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm1heGltdW1XaWR0aCB8fCBkb2N4RG9jdW1lbnRJbnN0YW5jZS5hdmFpbGFibGVEb2N1bWVudFNwYWNlO1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMub3JpZ2luYWxXaWR0aCA9IGltYWdlUHJvcGVydGllcy53aWR0aDtcclxuICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLm9yaWdpbmFsSGVpZ2h0ID0gaW1hZ2VQcm9wZXJ0aWVzLmhlaWdodDtcclxuXHJcbiAgICAgIGNvbXB1dGVJbWFnZURpbWVuc2lvbnModk5vZGUsIG1vZGlmaWVkQXR0cmlidXRlcyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBydW5GcmFnbWVudHMgPSBhd2FpdCBidWlsZFJ1bk9yUnVucyh2Tm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSk7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShydW5GcmFnbWVudHMpKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBydW5GcmFnbWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgcnVuRnJhZ21lbnQgPSBydW5GcmFnbWVudHNbaW5kZXhdO1xyXG5cclxuICAgICAgICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocnVuRnJhZ21lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhZ3JhcGhGcmFnbWVudC5pbXBvcnQocnVuRnJhZ21lbnRzKTtcclxuICAgIH1cclxuICB9XHJcbiAgcGFyYWdyYXBoRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIHBhcmFncmFwaEZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRHcmlkU3BhbkZyYWdtZW50ID0gKHNwYW5WYWx1ZSkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pXHJcbiAgICAuZWxlKCdAdycsICdncmlkU3BhbicpXHJcbiAgICAuYXR0KCdAdycsICd2YWwnLCBzcGFuVmFsdWUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkVGFibGVDZWxsU3BhY2luZyA9IChjZWxsU3BhY2luZyA9IDApID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAndGJsQ2VsbFNwYWNpbmcnKVxyXG4gICAgLmF0dCgnQHcnLCAndycsIGNlbGxTcGFjaW5nKVxyXG4gICAgLmF0dCgnQHcnLCAndHlwZScsICdkeGEnKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZFRhYmxlQ2VsbEJvcmRlcnMgPSAodGFibGVDZWxsQm9yZGVyKSA9PiB7XHJcbiAgY29uc3QgdGFibGVDZWxsQm9yZGVyc0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXHJcbiAgICAnQHcnLFxyXG4gICAgJ3RjQm9yZGVycydcclxuICApO1xyXG5cclxuICBjb25zdCB7IGNvbG9yLCBzdHJva2UsIC4uLmJvcmRlcnMgfSA9IHRhYmxlQ2VsbEJvcmRlcjtcclxuICBPYmplY3Qua2V5cyhib3JkZXJzKS5mb3JFYWNoKChib3JkZXIpID0+IHtcclxuICAgIGlmICh0YWJsZUNlbGxCb3JkZXJbYm9yZGVyXSkge1xyXG4gICAgICBjb25zdCBib3JkZXJGcmFnbWVudCA9IGJ1aWxkQm9yZGVyKGJvcmRlciwgdGFibGVDZWxsQm9yZGVyW2JvcmRlcl0sIDAsIGNvbG9yLCBzdHJva2UpO1xyXG4gICAgICB0YWJsZUNlbGxCb3JkZXJzRnJhZ21lbnQuaW1wb3J0KGJvcmRlckZyYWdtZW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdGFibGVDZWxsQm9yZGVyc0ZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiB0YWJsZUNlbGxCb3JkZXJzRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFRhYmxlQ2VsbFdpZHRoID0gKHRhYmxlQ2VsbFdpZHRoKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3JywgJ3RjVycpXHJcbiAgICAuYXR0KCdAdycsICd3JywgZml4dXBDb2x1bW5XaWR0aCh0YWJsZUNlbGxXaWR0aCkpXHJcbiAgICAuYXR0KCdAdycsICd0eXBlJywgJ2R4YScpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkVGFibGVDZWxsUHJvcGVydGllcyA9IChhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXHJcbiAgICAnQHcnLFxyXG4gICAgJ3RjUHInXHJcbiAgKTtcclxuICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmRDb2xvcic6XHJcbiAgICAgICAgICBjb25zdCBzaGFkaW5nRnJhZ21lbnQgPSBidWlsZFNoYWRpbmcoYXR0cmlidXRlc1trZXldKTtcclxuICAgICAgICAgIHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQoc2hhZGluZ0ZyYWdtZW50KTtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMuYmFja2dyb3VuZENvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndmVydGljYWxBbGlnbic6XHJcbiAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEFsaWdubWVudEZyYWdtZW50ID0gYnVpbGRWZXJ0aWNhbEFsaWdubWVudChhdHRyaWJ1dGVzW2tleV0pO1xyXG4gICAgICAgICAgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydCh2ZXJ0aWNhbEFsaWdubWVudEZyYWdtZW50KTtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMudmVydGljYWxBbGlnbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2NvbFNwYW4nOlxyXG4gICAgICAgICAgY29uc3QgZ3JpZFNwYW5GcmFnbWVudCA9IGJ1aWxkR3JpZFNwYW5GcmFnbWVudChhdHRyaWJ1dGVzW2tleV0pO1xyXG4gICAgICAgICAgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydChncmlkU3BhbkZyYWdtZW50KTtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMuY29sU3BhbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RhYmxlQ2VsbEJvcmRlcic6XHJcbiAgICAgICAgICBjb25zdCB0YWJsZUNlbGxCb3JkZXJGcmFnbWVudCA9IGJ1aWxkVGFibGVDZWxsQm9yZGVycyhhdHRyaWJ1dGVzW2tleV0pO1xyXG4gICAgICAgICAgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydCh0YWJsZUNlbGxCb3JkZXJGcmFnbWVudCk7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3Jvd1NwYW4nOlxyXG4gICAgICAgICAgY29uc3QgdmVydGljYWxNZXJnZUZyYWdtZW50ID0gYnVpbGRWZXJ0aWNhbE1lcmdlKGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHZlcnRpY2FsTWVyZ2VGcmFnbWVudCk7XHJcblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMucm93U3BhbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3dpZHRoJzpcclxuICAgICAgICAgIGNvbnN0IHdpZHRoRnJhZ21lbnQgPSBidWlsZFRhYmxlQ2VsbFdpZHRoKGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KHdpZHRoRnJhZ21lbnQpO1xyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMud2lkdGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgZml4dXBUYWJsZUNlbGxCb3JkZXIgPSAodk5vZGUsIGF0dHJpYnV0ZXMpID0+IHtcclxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUsICdib3JkZXInKSkge1xyXG4gICAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuYm9yZGVyID09PSAnbm9uZScgfHwgdk5vZGUucHJvcGVydGllcy5zdHlsZS5ib3JkZXIgPT09IDApIHtcclxuICAgICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7fTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxyXG4gICAgICBjb25zdCBbYm9yZGVyU2l6ZSwgYm9yZGVyU3Ryb2tlLCBib3JkZXJDb2xvcl0gPSBjc3NCb3JkZXJQYXJzZXIoXHJcbiAgICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZS5ib3JkZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyID0ge1xyXG4gICAgICAgIHRvcDogYm9yZGVyU2l6ZSxcclxuICAgICAgICBsZWZ0OiBib3JkZXJTaXplLFxyXG4gICAgICAgIGJvdHRvbTogYm9yZGVyU2l6ZSxcclxuICAgICAgICByaWdodDogYm9yZGVyU2l6ZSxcclxuICAgICAgICBjb2xvcjogYm9yZGVyQ29sb3IsXHJcbiAgICAgICAgc3Ryb2tlOiBib3JkZXJTdHJva2UsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItdG9wJ10gJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXRvcCddID09PSAnMCcpIHtcclxuICAgIGF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyID0ge1xyXG4gICAgICAuLi5hdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlcixcclxuICAgICAgdG9wOiAwLFxyXG4gICAgfTtcclxuICB9IGVsc2UgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci10b3AnXSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItdG9wJ10gIT09ICcwJykge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXHJcbiAgICBjb25zdCBbYm9yZGVyU2l6ZSwgYm9yZGVyU3Ryb2tlLCBib3JkZXJDb2xvcl0gPSBjc3NCb3JkZXJQYXJzZXIoXHJcbiAgICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci10b3AnXVxyXG4gICAgKTtcclxuICAgIGF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyID0ge1xyXG4gICAgICAuLi5hdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlcixcclxuICAgICAgdG9wOiBib3JkZXJTaXplLFxyXG4gICAgICBjb2xvcjogYm9yZGVyQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogYm9yZGVyU3Ryb2tlLFxyXG4gICAgfTtcclxuICB9XHJcbiAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci1sZWZ0J10gJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWxlZnQnXSA9PT0gJzAnKSB7XHJcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcclxuICAgICAgLi4uYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIsXHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoXHJcbiAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItbGVmdCddICYmXHJcbiAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItbGVmdCddICE9PSAnMCdcclxuICApIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxyXG4gICAgY29uc3QgW2JvcmRlclNpemUsIGJvcmRlclN0cm9rZSwgYm9yZGVyQ29sb3JdID0gY3NzQm9yZGVyUGFyc2VyKFxyXG4gICAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItbGVmdCddXHJcbiAgICApO1xyXG4gICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XHJcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxyXG4gICAgICBsZWZ0OiBib3JkZXJTaXplLFxyXG4gICAgICBjb2xvcjogYm9yZGVyQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogYm9yZGVyU3Ryb2tlLFxyXG4gICAgfTtcclxuICB9XHJcbiAgaWYgKHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci1ib3R0b20nXSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItYm90dG9tJ10gPT09ICcwJykge1xyXG4gICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XHJcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxyXG4gICAgICBib3R0b206IDAsXHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoXHJcbiAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItYm90dG9tJ10gJiZcclxuICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci1ib3R0b20nXSAhPT0gJzAnXHJcbiAgKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcclxuICAgIGNvbnN0IFtib3JkZXJTaXplLCBib3JkZXJTdHJva2UsIGJvcmRlckNvbG9yXSA9IGNzc0JvcmRlclBhcnNlcihcclxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLWJvdHRvbSddXHJcbiAgICApO1xyXG4gICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XHJcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxyXG4gICAgICBib3R0b206IGJvcmRlclNpemUsXHJcbiAgICAgIGNvbG9yOiBib3JkZXJDb2xvcixcclxuICAgICAgc3Ryb2tlOiBib3JkZXJTdHJva2UsXHJcbiAgICB9O1xyXG4gIH1cclxuICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXJpZ2h0J10gJiYgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXJpZ2h0J10gPT09ICcwJykge1xyXG4gICAgYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB7XHJcbiAgICAgIC4uLmF0dHJpYnV0ZXMudGFibGVDZWxsQm9yZGVyLFxyXG4gICAgICByaWdodDogMCxcclxuICAgIH07XHJcbiAgfSBlbHNlIGlmIChcclxuICAgIHZOb2RlLnByb3BlcnRpZXMuc3R5bGVbJ2JvcmRlci1yaWdodCddICYmXHJcbiAgICB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydib3JkZXItcmlnaHQnXSAhPT0gJzAnXHJcbiAgKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcclxuICAgIGNvbnN0IFtib3JkZXJTaXplLCBib3JkZXJTdHJva2UsIGJvcmRlckNvbG9yXSA9IGNzc0JvcmRlclBhcnNlcihcclxuICAgICAgdk5vZGUucHJvcGVydGllcy5zdHlsZVsnYm9yZGVyLXJpZ2h0J11cclxuICAgICk7XHJcbiAgICBhdHRyaWJ1dGVzLnRhYmxlQ2VsbEJvcmRlciA9IHtcclxuICAgICAgLi4uYXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIsXHJcbiAgICAgIHJpZ2h0OiBib3JkZXJTaXplLFxyXG4gICAgICBjb2xvcjogYm9yZGVyQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogYm9yZGVyU3Ryb2tlLFxyXG4gICAgfTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFRhYmxlQ2VsbCA9IGFzeW5jICh2Tm9kZSwgYXR0cmlidXRlcywgcm93U3Bhbk1hcCwgY29sdW1uSW5kZXgsIGRvY3hEb2N1bWVudEluc3RhbmNlKSA9PiB7XHJcbiAgY29uc3QgdGFibGVDZWxsRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAndGMnKTtcclxuXHJcbiAgbGV0IG1vZGlmaWVkQXR0cmlidXRlcyA9IHsgLi4uYXR0cmlidXRlcyB9O1xyXG4gIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5yb3dTcGFuKSB7XHJcbiAgICAgIHJvd1NwYW5NYXAuc2V0KGNvbHVtbkluZGV4LmluZGV4LCB7IHJvd1NwYW46IHZOb2RlLnByb3BlcnRpZXMucm93U3BhbiAtIDEsIGNvbFNwYW46IDAgfSk7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5yb3dTcGFuID0gJ3Jlc3RhcnQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJldmlvdXNTcGFuT2JqZWN0ID0gcm93U3Bhbk1hcC5nZXQoY29sdW1uSW5kZXguaW5kZXgpO1xyXG4gICAgICByb3dTcGFuTWFwLnNldChcclxuICAgICAgICBjb2x1bW5JbmRleC5pbmRleCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLW9iamVjdC1zcHJlYWRcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBwcmV2aW91c1NwYW5PYmplY3QsIHtcclxuICAgICAgICAgIHJvd1NwYW46IDAsXHJcbiAgICAgICAgICBjb2xTcGFuOiAocHJldmlvdXNTcGFuT2JqZWN0ICYmIHByZXZpb3VzU3Bhbk9iamVjdC5jb2xTcGFuKSB8fCAwLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHZOb2RlLnByb3BlcnRpZXMuY29sU3BhbiB8fFxyXG4gICAgICAodk5vZGUucHJvcGVydGllcy5zdHlsZSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydjb2x1bW4tc3BhbiddKVxyXG4gICAgKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5jb2xTcGFuID1cclxuICAgICAgICB2Tm9kZS5wcm9wZXJ0aWVzLmNvbFNwYW4gfHxcclxuICAgICAgICAodk5vZGUucHJvcGVydGllcy5zdHlsZSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydjb2x1bW4tc3BhbiddKTtcclxuICAgICAgY29uc3QgcHJldmlvdXNTcGFuT2JqZWN0ID0gcm93U3Bhbk1hcC5nZXQoY29sdW1uSW5kZXguaW5kZXgpO1xyXG4gICAgICByb3dTcGFuTWFwLnNldChcclxuICAgICAgICBjb2x1bW5JbmRleC5pbmRleCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLW9iamVjdC1zcHJlYWRcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBwcmV2aW91c1NwYW5PYmplY3QsIHtcclxuICAgICAgICAgIGNvbFNwYW46IHBhcnNlSW50KG1vZGlmaWVkQXR0cmlidXRlcy5jb2xTcGFuKSB8fCAwLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbHVtbkluZGV4LmluZGV4ICs9IHBhcnNlSW50KG1vZGlmaWVkQXR0cmlidXRlcy5jb2xTcGFuKSAtIDE7XHJcbiAgICB9XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZSkge1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgICAgLi4ubW9kaWZpZWRBdHRyaWJ1dGVzLFxyXG4gICAgICAgIC4uLm1vZGlmaWVkU3R5bGVBdHRyaWJ1dGVzQnVpbGRlcih2Tm9kZSwgYXR0cmlidXRlcyksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmaXh1cFRhYmxlQ2VsbEJvcmRlcih2Tm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzKTtcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgdGFibGVDZWxsUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGRUYWJsZUNlbGxQcm9wZXJ0aWVzKG1vZGlmaWVkQXR0cmlidXRlcyk7XHJcbiAgdGFibGVDZWxsRnJhZ21lbnQuaW1wb3J0KHRhYmxlQ2VsbFByb3BlcnRpZXNGcmFnbWVudCk7XHJcbiAgaWYgKHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdk5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkVk5vZGUgPSB2Tm9kZS5jaGlsZHJlbltpbmRleF07XHJcbiAgICAgIGlmIChpc1ZOb2RlKGNoaWxkVk5vZGUpICYmIGNoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ2ltZycpIHtcclxuICAgICAgICBjb25zdCBpbWFnZUZyYWdtZW50ID0gYXdhaXQgYnVpbGRJbWFnZShcclxuICAgICAgICAgIGRvY3hEb2N1bWVudEluc3RhbmNlLFxyXG4gICAgICAgICAgY2hpbGRWTm9kZSxcclxuICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5tYXhpbXVtV2lkdGhcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbWFnZUZyYWdtZW50KSB7XHJcbiAgICAgICAgICB0YWJsZUNlbGxGcmFnbWVudC5pbXBvcnQoaW1hZ2VGcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGlzVk5vZGUoY2hpbGRWTm9kZSkgJiYgY2hpbGRWTm9kZS50YWdOYW1lID09PSAnZmlndXJlJykge1xyXG4gICAgICAgIGlmICh2Tm9kZUhhc0NoaWxkcmVuKGNoaWxkVk5vZGUpKSB7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcclxuICAgICAgICAgIGZvciAobGV0IGl0ZXJhdG9ySW5kZXggPSAwOyBpdGVyYXRvckluZGV4IDwgY2hpbGRWTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGl0ZXJhdG9ySW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBncmFuZENoaWxkVk5vZGUgPSBjaGlsZFZOb2RlLmNoaWxkcmVuW2l0ZXJhdG9ySW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZ3JhbmRDaGlsZFZOb2RlLnRhZ05hbWUgPT09ICdpbWcnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGcmFnbWVudCA9IGF3YWl0IGJ1aWxkSW1hZ2UoXHJcbiAgICAgICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy5tYXhpbXVtV2lkdGhcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChpbWFnZUZyYWdtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0YWJsZUNlbGxGcmFnbWVudC5pbXBvcnQoaW1hZ2VGcmFnbWVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGlzVk5vZGUoY2hpbGRWTm9kZSkgJiYgWyd1bCcsICdvbCddLmluY2x1ZGVzKGNoaWxkVk5vZGUudGFnTmFtZSkpIHtcclxuICAgICAgICAvLyByZW5kZXIgbGlzdCBpbiB0YWJsZVxyXG4gICAgICAgIGlmICh2Tm9kZUhhc0NoaWxkcmVuKGNoaWxkVk5vZGUpKSB7XHJcbiAgICAgICAgICBhd2FpdCBidWlsZExpc3QoY2hpbGRWTm9kZSwgZG9jeERvY3VtZW50SW5zdGFuY2UsIHRhYmxlQ2VsbEZyYWdtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoRnJhZ21lbnQgPSBhd2FpdCBidWlsZFBhcmFncmFwaChcclxuICAgICAgICAgIGNoaWxkVk5vZGUsXHJcbiAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRhYmxlQ2VsbEZyYWdtZW50LmltcG9ydChwYXJhZ3JhcGhGcmFnbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYnVpbGRpbmcgd2l0aCBidWlsZFBhcmFncmFwaCgpIGlzbid0IHdvcmtpbmdcclxuICAgIGNvbnN0IHBhcmFncmFwaEZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgICAuZWxlKCdAdycsICdwJylcclxuICAgICAgLnVwKCk7XHJcbiAgICB0YWJsZUNlbGxGcmFnbWVudC5pbXBvcnQocGFyYWdyYXBoRnJhZ21lbnQpO1xyXG4gIH1cclxuICB0YWJsZUNlbGxGcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gdGFibGVDZWxsRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFJvd1NwYW5DZWxsID0gKHJvd1NwYW5NYXAsIGNvbHVtbkluZGV4LCBhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3Qgcm93U3BhbkNlbGxGcmFnbWVudHMgPSBbXTtcclxuICBsZXQgc3Bhbk9iamVjdCA9IHJvd1NwYW5NYXAuZ2V0KGNvbHVtbkluZGV4LmluZGV4KTtcclxuICB3aGlsZSAoc3Bhbk9iamVjdCAmJiBzcGFuT2JqZWN0LnJvd1NwYW4pIHtcclxuICAgIGNvbnN0IHJvd1NwYW5DZWxsRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAndGMnKTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZFRhYmxlQ2VsbFByb3BlcnRpZXMoe1xyXG4gICAgICAuLi5hdHRyaWJ1dGVzLFxyXG4gICAgICByb3dTcGFuOiAnY29udGludWUnLFxyXG4gICAgICBjb2xTcGFuOiBzcGFuT2JqZWN0LmNvbFNwYW4gPyBzcGFuT2JqZWN0LmNvbFNwYW4gOiAwLFxyXG4gICAgfSk7XHJcbiAgICByb3dTcGFuQ2VsbEZyYWdtZW50LmltcG9ydCh0YWJsZUNlbGxQcm9wZXJ0aWVzRnJhZ21lbnQpO1xyXG5cclxuICAgIGNvbnN0IHBhcmFncmFwaEZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgICAuZWxlKCdAdycsICdwJylcclxuICAgICAgLnVwKCk7XHJcbiAgICByb3dTcGFuQ2VsbEZyYWdtZW50LmltcG9ydChwYXJhZ3JhcGhGcmFnbWVudCk7XHJcbiAgICByb3dTcGFuQ2VsbEZyYWdtZW50LnVwKCk7XHJcblxyXG4gICAgcm93U3BhbkNlbGxGcmFnbWVudHMucHVzaChyb3dTcGFuQ2VsbEZyYWdtZW50KTtcclxuXHJcbiAgICBpZiAoc3Bhbk9iamVjdC5yb3dTcGFuIC0gMSA9PT0gMCkge1xyXG4gICAgICByb3dTcGFuTWFwLmRlbGV0ZShjb2x1bW5JbmRleC5pbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb3dTcGFuTWFwLnNldChjb2x1bW5JbmRleC5pbmRleCwge1xyXG4gICAgICAgIHJvd1NwYW46IHNwYW5PYmplY3Qucm93U3BhbiAtIDEsXHJcbiAgICAgICAgY29sU3Bhbjogc3Bhbk9iamVjdC5jb2xTcGFuIHx8IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29sdW1uSW5kZXguaW5kZXggKz0gc3Bhbk9iamVjdC5jb2xTcGFuIHx8IDE7XHJcbiAgICBzcGFuT2JqZWN0ID0gcm93U3Bhbk1hcC5nZXQoY29sdW1uSW5kZXguaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJvd1NwYW5DZWxsRnJhZ21lbnRzO1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRUYWJsZVJvd1Byb3BlcnRpZXMgPSAoYXR0cmlidXRlcykgPT4ge1xyXG4gIGNvbnN0IHRhYmxlUm93UHJvcGVydGllc0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXHJcbiAgICAnQHcnLFxyXG4gICAgJ3RyUHInXHJcbiAgKTtcclxuICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgIGNhc2UgJ3RhYmxlUm93SGVpZ2h0JzpcclxuICAgICAgICAgIGNvbnN0IHRhYmxlUm93SGVpZ2h0RnJhZ21lbnQgPSBidWlsZFRhYmxlUm93SGVpZ2h0KGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVSb3dIZWlnaHRGcmFnbWVudCk7XHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLnRhYmxlUm93SGVpZ2h0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncm93Q2FudFNwbGl0JzpcclxuICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnJvd0NhbnRTcGxpdCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYW50U3BsaXRGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgICAgICAgICAgICAuZWxlKCdAdycsICdjYW50U3BsaXQnKVxyXG4gICAgICAgICAgICAgIC51cCgpO1xyXG4gICAgICAgICAgICB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQoY2FudFNwbGl0RnJhZ21lbnQpO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMucm93Q2FudFNwbGl0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudC51cCgpO1xyXG4gIHJldHVybiB0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudDtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkVGFibGVSb3cgPSBhc3luYyAodk5vZGUsIGF0dHJpYnV0ZXMsIHJvd1NwYW5NYXAsIGRvY3hEb2N1bWVudEluc3RhbmNlKSA9PiB7XHJcbiAgY29uc3QgdGFibGVSb3dGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICd0cicpO1xyXG4gIGNvbnN0IG1vZGlmaWVkQXR0cmlidXRlcyA9IHsgLi4uYXR0cmlidXRlcyB9O1xyXG4gIGlmIChpc1ZOb2RlKHZOb2RlKSAmJiB2Tm9kZS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAvLyBGSVhNRTogZmluZCBhIGJldHRlciB3YXkgdG8gZ2V0IHJvdyBoZWlnaHQgZnJvbSBjZWxsIHN0eWxlXHJcbiAgICBpZiAoXHJcbiAgICAgICh2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlICYmIHZOb2RlLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0KSB8fFxyXG4gICAgICAodk5vZGUuY2hpbGRyZW5bMF0gJiZcclxuICAgICAgICBpc1ZOb2RlKHZOb2RlLmNoaWxkcmVuWzBdKSAmJlxyXG4gICAgICAgIHZOb2RlLmNoaWxkcmVuWzBdLnByb3BlcnRpZXMuc3R5bGUgJiZcclxuICAgICAgICB2Tm9kZS5jaGlsZHJlblswXS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodClcclxuICAgICkge1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMudGFibGVSb3dIZWlnaHQgPSBmaXh1cFJvd0hlaWdodChcclxuICAgICAgICAodk5vZGUucHJvcGVydGllcy5zdHlsZSAmJiB2Tm9kZS5wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCkgfHxcclxuICAgICAgICAgICh2Tm9kZS5jaGlsZHJlblswXSAmJlxyXG4gICAgICAgICAgaXNWTm9kZSh2Tm9kZS5jaGlsZHJlblswXSkgJiZcclxuICAgICAgICAgIHZOb2RlLmNoaWxkcmVuWzBdLnByb3BlcnRpZXMuc3R5bGUgJiZcclxuICAgICAgICAgIHZOb2RlLmNoaWxkcmVuWzBdLnByb3BlcnRpZXMuc3R5bGUuaGVpZ2h0XHJcbiAgICAgICAgICAgID8gdk5vZGUuY2hpbGRyZW5bMF0ucHJvcGVydGllcy5zdHlsZS5oZWlnaHRcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodk5vZGUucHJvcGVydGllcy5zdHlsZSkge1xyXG4gICAgICBmaXh1cFRhYmxlQ2VsbEJvcmRlcih2Tm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHRhYmxlUm93UHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGRUYWJsZVJvd1Byb3BlcnRpZXMobW9kaWZpZWRBdHRyaWJ1dGVzKTtcclxuICB0YWJsZVJvd0ZyYWdtZW50LmltcG9ydCh0YWJsZVJvd1Byb3BlcnRpZXNGcmFnbWVudCk7XHJcblxyXG4gIGNvbnN0IGNvbHVtbkluZGV4ID0geyBpbmRleDogMCB9O1xyXG5cclxuICBpZiAodk5vZGVIYXNDaGlsZHJlbih2Tm9kZSkpIHtcclxuICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHZOb2RlLmNoaWxkcmVuLmZpbHRlcigoY2hpbGRWTm9kZSkgPT5cclxuICAgICAgWyd0ZCcsICd0aCddLmluY2x1ZGVzKGNoaWxkVk5vZGUudGFnTmFtZSlcclxuICAgICk7XHJcbiAgICBjb25zdCBtYXhpbXVtQ29sdW1uV2lkdGggPSBkb2N4RG9jdW1lbnRJbnN0YW5jZS5hdmFpbGFibGVEb2N1bWVudFNwYWNlIC8gdGFibGVDb2x1bW5zLmxlbmd0aDtcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlQ29sdW1ucykge1xyXG4gICAgICBjb25zdCByb3dTcGFuQ2VsbEZyYWdtZW50cyA9IGJ1aWxkUm93U3BhbkNlbGwocm93U3Bhbk1hcCwgY29sdW1uSW5kZXgsIG1vZGlmaWVkQXR0cmlidXRlcyk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd1NwYW5DZWxsRnJhZ21lbnRzKSkge1xyXG4gICAgICAgIGZvciAobGV0IGl0ZXJhdG9ySW5kZXggPSAwOyBpdGVyYXRvckluZGV4IDwgcm93U3BhbkNlbGxGcmFnbWVudHMubGVuZ3RoOyBpdGVyYXRvckluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYW5DZWxsRnJhZ21lbnQgPSByb3dTcGFuQ2VsbEZyYWdtZW50c1tpdGVyYXRvckluZGV4XTtcclxuXHJcbiAgICAgICAgICB0YWJsZVJvd0ZyYWdtZW50LmltcG9ydChyb3dTcGFuQ2VsbEZyYWdtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFibGVDZWxsRnJhZ21lbnQgPSBhd2FpdCBidWlsZFRhYmxlQ2VsbChcclxuICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgeyAuLi5tb2RpZmllZEF0dHJpYnV0ZXMsIG1heGltdW1XaWR0aDogbWF4aW11bUNvbHVtbldpZHRoIH0sXHJcbiAgICAgICAgcm93U3Bhbk1hcCxcclxuICAgICAgICBjb2x1bW5JbmRleCxcclxuICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICApO1xyXG4gICAgICBjb2x1bW5JbmRleC5pbmRleCsrO1xyXG5cclxuICAgICAgdGFibGVSb3dGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsRnJhZ21lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGNvbHVtbkluZGV4LmluZGV4IDwgcm93U3Bhbk1hcC5zaXplKSB7XHJcbiAgICBjb25zdCByb3dTcGFuQ2VsbEZyYWdtZW50cyA9IGJ1aWxkUm93U3BhbkNlbGwocm93U3Bhbk1hcCwgY29sdW1uSW5kZXgsIG1vZGlmaWVkQXR0cmlidXRlcyk7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dTcGFuQ2VsbEZyYWdtZW50cykpIHtcclxuICAgICAgZm9yIChsZXQgaXRlcmF0b3JJbmRleCA9IDA7IGl0ZXJhdG9ySW5kZXggPCByb3dTcGFuQ2VsbEZyYWdtZW50cy5sZW5ndGg7IGl0ZXJhdG9ySW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IHJvd1NwYW5DZWxsRnJhZ21lbnQgPSByb3dTcGFuQ2VsbEZyYWdtZW50c1tpdGVyYXRvckluZGV4XTtcclxuXHJcbiAgICAgICAgdGFibGVSb3dGcmFnbWVudC5pbXBvcnQocm93U3BhbkNlbGxGcmFnbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRhYmxlUm93RnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIHRhYmxlUm93RnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFRhYmxlR3JpZENvbCA9IChncmlkV2lkdGgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAnZ3JpZENvbCcpXHJcbiAgICAuYXR0KCdAdycsICd3JywgU3RyaW5nKGdyaWRXaWR0aCkpO1xyXG5cclxuY29uc3QgYnVpbGRUYWJsZUdyaWQgPSAodk5vZGUsIGF0dHJpYnV0ZXMpID0+IHtcclxuICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICd0YmxHcmlkJyk7XHJcbiAgaWYgKHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XHJcbiAgICBjb25zdCBncmlkQ29sdW1ucyA9IHZOb2RlLmNoaWxkcmVuLmZpbHRlcigoY2hpbGRWTm9kZSkgPT4gY2hpbGRWTm9kZS50YWdOYW1lID09PSAnY29sJyk7XHJcbiAgICBjb25zdCBncmlkV2lkdGggPSBhdHRyaWJ1dGVzLm1heGltdW1XaWR0aCAvIGdyaWRDb2x1bW5zLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZ3JpZENvbHVtbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlR3JpZENvbEZyYWdtZW50ID0gYnVpbGRUYWJsZUdyaWRDb2woZ3JpZFdpZHRoKTtcclxuICAgICAgdGFibGVHcmlkRnJhZ21lbnQuaW1wb3J0KHRhYmxlR3JpZENvbEZyYWdtZW50KTtcclxuICAgIH1cclxuICB9XHJcbiAgdGFibGVHcmlkRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIHRhYmxlR3JpZEZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRUYWJsZUdyaWRGcm9tVGFibGVSb3cgPSAodk5vZGUsIGF0dHJpYnV0ZXMpID0+IHtcclxuICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICd0YmxHcmlkJyk7XHJcbiAgaWYgKHZOb2RlSGFzQ2hpbGRyZW4odk5vZGUpKSB7XHJcbiAgICBjb25zdCBudW1iZXJPZkdyaWRDb2x1bW5zID0gdk5vZGUuY2hpbGRyZW4ucmVkdWNlKChhY2N1bXVsYXRvciwgY2hpbGRWTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBjb2xTcGFuID1cclxuICAgICAgICBjaGlsZFZOb2RlLnByb3BlcnRpZXMuY29sU3BhbiB8fFxyXG4gICAgICAgIChjaGlsZFZOb2RlLnByb3BlcnRpZXMuc3R5bGUgJiYgY2hpbGRWTm9kZS5wcm9wZXJ0aWVzLnN0eWxlWydjb2x1bW4tc3BhbiddKTtcclxuXHJcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIChjb2xTcGFuID8gcGFyc2VJbnQoY29sU3BhbikgOiAxKTtcclxuICAgIH0sIDApO1xyXG4gICAgY29uc3QgZ3JpZFdpZHRoID0gYXR0cmlidXRlcy5tYXhpbXVtV2lkdGggLyBudW1iZXJPZkdyaWRDb2x1bW5zO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZkdyaWRDb2x1bW5zOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlR3JpZENvbEZyYWdtZW50ID0gYnVpbGRUYWJsZUdyaWRDb2woZ3JpZFdpZHRoKTtcclxuICAgICAgdGFibGVHcmlkRnJhZ21lbnQuaW1wb3J0KHRhYmxlR3JpZENvbEZyYWdtZW50KTtcclxuICAgIH1cclxuICB9XHJcbiAgdGFibGVHcmlkRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIHRhYmxlR3JpZEZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRUYWJsZUJvcmRlcnMgPSAodGFibGVCb3JkZXIpID0+IHtcclxuICBjb25zdCB0YWJsZUJvcmRlcnNGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKFxyXG4gICAgJ0B3JyxcclxuICAgICd0YmxCb3JkZXJzJ1xyXG4gICk7XHJcblxyXG4gIGNvbnN0IHsgY29sb3IsIHN0cm9rZSwgLi4uYm9yZGVycyB9ID0gdGFibGVCb3JkZXI7XHJcblxyXG4gIE9iamVjdC5rZXlzKGJvcmRlcnMpLmZvckVhY2goKGJvcmRlcikgPT4ge1xyXG4gICAgaWYgKGJvcmRlcnNbYm9yZGVyXSkge1xyXG4gICAgICBjb25zdCBib3JkZXJGcmFnbWVudCA9IGJ1aWxkQm9yZGVyKGJvcmRlciwgYm9yZGVyc1tib3JkZXJdLCAwLCBjb2xvciwgc3Ryb2tlKTtcclxuICAgICAgdGFibGVCb3JkZXJzRnJhZ21lbnQuaW1wb3J0KGJvcmRlckZyYWdtZW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdGFibGVCb3JkZXJzRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIHRhYmxlQm9yZGVyc0ZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRUYWJsZVdpZHRoID0gKHRhYmxlV2lkdGgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KVxyXG4gICAgLmVsZSgnQHcnLCAndGJsVycpXHJcbiAgICAuYXR0KCdAdycsICd0eXBlJywgJ2R4YScpXHJcbiAgICAuYXR0KCdAdycsICd3JywgU3RyaW5nKHRhYmxlV2lkdGgpKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZENlbGxNYXJnaW4gPSAoc2lkZSwgbWFyZ2luKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSlcclxuICAgIC5lbGUoJ0B3Jywgc2lkZSlcclxuICAgIC5hdHQoJ0B3JywgJ3R5cGUnLCAnZHhhJylcclxuICAgIC5hdHQoJ0B3JywgJ3cnLCBTdHJpbmcobWFyZ2luKSlcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRUYWJsZUNlbGxNYXJnaW5zID0gKG1hcmdpbikgPT4ge1xyXG4gIGNvbnN0IHRhYmxlQ2VsbE1hckZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3OiBuYW1lc3BhY2VzLncgfSB9KS5lbGUoXHJcbiAgICAnQHcnLFxyXG4gICAgJ3RibENlbGxNYXInXHJcbiAgKTtcclxuXHJcbiAgWyd0b3AnLCAnYm90dG9tJ10uZm9yRWFjaCgoc2lkZSkgPT4ge1xyXG4gICAgY29uc3QgbWFyZ2luRnJhZ21lbnQgPSBidWlsZENlbGxNYXJnaW4oc2lkZSwgbWFyZ2luIC8gMik7XHJcbiAgICB0YWJsZUNlbGxNYXJGcmFnbWVudC5pbXBvcnQobWFyZ2luRnJhZ21lbnQpO1xyXG4gIH0pO1xyXG4gIFsnbGVmdCcsICdyaWdodCddLmZvckVhY2goKHNpZGUpID0+IHtcclxuICAgIGNvbnN0IG1hcmdpbkZyYWdtZW50ID0gYnVpbGRDZWxsTWFyZ2luKHNpZGUsIG1hcmdpbik7XHJcbiAgICB0YWJsZUNlbGxNYXJGcmFnbWVudC5pbXBvcnQobWFyZ2luRnJhZ21lbnQpO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gdGFibGVDZWxsTWFyRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFRhYmxlUHJvcGVydGllcyA9IChhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgdGFibGVQcm9wZXJ0aWVzRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZShcclxuICAgICdAdycsXHJcbiAgICAndGJsUHInXHJcbiAgKTtcclxuXHJcbiAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICBjYXNlICd0YWJsZUJvcmRlcic6XHJcbiAgICAgICAgICBjb25zdCB0YWJsZUJvcmRlcnNGcmFnbWVudCA9IGJ1aWxkVGFibGVCb3JkZXJzKGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVCb3JkZXJzRnJhZ21lbnQpO1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXHJcbiAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy50YWJsZUJvcmRlcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RhYmxlQ2VsbFNwYWNpbmcnOlxyXG4gICAgICAgICAgY29uc3QgdGFibGVDZWxsU3BhY2luZ0ZyYWdtZW50ID0gYnVpbGRUYWJsZUNlbGxTcGFjaW5nKGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsU3BhY2luZ0ZyYWdtZW50KTtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMudGFibGVDZWxsU3BhY2luZztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3dpZHRoJzpcclxuICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2tleV0pIHtcclxuICAgICAgICAgICAgY29uc3QgdGFibGVXaWR0aEZyYWdtZW50ID0gYnVpbGRUYWJsZVdpZHRoKGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICAgIHRhYmxlUHJvcGVydGllc0ZyYWdtZW50LmltcG9ydCh0YWJsZVdpZHRoRnJhZ21lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXHJcbiAgICAgICAgICBkZWxldGUgYXR0cmlidXRlcy53aWR0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY29uc3QgdGFibGVDZWxsTWFyZ2luRnJhZ21lbnQgPSBidWlsZFRhYmxlQ2VsbE1hcmdpbnMoMTYwKTtcclxuICB0YWJsZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQodGFibGVDZWxsTWFyZ2luRnJhZ21lbnQpO1xyXG5cclxuICAvLyBieSBkZWZhdWx0LCBhbGwgdGFibGVzIGFyZSBjZW50ZXIgYWxpZ25lZC5cclxuICBjb25zdCBhbGlnbm1lbnRGcmFnbWVudCA9IGJ1aWxkSG9yaXpvbnRhbEFsaWdubWVudCgnY2VudGVyJyk7XHJcbiAgdGFibGVQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KGFsaWdubWVudEZyYWdtZW50KTtcclxuXHJcbiAgdGFibGVQcm9wZXJ0aWVzRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIHRhYmxlUHJvcGVydGllc0ZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgY3NzQm9yZGVyUGFyc2VyID0gKGJvcmRlclN0cmluZykgPT4ge1xyXG4gIGxldCBbc2l6ZSwgc3Ryb2tlLCBjb2xvcl0gPSBib3JkZXJTdHJpbmcuc3BsaXQoJyAnKTtcclxuXHJcbiAgaWYgKHBvaW50UmVnZXgudGVzdChzaXplKSkge1xyXG4gICAgY29uc3QgbWF0Y2hlZFBhcnRzID0gc2l6ZS5tYXRjaChwb2ludFJlZ2V4KTtcclxuICAgIC8vIGNvbnZlcnQgcG9pbnQgdG8gZWlnaHRoIG9mIGEgcG9pbnRcclxuICAgIHNpemUgPSBwb2ludFRvRUlQKG1hdGNoZWRQYXJ0c1sxXSk7XHJcbiAgfSBlbHNlIGlmIChwaXhlbFJlZ2V4LnRlc3Qoc2l6ZSkpIHtcclxuICAgIGNvbnN0IG1hdGNoZWRQYXJ0cyA9IHNpemUubWF0Y2gocGl4ZWxSZWdleCk7XHJcbiAgICAvLyBjb252ZXJ0IHBpeGVscyB0byBlaWdodGggb2YgYSBwb2ludFxyXG4gICAgc2l6ZSA9IHBpeGVsVG9FSVAobWF0Y2hlZFBhcnRzWzFdKTtcclxuICB9XHJcbiAgc3Ryb2tlID0gc3Ryb2tlICYmIFsnZGFzaGVkJywgJ2RvdHRlZCcsICdkb3VibGUnXS5pbmNsdWRlcyhzdHJva2UpID8gc3Ryb2tlIDogJ3NpbmdsZSc7XHJcblxyXG4gIGNvbG9yID0gY29sb3IgJiYgZml4dXBDb2xvckNvZGUoY29sb3IpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gIHJldHVybiBbc2l6ZSwgc3Ryb2tlLCBjb2xvcl07XHJcbn07XHJcblxyXG5jb25zdCBidWlsZFRhYmxlID0gYXN5bmMgKHZOb2RlLCBhdHRyaWJ1dGVzLCBkb2N4RG9jdW1lbnRJbnN0YW5jZSkgPT4ge1xyXG4gIGNvbnN0IHRhYmxlRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHc6IG5hbWVzcGFjZXMudyB9IH0pLmVsZSgnQHcnLCAndGJsJyk7XHJcbiAgY29uc3QgbW9kaWZpZWRBdHRyaWJ1dGVzID0geyAuLi5hdHRyaWJ1dGVzIH07XHJcbiAgaWYgKGlzVk5vZGUodk5vZGUpICYmIHZOb2RlLnByb3BlcnRpZXMpIHtcclxuICAgIGNvbnN0IHRhYmxlQXR0cmlidXRlcyA9IHZOb2RlLnByb3BlcnRpZXMuYXR0cmlidXRlcyB8fCB7fTtcclxuICAgIGNvbnN0IHRhYmxlU3R5bGVzID0gdk5vZGUucHJvcGVydGllcy5zdHlsZSB8fCB7fTtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVycyA9IHt9O1xyXG4gICAgY29uc3QgdGFibGVDZWxsQm9yZGVycyA9IHt9O1xyXG4gICAgbGV0IFtib3JkZXJTaXplLCBib3JkZXJTdHJpa2UsIGJvcmRlckNvbG9yXSA9IFsyLCAnc2luZ2xlJywgJzAwMDAwMCddO1xyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcclxuICAgIGlmICghaXNOYU4odGFibGVBdHRyaWJ1dGVzLmJvcmRlcikpIHtcclxuICAgICAgYm9yZGVyU2l6ZSA9IHBhcnNlSW50KHRhYmxlQXR0cmlidXRlcy5ib3JkZXIsIDEwKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjc3Mgc3R5bGUgb3ZlcnJpZGVzIHRhYmxlIGJvcmRlciBwcm9wZXJ0aWVzXHJcbiAgICBpZiAodGFibGVTdHlsZXMuYm9yZGVyKSB7XHJcbiAgICAgIGNvbnN0IFtjc3NTaXplLCBjc3NTdHJva2UsIGNzc0NvbG9yXSA9IGNzc0JvcmRlclBhcnNlcih0YWJsZVN0eWxlcy5ib3JkZXIpO1xyXG4gICAgICBib3JkZXJTaXplID0gY3NzU2l6ZSB8fCBib3JkZXJTaXplO1xyXG4gICAgICBib3JkZXJDb2xvciA9IGNzc0NvbG9yIHx8IGJvcmRlckNvbG9yO1xyXG4gICAgICBib3JkZXJTdHJpa2UgPSBjc3NTdHJva2UgfHwgYm9yZGVyU3RyaWtlO1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlQm9yZGVycy50b3AgPSBib3JkZXJTaXplO1xyXG4gICAgdGFibGVCb3JkZXJzLmJvdHRvbSA9IGJvcmRlclNpemU7XHJcbiAgICB0YWJsZUJvcmRlcnMubGVmdCA9IGJvcmRlclNpemU7XHJcbiAgICB0YWJsZUJvcmRlcnMucmlnaHQgPSBib3JkZXJTaXplO1xyXG4gICAgdGFibGVCb3JkZXJzLnN0cm9rZSA9IGJvcmRlclN0cmlrZTtcclxuICAgIHRhYmxlQm9yZGVycy5jb2xvciA9IGJvcmRlckNvbG9yO1xyXG5cclxuICAgIGlmICh0YWJsZVN0eWxlc1snYm9yZGVyLWNvbGxhcHNlJ10gPT09ICdjb2xsYXBzZScpIHtcclxuICAgICAgdGFibGVCb3JkZXJzLmluc2lkZVYgPSBib3JkZXJTaXplO1xyXG4gICAgICB0YWJsZUJvcmRlcnMuaW5zaWRlSCA9IGJvcmRlclNpemU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YWJsZUJvcmRlcnMuaW5zaWRlViA9IDA7XHJcbiAgICAgIHRhYmxlQm9yZGVycy5pbnNpZGVIID0gMDtcclxuICAgICAgdGFibGVDZWxsQm9yZGVycy50b3AgPSAxO1xyXG4gICAgICB0YWJsZUNlbGxCb3JkZXJzLmJvdHRvbSA9IDE7XHJcbiAgICAgIHRhYmxlQ2VsbEJvcmRlcnMubGVmdCA9IDE7XHJcbiAgICAgIHRhYmxlQ2VsbEJvcmRlcnMucmlnaHQgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGlmaWVkQXR0cmlidXRlcy50YWJsZUJvcmRlciA9IHRhYmxlQm9yZGVycztcclxuICAgIG1vZGlmaWVkQXR0cmlidXRlcy50YWJsZUNlbGxTcGFjaW5nID0gMDtcclxuXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGFibGVDZWxsQm9yZGVycykubGVuZ3RoKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy50YWJsZUNlbGxCb3JkZXIgPSB0YWJsZUNlbGxCb3JkZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaW5pbXVtV2lkdGg7XHJcbiAgICBsZXQgbWF4aW11bVdpZHRoO1xyXG4gICAgbGV0IHdpZHRoO1xyXG4gICAgLy8gQ2FsY3VsYXRlIG1pbmltdW0gd2lkdGggb2YgdGFibGVcclxuICAgIGlmIChwaXhlbFJlZ2V4LnRlc3QodGFibGVTdHlsZXNbJ21pbi13aWR0aCddKSkge1xyXG4gICAgICBtaW5pbXVtV2lkdGggPSBwaXhlbFRvVFdJUCh0YWJsZVN0eWxlc1snbWluLXdpZHRoJ10ubWF0Y2gocGl4ZWxSZWdleClbMV0pO1xyXG4gICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh0YWJsZVN0eWxlc1snbWluLXdpZHRoJ10pKSB7XHJcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2VWYWx1ZSA9IHRhYmxlU3R5bGVzWydtaW4td2lkdGgnXS5tYXRjaChwZXJjZW50YWdlUmVnZXgpWzFdO1xyXG4gICAgICBtaW5pbXVtV2lkdGggPSBNYXRoLnJvdW5kKChwZXJjZW50YWdlVmFsdWUgLyAxMDApICogYXR0cmlidXRlcy5tYXhpbXVtV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBtYXhpbXVtIHdpZHRoIG9mIHRhYmxlXHJcbiAgICBpZiAocGl4ZWxSZWdleC50ZXN0KHRhYmxlU3R5bGVzWydtYXgtd2lkdGgnXSkpIHtcclxuICAgICAgcGl4ZWxSZWdleC5sYXN0SW5kZXggPSAwO1xyXG4gICAgICBtYXhpbXVtV2lkdGggPSBwaXhlbFRvVFdJUCh0YWJsZVN0eWxlc1snbWF4LXdpZHRoJ10ubWF0Y2gocGl4ZWxSZWdleClbMV0pO1xyXG4gICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh0YWJsZVN0eWxlc1snbWF4LXdpZHRoJ10pKSB7XHJcbiAgICAgIHBlcmNlbnRhZ2VSZWdleC5sYXN0SW5kZXggPSAwO1xyXG4gICAgICBjb25zdCBwZXJjZW50YWdlVmFsdWUgPSB0YWJsZVN0eWxlc1snbWF4LXdpZHRoJ10ubWF0Y2gocGVyY2VudGFnZVJlZ2V4KVsxXTtcclxuICAgICAgbWF4aW11bVdpZHRoID0gTWF0aC5yb3VuZCgocGVyY2VudGFnZVZhbHVlIC8gMTAwKSAqIGF0dHJpYnV0ZXMubWF4aW11bVdpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgc3BlY2lmaWVkIHdpZHRoIG9mIHRhYmxlXHJcbiAgICBpZiAocGl4ZWxSZWdleC50ZXN0KHRhYmxlU3R5bGVzLndpZHRoKSkge1xyXG4gICAgICBwaXhlbFJlZ2V4Lmxhc3RJbmRleCA9IDA7XHJcbiAgICAgIHdpZHRoID0gcGl4ZWxUb1RXSVAodGFibGVTdHlsZXMud2lkdGgubWF0Y2gocGl4ZWxSZWdleClbMV0pO1xyXG4gICAgfSBlbHNlIGlmIChwZXJjZW50YWdlUmVnZXgudGVzdCh0YWJsZVN0eWxlcy53aWR0aCkpIHtcclxuICAgICAgcGVyY2VudGFnZVJlZ2V4Lmxhc3RJbmRleCA9IDA7XHJcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2VWYWx1ZSA9IHRhYmxlU3R5bGVzLndpZHRoLm1hdGNoKHBlcmNlbnRhZ2VSZWdleClbMV07XHJcbiAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCgocGVyY2VudGFnZVZhbHVlIC8gMTAwKSAqIGF0dHJpYnV0ZXMubWF4aW11bVdpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB3aWR0aCBpc24ndCBzdXBwbGllZCwgd2Ugc2hvdWxkIGhhdmUgbWluLXdpZHRoIGFzIHRoZSB3aWR0aC5cclxuICAgIGlmICh3aWR0aCkge1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgaWYgKG1heGltdW1XaWR0aCkge1xyXG4gICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCA9IE1hdGgubWluKG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCwgbWF4aW11bVdpZHRoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWluaW11bVdpZHRoKSB7XHJcbiAgICAgICAgbW9kaWZpZWRBdHRyaWJ1dGVzLndpZHRoID0gTWF0aC5tYXgobW9kaWZpZWRBdHRyaWJ1dGVzLndpZHRoLCBtaW5pbXVtV2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG1pbmltdW1XaWR0aCkge1xyXG4gICAgICBtb2RpZmllZEF0dHJpYnV0ZXMud2lkdGggPSBtaW5pbXVtV2lkdGg7XHJcbiAgICB9XHJcbiAgICBpZiAobW9kaWZpZWRBdHRyaWJ1dGVzLndpZHRoKSB7XHJcbiAgICAgIG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCA9IE1hdGgubWluKG1vZGlmaWVkQXR0cmlidXRlcy53aWR0aCwgYXR0cmlidXRlcy5tYXhpbXVtV2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCB0YWJsZVByb3BlcnRpZXNGcmFnbWVudCA9IGJ1aWxkVGFibGVQcm9wZXJ0aWVzKG1vZGlmaWVkQXR0cmlidXRlcyk7XHJcbiAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVQcm9wZXJ0aWVzRnJhZ21lbnQpO1xyXG5cclxuICBjb25zdCByb3dTcGFuTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICBpZiAodk5vZGVIYXNDaGlsZHJlbih2Tm9kZSkpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgY2hpbGRWTm9kZSA9IHZOb2RlLmNoaWxkcmVuW2luZGV4XTtcclxuICAgICAgaWYgKGNoaWxkVk5vZGUudGFnTmFtZSA9PT0gJ2NvbGdyb3VwJykge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlR3JpZEZyYWdtZW50ID0gYnVpbGRUYWJsZUdyaWQoY2hpbGRWTm9kZSwgbW9kaWZpZWRBdHRyaWJ1dGVzKTtcclxuICAgICAgICB0YWJsZUZyYWdtZW50LmltcG9ydCh0YWJsZUdyaWRGcmFnbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRWTm9kZS50YWdOYW1lID09PSAndGhlYWQnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaXRlcmF0b3JJbmRleCA9IDA7IGl0ZXJhdG9ySW5kZXggPCBjaGlsZFZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaXRlcmF0b3JJbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBncmFuZENoaWxkVk5vZGUgPSBjaGlsZFZOb2RlLmNoaWxkcmVuW2l0ZXJhdG9ySW5kZXhdO1xyXG4gICAgICAgICAgaWYgKGdyYW5kQ2hpbGRWTm9kZS50YWdOYW1lID09PSAndHInKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVyYXRvckluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFibGVHcmlkRnJhZ21lbnQgPSBidWlsZFRhYmxlR3JpZEZyb21UYWJsZVJvdyhcclxuICAgICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVHcmlkRnJhZ21lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlUm93RnJhZ21lbnQgPSBhd2FpdCBidWlsZFRhYmxlUm93KFxyXG4gICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcclxuICAgICAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgcm93U3Bhbk1hcCxcclxuICAgICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50LmltcG9ydCh0YWJsZVJvd0ZyYWdtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRWTm9kZS50YWdOYW1lID09PSAndGJvZHknKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaXRlcmF0b3JJbmRleCA9IDA7IGl0ZXJhdG9ySW5kZXggPCBjaGlsZFZOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaXRlcmF0b3JJbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBncmFuZENoaWxkVk5vZGUgPSBjaGlsZFZOb2RlLmNoaWxkcmVuW2l0ZXJhdG9ySW5kZXhdO1xyXG4gICAgICAgICAgaWYgKGdyYW5kQ2hpbGRWTm9kZS50YWdOYW1lID09PSAndHInKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVyYXRvckluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFibGVHcmlkRnJhZ21lbnQgPSBidWlsZFRhYmxlR3JpZEZyb21UYWJsZVJvdyhcclxuICAgICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVHcmlkRnJhZ21lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlUm93RnJhZ21lbnQgPSBhd2FpdCBidWlsZFRhYmxlUm93KFxyXG4gICAgICAgICAgICAgIGdyYW5kQ2hpbGRWTm9kZSxcclxuICAgICAgICAgICAgICBtb2RpZmllZEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgcm93U3Bhbk1hcCxcclxuICAgICAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50LmltcG9ydCh0YWJsZVJvd0ZyYWdtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRWTm9kZS50YWdOYW1lID09PSAndHInKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zdCB0YWJsZUdyaWRGcmFnbWVudCA9IGJ1aWxkVGFibGVHcmlkRnJvbVRhYmxlUm93KGNoaWxkVk5vZGUsIG1vZGlmaWVkQXR0cmlidXRlcyk7XHJcbiAgICAgICAgICB0YWJsZUZyYWdtZW50LmltcG9ydCh0YWJsZUdyaWRGcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhYmxlUm93RnJhZ21lbnQgPSBhd2FpdCBidWlsZFRhYmxlUm93KFxyXG4gICAgICAgICAgY2hpbGRWTm9kZSxcclxuICAgICAgICAgIG1vZGlmaWVkQXR0cmlidXRlcyxcclxuICAgICAgICAgIHJvd1NwYW5NYXAsXHJcbiAgICAgICAgICBkb2N4RG9jdW1lbnRJbnN0YW5jZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGFibGVGcmFnbWVudC5pbXBvcnQodGFibGVSb3dGcmFnbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgdGFibGVGcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gdGFibGVGcmFnbWVudDtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkUHJlc2V0R2VvbWV0cnkgPSAoKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgYTogbmFtZXNwYWNlcy5hIH0gfSlcclxuICAgIC5lbGUoJ0BhJywgJ3Byc3RHZW9tJylcclxuICAgIC5hdHQoJ3Byc3QnLCAncmVjdCcpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkRXh0ZW50cyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pXHJcbiAgICAuZWxlKCdAYScsICdleHQnKVxyXG4gICAgLmF0dCgnY3gnLCB3aWR0aClcclxuICAgIC5hdHQoJ2N5JywgaGVpZ2h0KVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZE9mZnNldCA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEgfSB9KVxyXG4gICAgLmVsZSgnQGEnLCAnb2ZmJylcclxuICAgIC5hdHQoJ3gnLCAnMCcpXHJcbiAgICAuYXR0KCd5JywgJzAnKVxyXG4gICAgLnVwKCk7XHJcblxyXG5jb25zdCBidWlsZEdyYXBoaWNGcmFtZVRyYW5zZm9ybSA9IChhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgZ3JhcGhpY0ZyYW1lVHJhbnNmb3JtRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pLmVsZShcclxuICAgICdAYScsXHJcbiAgICAneGZybSdcclxuICApO1xyXG5cclxuICBjb25zdCBvZmZzZXRGcmFnbWVudCA9IGJ1aWxkT2Zmc2V0KCk7XHJcbiAgZ3JhcGhpY0ZyYW1lVHJhbnNmb3JtRnJhZ21lbnQuaW1wb3J0KG9mZnNldEZyYWdtZW50KTtcclxuICBjb25zdCBleHRlbnRzRnJhZ21lbnQgPSBidWlsZEV4dGVudHMoYXR0cmlidXRlcyk7XHJcbiAgZ3JhcGhpY0ZyYW1lVHJhbnNmb3JtRnJhZ21lbnQuaW1wb3J0KGV4dGVudHNGcmFnbWVudCk7XHJcblxyXG4gIGdyYXBoaWNGcmFtZVRyYW5zZm9ybUZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBncmFwaGljRnJhbWVUcmFuc2Zvcm1GcmFnbWVudDtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkU2hhcGVQcm9wZXJ0aWVzID0gKGF0dHJpYnV0ZXMpID0+IHtcclxuICBjb25zdCBzaGFwZVByb3BlcnRpZXMgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHBpYzogbmFtZXNwYWNlcy5waWMgfSB9KS5lbGUoJ0BwaWMnLCAnc3BQcicpO1xyXG5cclxuICBjb25zdCBncmFwaGljRnJhbWVUcmFuc2Zvcm1GcmFnbWVudCA9IGJ1aWxkR3JhcGhpY0ZyYW1lVHJhbnNmb3JtKGF0dHJpYnV0ZXMpO1xyXG4gIHNoYXBlUHJvcGVydGllcy5pbXBvcnQoZ3JhcGhpY0ZyYW1lVHJhbnNmb3JtRnJhZ21lbnQpO1xyXG4gIGNvbnN0IHByZXNldEdlb21ldHJ5RnJhZ21lbnQgPSBidWlsZFByZXNldEdlb21ldHJ5KCk7XHJcbiAgc2hhcGVQcm9wZXJ0aWVzLmltcG9ydChwcmVzZXRHZW9tZXRyeUZyYWdtZW50KTtcclxuXHJcbiAgc2hhcGVQcm9wZXJ0aWVzLnVwKCk7XHJcblxyXG4gIHJldHVybiBzaGFwZVByb3BlcnRpZXM7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZEZpbGxSZWN0ID0gKCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pXHJcbiAgICAuZWxlKCdAYScsICdmaWxsUmVjdCcpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkU3RyZXRjaCA9ICgpID0+IHtcclxuICBjb25zdCBzdHJldGNoRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSB9IH0pLmVsZSgnQGEnLCAnc3RyZXRjaCcpO1xyXG5cclxuICBjb25zdCBmaWxsUmVjdEZyYWdtZW50ID0gYnVpbGRGaWxsUmVjdCgpO1xyXG4gIHN0cmV0Y2hGcmFnbWVudC5pbXBvcnQoZmlsbFJlY3RGcmFnbWVudCk7XHJcblxyXG4gIHN0cmV0Y2hGcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gc3RyZXRjaEZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRTcmNSZWN0RnJhZ21lbnQgPSAoKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgYTogbmFtZXNwYWNlcy5hIH0gfSlcclxuICAgIC5lbGUoJ0BhJywgJ3NyY1JlY3QnKVxyXG4gICAgLmF0dCgnYicsICcwJylcclxuICAgIC5hdHQoJ2wnLCAnMCcpXHJcbiAgICAuYXR0KCdyJywgJzAnKVxyXG4gICAgLmF0dCgndCcsICcwJylcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRCaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlID0gKHJlbGF0aW9uc2hpcElkKSA9PlxyXG4gIGZyYWdtZW50KHtcclxuICAgIG5hbWVzcGFjZUFsaWFzOiB7IGE6IG5hbWVzcGFjZXMuYSwgcjogbmFtZXNwYWNlcy5yIH0sXHJcbiAgfSlcclxuICAgIC5lbGUoJ0BhJywgJ2JsaXAnKVxyXG4gICAgLmF0dCgnQHInLCAnZW1iZWQnLCBgcklkJHtyZWxhdGlvbnNoaXBJZH1gKVxyXG4gICAgLy8gRklYTUU6IHBvc3NpYmxlIHZhbHVlcyAnZW1haWwnLCAnbm9uZScsICdwcmludCcsICdocXByaW50JywgJ3NjcmVlbidcclxuICAgIC5hdHQoJ2NzdGF0ZScsICdwcmludCcpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkQmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGwgPSAocmVsYXRpb25zaGlwSWQpID0+IHtcclxuICBjb25zdCBiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRmlsbEZyYWdtZW50ID0gZnJhZ21lbnQoe1xyXG4gICAgbmFtZXNwYWNlQWxpYXM6IHsgcGljOiBuYW1lc3BhY2VzLnBpYyB9LFxyXG4gIH0pLmVsZSgnQHBpYycsICdibGlwRmlsbCcpO1xyXG4gIGNvbnN0IGJpbmFyeUxhcmdlSW1hZ2VPclBpY3R1cmVGcmFnbWVudCA9IGJ1aWxkQmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZShyZWxhdGlvbnNoaXBJZCk7XHJcbiAgYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGxGcmFnbWVudC5pbXBvcnQoYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZyYWdtZW50KTtcclxuICBjb25zdCBzcmNSZWN0RnJhZ21lbnQgPSBidWlsZFNyY1JlY3RGcmFnbWVudCgpO1xyXG4gIGJpbmFyeUxhcmdlSW1hZ2VPclBpY3R1cmVGaWxsRnJhZ21lbnQuaW1wb3J0KHNyY1JlY3RGcmFnbWVudCk7XHJcbiAgY29uc3Qgc3RyZXRjaEZyYWdtZW50ID0gYnVpbGRTdHJldGNoKCk7XHJcbiAgYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGxGcmFnbWVudC5pbXBvcnQoc3RyZXRjaEZyYWdtZW50KTtcclxuXHJcbiAgYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGxGcmFnbWVudC51cCgpO1xyXG5cclxuICByZXR1cm4gYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGxGcmFnbWVudDtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkTm9uVmlzdWFsUGljdHVyZURyYXdpbmdQcm9wZXJ0aWVzID0gKCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHBpYzogbmFtZXNwYWNlcy5waWMgfSB9KVxyXG4gICAgLmVsZSgnQHBpYycsICdjTnZQaWNQcicpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkTm9uVmlzdWFsRHJhd2luZ1Byb3BlcnRpZXMgPSAoXHJcbiAgcGljdHVyZUlkLFxyXG4gIHBpY3R1cmVOYW1lV2l0aEV4dGVuc2lvbixcclxuICBwaWN0dXJlRGVzY3JpcHRpb24gPSAnJ1xyXG4pID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBwaWM6IG5hbWVzcGFjZXMucGljIH0gfSlcclxuICAgIC5lbGUoJ0BwaWMnLCAnY052UHInKVxyXG4gICAgLmF0dCgnaWQnLCBwaWN0dXJlSWQpXHJcbiAgICAuYXR0KCduYW1lJywgcGljdHVyZU5hbWVXaXRoRXh0ZW5zaW9uKVxyXG4gICAgLmF0dCgnZGVzY3InLCBwaWN0dXJlRGVzY3JpcHRpb24pXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkTm9uVmlzdWFsUGljdHVyZVByb3BlcnRpZXMgPSAoXHJcbiAgcGljdHVyZUlkLFxyXG4gIHBpY3R1cmVOYW1lV2l0aEV4dGVuc2lvbixcclxuICBwaWN0dXJlRGVzY3JpcHRpb25cclxuKSA9PiB7XHJcbiAgY29uc3Qgbm9uVmlzdWFsUGljdHVyZVByb3BlcnRpZXNGcmFnbWVudCA9IGZyYWdtZW50KHtcclxuICAgIG5hbWVzcGFjZUFsaWFzOiB7IHBpYzogbmFtZXNwYWNlcy5waWMgfSxcclxuICB9KS5lbGUoJ0BwaWMnLCAnbnZQaWNQcicpO1xyXG4gIC8vIFRPRE86IEhhbmRsZSBwaWN0dXJlIGF0dHJpYnV0ZXNcclxuICBjb25zdCBub25WaXN1YWxEcmF3aW5nUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGROb25WaXN1YWxEcmF3aW5nUHJvcGVydGllcyhcclxuICAgIHBpY3R1cmVJZCxcclxuICAgIHBpY3R1cmVOYW1lV2l0aEV4dGVuc2lvbixcclxuICAgIHBpY3R1cmVEZXNjcmlwdGlvblxyXG4gICk7XHJcbiAgbm9uVmlzdWFsUGljdHVyZVByb3BlcnRpZXNGcmFnbWVudC5pbXBvcnQobm9uVmlzdWFsRHJhd2luZ1Byb3BlcnRpZXNGcmFnbWVudCk7XHJcbiAgY29uc3Qgbm9uVmlzdWFsUGljdHVyZURyYXdpbmdQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZE5vblZpc3VhbFBpY3R1cmVEcmF3aW5nUHJvcGVydGllcygpO1xyXG4gIG5vblZpc3VhbFBpY3R1cmVQcm9wZXJ0aWVzRnJhZ21lbnQuaW1wb3J0KG5vblZpc3VhbFBpY3R1cmVEcmF3aW5nUHJvcGVydGllc0ZyYWdtZW50KTtcclxuICBub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRQaWN0dXJlID0gKHtcclxuICBpZCxcclxuICBmaWxlTmFtZVdpdGhFeHRlbnNpb24sXHJcbiAgZGVzY3JpcHRpb24sXHJcbiAgcmVsYXRpb25zaGlwSWQsXHJcbiAgd2lkdGgsXHJcbiAgaGVpZ2h0LFxyXG59KSA9PiB7XHJcbiAgY29uc3QgcGljdHVyZUZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBwaWM6IG5hbWVzcGFjZXMucGljIH0gfSkuZWxlKCdAcGljJywgJ3BpYycpO1xyXG4gIGNvbnN0IG5vblZpc3VhbFBpY3R1cmVQcm9wZXJ0aWVzRnJhZ21lbnQgPSBidWlsZE5vblZpc3VhbFBpY3R1cmVQcm9wZXJ0aWVzKFxyXG4gICAgaWQsXHJcbiAgICBmaWxlTmFtZVdpdGhFeHRlbnNpb24sXHJcbiAgICBkZXNjcmlwdGlvblxyXG4gICk7XHJcbiAgcGljdHVyZUZyYWdtZW50LmltcG9ydChub25WaXN1YWxQaWN0dXJlUHJvcGVydGllc0ZyYWdtZW50KTtcclxuICBjb25zdCBiaW5hcnlMYXJnZUltYWdlT3JQaWN0dXJlRmlsbCA9IGJ1aWxkQmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGwocmVsYXRpb25zaGlwSWQpO1xyXG4gIHBpY3R1cmVGcmFnbWVudC5pbXBvcnQoYmluYXJ5TGFyZ2VJbWFnZU9yUGljdHVyZUZpbGwpO1xyXG4gIGNvbnN0IHNoYXBlUHJvcGVydGllcyA9IGJ1aWxkU2hhcGVQcm9wZXJ0aWVzKHsgd2lkdGgsIGhlaWdodCB9KTtcclxuICBwaWN0dXJlRnJhZ21lbnQuaW1wb3J0KHNoYXBlUHJvcGVydGllcyk7XHJcbiAgcGljdHVyZUZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBwaWN0dXJlRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZEdyYXBoaWNEYXRhID0gKGdyYXBoaWNUeXBlLCBhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgZ3JhcGhpY0RhdGFGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgYTogbmFtZXNwYWNlcy5hIH0gfSlcclxuICAgIC5lbGUoJ0BhJywgJ2dyYXBoaWNEYXRhJylcclxuICAgIC5hdHQoJ3VyaScsICdodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvcGljdHVyZScpO1xyXG4gIGlmIChncmFwaGljVHlwZSA9PT0gJ3BpY3R1cmUnKSB7XHJcbiAgICBjb25zdCBwaWN0dXJlRnJhZ21lbnQgPSBidWlsZFBpY3R1cmUoYXR0cmlidXRlcyk7XHJcbiAgICBncmFwaGljRGF0YUZyYWdtZW50LmltcG9ydChwaWN0dXJlRnJhZ21lbnQpO1xyXG4gIH1cclxuICBncmFwaGljRGF0YUZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBncmFwaGljRGF0YUZyYWdtZW50O1xyXG59O1xyXG5cclxuY29uc3QgYnVpbGRHcmFwaGljID0gKGdyYXBoaWNUeXBlLCBhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgZ3JhcGhpY0ZyYWdtZW50ID0gZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyBhOiBuYW1lc3BhY2VzLmEgfSB9KS5lbGUoJ0BhJywgJ2dyYXBoaWMnKTtcclxuICAvLyBUT0RPOiBIYW5kbGUgZHJhd2luZyB0eXBlXHJcbiAgY29uc3QgZ3JhcGhpY0RhdGFGcmFnbWVudCA9IGJ1aWxkR3JhcGhpY0RhdGEoZ3JhcGhpY1R5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gIGdyYXBoaWNGcmFnbWVudC5pbXBvcnQoZ3JhcGhpY0RhdGFGcmFnbWVudCk7XHJcbiAgZ3JhcGhpY0ZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBncmFwaGljRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZERyYXdpbmdPYmplY3ROb25WaXN1YWxQcm9wZXJ0aWVzID0gKHBpY3R1cmVJZCwgcGljdHVyZU5hbWUpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXHJcbiAgICAuZWxlKCdAd3AnLCAnZG9jUHInKVxyXG4gICAgLmF0dCgnaWQnLCBwaWN0dXJlSWQpXHJcbiAgICAuYXR0KCduYW1lJywgcGljdHVyZU5hbWUpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkV3JhcFNxdWFyZSA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXHJcbiAgICAuZWxlKCdAd3AnLCAnd3JhcFNxdWFyZScpXHJcbiAgICAuYXR0KCd3cmFwVGV4dCcsICdib3RoU2lkZXMnKVxyXG4gICAgLmF0dCgnZGlzdEInLCAnMjI4NjAwJylcclxuICAgIC5hdHQoJ2Rpc3RUJywgJzIyODYwMCcpXHJcbiAgICAuYXR0KCdkaXN0TCcsICcyMjg2MDAnKVxyXG4gICAgLmF0dCgnZGlzdFInLCAnMjI4NjAwJylcclxuICAgIC51cCgpO1xyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbmNvbnN0IGJ1aWxkV3JhcE5vbmUgPSAoKSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgd3A6IG5hbWVzcGFjZXMud3AgfSB9KVxyXG4gICAgLmVsZSgnQHdwJywgJ3dyYXBOb25lJylcclxuICAgIC51cCgpO1xyXG5cclxuY29uc3QgYnVpbGRFZmZlY3RFeHRlbnRGcmFnbWVudCA9ICgpID0+XHJcbiAgZnJhZ21lbnQoeyBuYW1lc3BhY2VBbGlhczogeyB3cDogbmFtZXNwYWNlcy53cCB9IH0pXHJcbiAgICAuZWxlKCdAd3AnLCAnZWZmZWN0RXh0ZW50JylcclxuICAgIC5hdHQoJ2InLCAnMCcpXHJcbiAgICAuYXR0KCdsJywgJzAnKVxyXG4gICAgLmF0dCgncicsICcwJylcclxuICAgIC5hdHQoJ3QnLCAnMCcpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkRXh0ZW50ID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PlxyXG4gIGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgd3A6IG5hbWVzcGFjZXMud3AgfSB9KVxyXG4gICAgLmVsZSgnQHdwJywgJ2V4dGVudCcpXHJcbiAgICAuYXR0KCdjeCcsIHdpZHRoKVxyXG4gICAgLmF0dCgnY3knLCBoZWlnaHQpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkUG9zaXRpb25WID0gKCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHdwOiBuYW1lc3BhY2VzLndwIH0gfSlcclxuICAgIC5lbGUoJ0B3cCcsICdwb3NpdGlvblYnKVxyXG4gICAgLmF0dCgncmVsYXRpdmVGcm9tJywgJ3BhcmFncmFwaCcpXHJcbiAgICAuZWxlKCdAd3AnLCAncG9zT2Zmc2V0JylcclxuICAgIC50eHQoJzE5MDUwJylcclxuICAgIC51cCgpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkUG9zaXRpb25IID0gKCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHdwOiBuYW1lc3BhY2VzLndwIH0gfSlcclxuICAgIC5lbGUoJ0B3cCcsICdwb3NpdGlvbkgnKVxyXG4gICAgLmF0dCgncmVsYXRpdmVGcm9tJywgJ2NvbHVtbicpXHJcbiAgICAuZWxlKCdAd3AnLCAncG9zT2Zmc2V0JylcclxuICAgIC50eHQoJzE5MDUwJylcclxuICAgIC51cCgpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkU2ltcGxlUG9zID0gKCkgPT5cclxuICBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHdwOiBuYW1lc3BhY2VzLndwIH0gfSlcclxuICAgIC5lbGUoJ0B3cCcsICdzaW1wbGVQb3MnKVxyXG4gICAgLmF0dCgneCcsICcwJylcclxuICAgIC5hdHQoJ3knLCAnMCcpXHJcbiAgICAudXAoKTtcclxuXHJcbmNvbnN0IGJ1aWxkQW5jaG9yZWREcmF3aW5nID0gKGdyYXBoaWNUeXBlLCBhdHRyaWJ1dGVzKSA9PiB7XHJcbiAgY29uc3QgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQgPSBmcmFnbWVudCh7IG5hbWVzcGFjZUFsaWFzOiB7IHdwOiBuYW1lc3BhY2VzLndwIH0gfSlcclxuICAgIC5lbGUoJ0B3cCcsICdhbmNob3InKVxyXG4gICAgLmF0dCgnZGlzdEInLCAnMCcpXHJcbiAgICAuYXR0KCdkaXN0TCcsICcwJylcclxuICAgIC5hdHQoJ2Rpc3RSJywgJzAnKVxyXG4gICAgLmF0dCgnZGlzdFQnLCAnMCcpXHJcbiAgICAuYXR0KCdyZWxhdGl2ZUhlaWdodCcsICcwJylcclxuICAgIC5hdHQoJ2JlaGluZERvYycsICdmYWxzZScpXHJcbiAgICAuYXR0KCdsb2NrZWQnLCAndHJ1ZScpXHJcbiAgICAuYXR0KCdsYXlvdXRJbkNlbGwnLCAndHJ1ZScpXHJcbiAgICAuYXR0KCdhbGxvd092ZXJsYXAnLCAnZmFsc2UnKVxyXG4gICAgLmF0dCgnc2ltcGxlUG9zJywgJ2ZhbHNlJyk7XHJcbiAgLy8gRXZlbiB0aG91Z2ggc2ltcGxlUG9zIGlzbnQgc3VwcG9ydGVkIGJ5IFdvcmQgMjAwNyBzaW1wbGVQb3MgaXMgcmVxdWlyZWQuXHJcbiAgY29uc3Qgc2ltcGxlUG9zRnJhZ21lbnQgPSBidWlsZFNpbXBsZVBvcygpO1xyXG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydChzaW1wbGVQb3NGcmFnbWVudCk7XHJcbiAgY29uc3QgcG9zaXRpb25IRnJhZ21lbnQgPSBidWlsZFBvc2l0aW9uSCgpO1xyXG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydChwb3NpdGlvbkhGcmFnbWVudCk7XHJcbiAgY29uc3QgcG9zaXRpb25WRnJhZ21lbnQgPSBidWlsZFBvc2l0aW9uVigpO1xyXG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydChwb3NpdGlvblZGcmFnbWVudCk7XHJcbiAgY29uc3QgZXh0ZW50RnJhZ21lbnQgPSBidWlsZEV4dGVudCh7IHdpZHRoOiBhdHRyaWJ1dGVzLndpZHRoLCBoZWlnaHQ6IGF0dHJpYnV0ZXMuaGVpZ2h0IH0pO1xyXG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LmltcG9ydChleHRlbnRGcmFnbWVudCk7XHJcbiAgY29uc3QgZWZmZWN0RXh0ZW50RnJhZ21lbnQgPSBidWlsZEVmZmVjdEV4dGVudEZyYWdtZW50KCk7XHJcbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGVmZmVjdEV4dGVudEZyYWdtZW50KTtcclxuICBjb25zdCB3cmFwU3F1YXJlRnJhZ21lbnQgPSBidWlsZFdyYXBTcXVhcmUoKTtcclxuICBhbmNob3JlZERyYXdpbmdGcmFnbWVudC5pbXBvcnQod3JhcFNxdWFyZUZyYWdtZW50KTtcclxuICBjb25zdCBkcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGREcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllcyhcclxuICAgIGF0dHJpYnV0ZXMuaWQsXHJcbiAgICBhdHRyaWJ1dGVzLmZpbGVOYW1lV2l0aEV4dGVuc2lvblxyXG4gICk7XHJcbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGRyYXdpbmdPYmplY3ROb25WaXN1YWxQcm9wZXJ0aWVzRnJhZ21lbnQpO1xyXG4gIGNvbnN0IGdyYXBoaWNGcmFnbWVudCA9IGJ1aWxkR3JhcGhpYyhncmFwaGljVHlwZSwgYXR0cmlidXRlcyk7XHJcbiAgYW5jaG9yZWREcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGdyYXBoaWNGcmFnbWVudCk7XHJcblxyXG4gIGFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBhbmNob3JlZERyYXdpbmdGcmFnbWVudDtcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkSW5saW5lRHJhd2luZyA9IChncmFwaGljVHlwZSwgYXR0cmlidXRlcykgPT4ge1xyXG4gIGNvbnN0IGlubGluZURyYXdpbmdGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgd3A6IG5hbWVzcGFjZXMud3AgfSB9KVxyXG4gICAgLmVsZSgnQHdwJywgJ2lubGluZScpXHJcbiAgICAuYXR0KCdkaXN0QicsICcwJylcclxuICAgIC5hdHQoJ2Rpc3RMJywgJzAnKVxyXG4gICAgLmF0dCgnZGlzdFInLCAnMCcpXHJcbiAgICAuYXR0KCdkaXN0VCcsICcwJyk7XHJcblxyXG4gIGNvbnN0IGV4dGVudEZyYWdtZW50ID0gYnVpbGRFeHRlbnQoeyB3aWR0aDogYXR0cmlidXRlcy53aWR0aCwgaGVpZ2h0OiBhdHRyaWJ1dGVzLmhlaWdodCB9KTtcclxuICBpbmxpbmVEcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGV4dGVudEZyYWdtZW50KTtcclxuICBjb25zdCBlZmZlY3RFeHRlbnRGcmFnbWVudCA9IGJ1aWxkRWZmZWN0RXh0ZW50RnJhZ21lbnQoKTtcclxuICBpbmxpbmVEcmF3aW5nRnJhZ21lbnQuaW1wb3J0KGVmZmVjdEV4dGVudEZyYWdtZW50KTtcclxuICBjb25zdCBkcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllc0ZyYWdtZW50ID0gYnVpbGREcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllcyhcclxuICAgIGF0dHJpYnV0ZXMuaWQsXHJcbiAgICBhdHRyaWJ1dGVzLmZpbGVOYW1lV2l0aEV4dGVuc2lvblxyXG4gICk7XHJcbiAgaW5saW5lRHJhd2luZ0ZyYWdtZW50LmltcG9ydChkcmF3aW5nT2JqZWN0Tm9uVmlzdWFsUHJvcGVydGllc0ZyYWdtZW50KTtcclxuICBjb25zdCBncmFwaGljRnJhZ21lbnQgPSBidWlsZEdyYXBoaWMoZ3JhcGhpY1R5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gIGlubGluZURyYXdpbmdGcmFnbWVudC5pbXBvcnQoZ3JhcGhpY0ZyYWdtZW50KTtcclxuXHJcbiAgaW5saW5lRHJhd2luZ0ZyYWdtZW50LnVwKCk7XHJcblxyXG4gIHJldHVybiBpbmxpbmVEcmF3aW5nRnJhZ21lbnQ7XHJcbn07XHJcblxyXG5jb25zdCBidWlsZERyYXdpbmcgPSAoaW5saW5lT3JBbmNob3JlZCA9IGZhbHNlLCBncmFwaGljVHlwZSwgYXR0cmlidXRlcykgPT4ge1xyXG4gIGNvbnN0IGRyYXdpbmdGcmFnbWVudCA9IGZyYWdtZW50KHsgbmFtZXNwYWNlQWxpYXM6IHsgdzogbmFtZXNwYWNlcy53IH0gfSkuZWxlKCdAdycsICdkcmF3aW5nJyk7XHJcbiAgY29uc3QgaW5saW5lT3JBbmNob3JlZERyYXdpbmdGcmFnbWVudCA9IGlubGluZU9yQW5jaG9yZWRcclxuICAgID8gYnVpbGRJbmxpbmVEcmF3aW5nKGdyYXBoaWNUeXBlLCBhdHRyaWJ1dGVzKVxyXG4gICAgOiBidWlsZEFuY2hvcmVkRHJhd2luZyhncmFwaGljVHlwZSwgYXR0cmlidXRlcyk7XHJcbiAgZHJhd2luZ0ZyYWdtZW50LmltcG9ydChpbmxpbmVPckFuY2hvcmVkRHJhd2luZ0ZyYWdtZW50KTtcclxuICBkcmF3aW5nRnJhZ21lbnQudXAoKTtcclxuXHJcbiAgcmV0dXJuIGRyYXdpbmdGcmFnbWVudDtcclxufTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgYnVpbGRQYXJhZ3JhcGgsXHJcbiAgYnVpbGRUYWJsZSxcclxuICBidWlsZE51bWJlcmluZ0luc3RhbmNlcyxcclxuICBidWlsZExpbmVCcmVhayxcclxuICBidWlsZEluZGVudGF0aW9uLFxyXG4gIGJ1aWxkVGV4dEVsZW1lbnQsXHJcbiAgYnVpbGRCb2xkLFxyXG4gIGJ1aWxkSXRhbGljcyxcclxuICBidWlsZFVuZGVybGluZSxcclxuICBidWlsZERyYXdpbmcsXHJcbiAgZml4dXBMaW5lSGVpZ2h0LFxyXG59O1xyXG4iXX0=
|