@appium/base-driver 8.2.0 → 8.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/basedriver/capabilities.js +3 -1
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/driver.js +5 -5
- package/build/lib/basedriver/helpers.js +137 -81
- package/build/lib/express/express-logging.js +2 -2
- package/build/lib/index.js +126 -0
- package/build/lib/jsonwp-proxy/protocol-converter.js +2 -5
- package/build/lib/jsonwp-proxy/proxy.js +2 -5
- package/build/lib/protocol/errors.js +4 -2
- package/build/lib/protocol/helpers.js +3 -20
- package/build/lib/protocol/protocol.js +9 -19
- package/build/lib/protocol/routes.js +1 -10
- package/build/test/basedriver/capability-specs.js +10 -10
- package/build/test/basedriver/commands/event-specs.js +10 -10
- package/build/test/basedriver/driver-e2e-specs.js +3 -3
- package/build/test/basedriver/driver-e2e-tests.js +6 -223
- package/build/test/basedriver/driver-specs.js +3 -3
- package/build/test/basedriver/driver-tests.js +4 -4
- package/build/test/basedriver/helpers-specs.js +5 -1
- package/build/test/basedriver/timeout-specs.js +7 -7
- package/build/test/basedriver/websockets-e2e-specs.js +5 -5
- package/build/test/express/server-e2e-specs.js +156 -0
- package/build/test/express/server-specs.js +151 -0
- package/build/test/express/static-specs.js +23 -0
- package/build/test/helpers.js +57 -0
- package/build/test/jsonwp-proxy/mock-request.js +93 -0
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +61 -0
- package/build/test/jsonwp-proxy/proxy-specs.js +294 -0
- package/build/test/jsonwp-proxy/url-specs.js +167 -0
- package/build/test/jsonwp-status/status-specs.js +36 -0
- package/build/test/protocol/errors-specs.js +388 -0
- package/build/test/protocol/fake-driver.js +168 -0
- package/build/test/protocol/helpers.js +27 -0
- package/build/test/protocol/protocol-e2e-specs.js +1182 -0
- package/build/test/protocol/routes-specs.js +82 -0
- package/build/test/protocol/validator-specs.js +151 -0
- package/index.d.ts +0 -1
- package/index.js +1 -62
- package/lib/basedriver/capabilities.js +3 -0
- package/lib/basedriver/commands/index.js +0 -2
- package/lib/basedriver/driver.js +5 -5
- package/lib/basedriver/helpers.js +197 -81
- package/lib/express/express-logging.js +1 -1
- package/lib/index.js +64 -0
- package/lib/jsonwp-proxy/protocol-converter.js +1 -5
- package/lib/jsonwp-proxy/proxy.js +1 -3
- package/lib/protocol/errors.js +1 -1
- package/lib/protocol/helpers.js +5 -25
- package/lib/protocol/protocol.js +9 -25
- package/lib/protocol/routes.js +0 -3
- package/package.json +7 -15
- package/test/basedriver/capability-specs.js +1 -1
- package/test/basedriver/commands/event-specs.js +1 -1
- package/test/basedriver/driver-e2e-specs.js +1 -1
- package/test/basedriver/driver-e2e-tests.js +1 -179
- package/test/basedriver/driver-specs.js +1 -1
- package/test/basedriver/driver-tests.js +1 -1
- package/test/basedriver/helpers-specs.js +4 -0
- package/test/basedriver/timeout-specs.js +1 -1
- package/test/basedriver/websockets-e2e-specs.js +1 -1
- package/build/index.js +0 -124
- package/build/lib/basedriver/commands/execute-child.js +0 -137
- package/build/lib/basedriver/commands/execute.js +0 -119
- package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
- package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
- package/lib/basedriver/commands/execute-child.js +0 -132
- package/lib/basedriver/commands/execute.js +0 -126
|
@@ -142,6 +142,8 @@ function parseCaps(caps, constraints = {}, shouldValidateCaps = true) {
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
if (allFirstMatchCaps.length === 0) {
|
|
145
|
+
_logger.default.warn(`The firstMatch array in the given capabilities has no entries. Adding an empty entry fo rnow, ` + `but it will require one or more entries as W3C spec.`);
|
|
146
|
+
|
|
145
147
|
allFirstMatchCaps.push({});
|
|
146
148
|
}
|
|
147
149
|
|
|
@@ -254,4 +256,4 @@ function promoteAppiumOptions(originalCaps) {
|
|
|
254
256
|
}require('source-map-support').install();
|
|
255
257
|
|
|
256
258
|
|
|
257
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NhcGFiaWxpdGllcy5qcyJdLCJuYW1lcyI6WyJBUFBJVU1fVkVORE9SX1BSRUZJWCIsIkFQUElVTV9PUFRTX0NBUCIsIlBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCIsIm1lcmdlQ2FwcyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJuYW1lIiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzVW5kZWZpbmVkIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsaWRhdGVDYXBzIiwiY2FwcyIsImNvbnN0cmFpbnRzIiwib3B0cyIsInNraXBQcmVzZW5jZUNvbnN0cmFpbnQiLCJpc1BsYWluT2JqZWN0IiwiY2xvbmVEZWVwIiwia2V5Iiwia2V5cyIsInByZXNlbmNlIiwidmFsaWRhdGlvbkVycm9ycyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwicGlja0J5IiwidXRpbCIsImhhc1ZhbHVlIiwiZnVsbE1lc3NhZ2VzIiwibWVzc2FnZSIsImF0dHJpYnV0ZSIsInJlYXNvbnMiLCJyZWFzb24iLCJwdXNoIiwiam9pbiIsIlNUQU5EQVJEX0NBUFMiLCJpc1N0YW5kYXJkQ2FwIiwiY2FwIiwiZmluZCIsInN0YW5kYXJkQ2FwIiwidG9Mb3dlckNhc2UiLCJzdHJpcEFwcGl1bVByZWZpeGVzIiwicHJlZml4IiwicHJlZml4ZWRDYXBzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImJhZFByZWZpeGVkQ2FwcyIsInByZWZpeGVkQ2FwIiwic3RyaXBwZWRDYXBOYW1lIiwic3Vic3RyIiwibGVuZ3RoIiwiaXNOaWwiLCJsb2ciLCJ3YXJuIiwiZmluZE5vblByZWZpeGVkQ2FwcyIsImFsd2F5c01hdGNoIiwiZmlyc3RNYXRjaCIsImNoYWluIiwicmVkdWNlIiwidW5wcmVmaXhlZENhcHMiLCJpbmNsdWRlcyIsInVuaXEiLCJwYXJzZUNhcHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJyZXF1aXJlZENhcHMiLCJhbGxGaXJzdE1hdGNoQ2FwcyIsImlzQXJyYXkiLCJub25QcmVmaXhlZENhcHMiLCJpc0VtcHR5IiwiZmlyc3RNYXRjaENhcHMiLCJmaWx0ZXJlZENvbnN0cmFpbnRzIiwicmVxdWlyZWRDYXBzS2V5cyIsInZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzIiwibWFwIiwiZSIsImlzTnVsbCIsIm1hdGNoZWRDYXBzIiwiZXJyIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsInByb21vdGVBcHBpdW1PcHRpb25zIiwib3JpZ2luYWxDYXBzIiwiYXBwaXVtT3B0aW9ucyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJvdmVyd3JpdHRlbktleXMiLCJpbnRlcnNlY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxTQUE3Qjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsU0FBeEI7O0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUksR0FBRUYsb0JBQXFCLEdBQUVDLGVBQWdCLEVBQTNFOzs7QUFJQSxTQUFTRSxTQUFULENBQW9CQyxPQUFPLEdBQUcsRUFBOUIsRUFBa0NDLFNBQVMsR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxNQUFJQyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JKLE9BQWxCLENBQWI7O0FBRUEsT0FBSyxJQUFJLENBQUNLLElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCQyxnQkFBRUMsT0FBRixDQUFVUCxTQUFWLENBQTFCLEVBQWdEO0FBRTlDLFFBQUksQ0FBQ00sZ0JBQUVFLFdBQUYsQ0FBY1QsT0FBTyxDQUFDSyxJQUFELENBQXJCLENBQUwsRUFBbUM7QUFDakMsWUFBTSxJQUFJSyxlQUFPQyxvQkFBWCxDQUFpQyxhQUFZTixJQUFLLHVDQUFzQ08sSUFBSSxDQUFDQyxTQUFMLENBQWViLE9BQWYsQ0FBd0Isb0JBQW1C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R0FBR0QsWUFBWSxDQUFDckYsZUFBRCxDQUFsQzs7QUFDQSxNQUFJLENBQUNzRixhQUFMLEVBQW9CO0FBQ2xCLFdBQU9ELFlBQVA7QUFDRDs7QUFFRCxNQUFJbkUsSUFBSSxHQUFHUixnQkFBRWEsU0FBRixDQUFZOEQsWUFBWixDQUFYOztBQUNBLE1BQUksQ0FBQzNFLGdCQUFFWSxhQUFGLENBQWdCZ0UsYUFBaEIsQ0FBTCxFQUFxQztBQUNuQyxVQUFNLElBQUl6RSxlQUFPMEUsc0JBQVgsQ0FBbUMsT0FBTXZGLGVBQWdCLCtCQUF6RCxDQUFOO0FBQ0Q7O0FBR0Q4QyxFQUFBQSxtQkFBbUIsQ0FBQ3dDLGFBQUQsQ0FBbkI7O0FBR0EsUUFBTUUsZUFBZSxHQUFHOUUsZ0JBQUUrRSxZQUFGLENBQWVuRixNQUFNLENBQUNtQixJQUFQLENBQVlQLElBQVosQ0FBZixFQUFrQ1osTUFBTSxDQUFDbUIsSUFBUCxDQUFZNkQsYUFBWixDQUFsQyxDQUF4Qjs7QUFDQSxNQUFJRSxlQUFlLENBQUNqQyxNQUFoQixHQUF5QixDQUE3QixFQUFnQztBQUM5QkUsb0JBQUlDLElBQUosQ0FBVSw2QkFBNEJ6RCx3QkFBeUIsdUJBQXRELEdBQ0Msa0NBQWlDYyxJQUFJLENBQUNDLFNBQUwsQ0FBZXdFLGVBQWYsQ0FBZ0MsRUFEM0U7QUFFRDs7QUFHRHRFLEVBQUFBLElBQUksR0FBRyxFQUFDLEdBQUdBLElBQUo7QUFBVSxPQUFHb0U7QUFBYixHQUFQO0FBR0EsU0FBT3BFLElBQUksQ0FBQ2xCLGVBQUQsQ0FBWDtBQUNBLFNBQU9rQixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uL3Byb3RvY29sL2Vycm9ycyc7XG5cbmNvbnN0IEFQUElVTV9WRU5ET1JfUFJFRklYID0gJ2FwcGl1bTonO1xuY29uc3QgQVBQSVVNX09QVFNfQ0FQID0gJ29wdGlvbnMnO1xuY29uc3QgUFJFRklYRURfQVBQSVVNX09QVFNfQ0FQID0gYCR7QVBQSVVNX1ZFTkRPUl9QUkVGSVh9JHtBUFBJVU1fT1BUU19DQVB9YDtcblxuLy8gVGFrZXMgcHJpbWFyeSBjYXBzIG9iamVjdCBhbmQgbWVyZ2VzIGl0IGludG8gYSBzZWNvbmRhcnkgY2FwcyBvYmplY3QuXG4vLyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1tZXJnaW5nLWNhcGFiaWxpdGllcylcbmZ1bmN0aW9uIG1lcmdlQ2FwcyAocHJpbWFyeSA9IHt9LCBzZWNvbmRhcnkgPSB7fSkge1xuICBsZXQgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJpbWFyeSk7XG5cbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoc2Vjb25kYXJ5KSkge1xuICAgIC8vIE92ZXJ3cml0aW5nIGlzIG5vdCBhbGxvd2VkLiBQcmltYXJ5IGFuZCBzZWNvbmRhcnkgbXVzdCBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzICh3M2MgcnVsZSA0LjQpXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHByaW1hcnlbbmFtZV0pKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBwcm9wZXJ0eSAnJHtuYW1lfScgc2hvdWxkIG5vdCBleGlzdCBvbiBib3RoIHByaW1hcnkgKCR7SlNPTi5zdHJpbmdpZnkocHJpbWFyeSl9KSBhbmQgc2Vjb25kYXJ5ICgke0pTT04uc3RyaW5naWZ5KHNlY29uZGFyeSl9KSBvYmplY3RgKTtcbiAgICB9XG4gICAgcmVzdWx0W25hbWVdID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBWYWxpZGF0ZXMgY2FwcyBhZ2FpbnN0IGEgc2V0IG9mIGNvbnN0cmFpbnRzXG5mdW5jdGlvbiB2YWxpZGF0ZUNhcHMgKGNhcHMsIGNvbnN0cmFpbnRzID0ge30sIG9wdHMgPSB7fSkge1xuXG4gIGxldCB7c2tpcFByZXNlbmNlQ29uc3RyYWludH0gPSBvcHRzO1xuXG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgbXVzdCBiZSBhIEpTT04gb2JqZWN0YCk7XG4gIH1cblxuICBjb25zdHJhaW50cyA9IF8uY2xvbmVEZWVwKGNvbnN0cmFpbnRzKTsgLy8gRGVmZW5zaXZlIGNvcHlcblxuICBpZiAoc2tpcFByZXNlbmNlQ29uc3RyYWludCkge1xuICAgIC8vIFJlbW92ZSB0aGUgJ3ByZXNlbmNlJyBjb25zdHJhaW50IGlmIHdlJ3JlIG5vdCBjaGVja2luZyBmb3IgaXRcbiAgICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKGNvbnN0cmFpbnRzKSkge1xuICAgICAgZGVsZXRlIGNvbnN0cmFpbnRzW2tleV0ucHJlc2VuY2U7XG4gICAgfVxuICB9XG5cbiAgbGV0IHZhbGlkYXRpb25FcnJvcnMgPSB2YWxpZGF0b3IudmFsaWRhdGUoXy5waWNrQnkoY2FwcywgdXRpbC5oYXNWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Z1bGxNZXNzYWdlczogZmFsc2V9KTtcblxuICBpZiAodmFsaWRhdGlvbkVycm9ycykge1xuICAgIGxldCBtZXNzYWdlID0gW107XG4gICAgZm9yIChsZXQgW2F0dHJpYnV0ZSwgcmVhc29uc10gb2YgXy50b1BhaXJzKHZhbGlkYXRpb25FcnJvcnMpKSB7XG4gICAgICBmb3IgKGxldCByZWFzb24gb2YgcmVhc29ucykge1xuICAgICAgICBtZXNzYWdlLnB1c2goYCcke2F0dHJpYnV0ZX0nICR7cmVhc29ufWApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKG1lc3NhZ2Uuam9pbignOyAnKSk7XG4gIH1cblxuICAvLyBSZXR1cm4gY2Fwc1xuICByZXR1cm4gY2Fwcztcbn1cblxuLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuY29uc3QgU1RBTkRBUkRfQ0FQUyA9IFtcbiAgJ2Jyb3dzZXJOYW1lJyxcbiAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgJ3BsYXRmb3JtTmFtZScsXG4gICdhY2NlcHRJbnNlY3VyZUNlcnRzJyxcbiAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAncHJveHknLFxuICAnc2V0V2luZG93UmVjdCcsXG4gICd0aW1lb3V0cycsXG4gICd1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcidcbl07XG5cbmZ1bmN0aW9uIGlzU3RhbmRhcmRDYXAgKGNhcCkge1xuICByZXR1cm4gISFfLmZpbmQoU1RBTkRBUkRfQ0FQUywgKHN0YW5kYXJkQ2FwKSA9PiBzdGFuZGFyZENhcC50b0xvd2VyQ2FzZSgpID09PSBgJHtjYXB9YC50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLy8gSWYgdGhlICdhcHBpdW06JyBwcmVmaXggd2FzIHByb3ZpZGVkIGFuZCBpdCdzIGEgdmFsaWQgY2FwYWJpbGl0eSwgc3RyaXAgb3V0IHRoZSBwcmVmaXggKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tZXh0ZW5zaW9uLWNhcGFiaWxpdGllcylcbi8vIChOT1RFOiBNZXRob2QgaXMgZGVzdHJ1Y3RpdmUgYW5kIG11dGF0ZXMgY29udGVudHMgb2YgY2FwcylcbmZ1bmN0aW9uIHN0cmlwQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgY29uc3QgcHJlZml4ID0gJ2FwcGl1bTonO1xuICBjb25zdCBwcmVmaXhlZENhcHMgPSBfLmZpbHRlcihfLmtleXMoY2FwcyksIChjYXApID0+IGAke2NhcH1gLnN0YXJ0c1dpdGgocHJlZml4KSk7XG4gIGNvbnN0IGJhZFByZWZpeGVkQ2FwcyA9IFtdO1xuXG4gIC8vIFN0cmlwIG91dCB0aGUgJ2FwcGl1bTonIHByZWZpeFxuICBmb3IgKGxldCBwcmVmaXhlZENhcCBvZiBwcmVmaXhlZENhcHMpIHtcbiAgICBjb25zdCBzdHJpcHBlZENhcE5hbWUgPSBwcmVmaXhlZENhcC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XG5cbiAgICAvLyBJZiBpdCdzIHN0YW5kYXJkIGNhcGFiaWxpdHkgdGhhdCB3YXMgcHJlZml4ZWQsIGFkZCBpdCB0byBhbiBhcnJheSBvZiBpbmNvcnJlY3RseSBwcmVmaXhlZCBjYXBhYmlsaXRpZXNcbiAgICBpZiAoaXNTdGFuZGFyZENhcChzdHJpcHBlZENhcE5hbWUpKSB7XG4gICAgICBiYWRQcmVmaXhlZENhcHMucHVzaChzdHJpcHBlZENhcE5hbWUpO1xuICAgICAgaWYgKF8uaXNOaWwoY2Fwc1tzdHJpcHBlZENhcE5hbWVdKSkge1xuICAgICAgICBjYXBzW3N0cmlwcGVkQ2FwTmFtZV0gPSBjYXBzW3ByZWZpeGVkQ2FwXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBJZ25vcmluZyBjYXBhYmlsaXR5ICcke3ByZWZpeGVkQ2FwfT0ke2NhcHNbcHJlZml4ZWRDYXBdfScgYW5kIGAgK1xuICAgICAgICAgIGB1c2luZyBjYXBhYmlsaXR5ICcke3N0cmlwcGVkQ2FwTmFtZX09JHtjYXBzW3N0cmlwcGVkQ2FwTmFtZV19J2ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjYXBzW3N0cmlwcGVkQ2FwTmFtZV0gPSBjYXBzW3ByZWZpeGVkQ2FwXTtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBvdXQgdGhlIHByZWZpeFxuICAgIGRlbGV0ZSBjYXBzW3ByZWZpeGVkQ2FwXTtcbiAgfVxuXG4gIC8vIElmIHdlIGZvdW5kIHN0YW5kYXJkIGNhcHMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHByZWZpeGVkLCB0aHJvdyBhbiBleGNlcHRpb24gKGUuZy46IGRvbid0IGFjY2VwdCAnYXBwaXVtOnBsYXRmb3JtTmFtZScsIG9ubHkgYWNjZXB0IGp1c3QgJ3BsYXRmb3JtTmFtZScpXG4gIGlmIChiYWRQcmVmaXhlZENhcHMubGVuZ3RoID4gMCkge1xuICAgIGxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzICR7SlNPTi5zdHJpbmdpZnkoYmFkUHJlZml4ZWRDYXBzKX0gYXJlIHN0YW5kYXJkIGNhcGFiaWxpdGllcyBhbmQgZG8gbm90IHJlcXVpcmUgXCJhcHBpdW06XCIgcHJlZml4YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgYW4gYXJyYXkgb2YgYWxsIHRoZSB1bnByZWZpeGVkIGNhcHMgdGhhdCBhcmUgYmVpbmcgdXNlZCBpbiAnYWx3YXlzTWF0Y2gnIGFuZCBhbGwgb2YgdGhlICdmaXJzdE1hdGNoJyBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIEEgY2FwYWJpbGl0aWVzIG9iamVjdFxuICovXG5mdW5jdGlvbiBmaW5kTm9uUHJlZml4ZWRDYXBzICh7YWx3YXlzTWF0Y2ggPSB7fSwgZmlyc3RNYXRjaCA9IFtdfSkge1xuICByZXR1cm4gXy5jaGFpbihbYWx3YXlzTWF0Y2gsIC4uLmZpcnN0TWF0Y2hdKVxuICAgIC5yZWR1Y2UoKHVucHJlZml4ZWRDYXBzLCBjYXBzKSA9PiBbXG4gICAgICAuLi51bnByZWZpeGVkQ2FwcyxcbiAgICAgIC4uLl8oY2Fwcykua2V5cygpLmZpbHRlcigoY2FwKSA9PiAhY2FwLmluY2x1ZGVzKCc6JykgJiYgIWlzU3RhbmRhcmRDYXAoY2FwKSksXG4gICAgXSwgW10pXG4gICAgLnVuaXEoKVxuICAgIC52YWx1ZSgpO1xufVxuXG4vLyBQYXJzZSBjYXBhYmlsaXRpZXMgKGJhc2VkIG9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuZnVuY3Rpb24gcGFyc2VDYXBzIChjYXBzLCBjb25zdHJhaW50cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gIC8vIElmIGNhcGFiaWxpdGllcyByZXF1ZXN0IGlzIG5vdCBhbiBvYmplY3QsIHJldHVybiBlcnJvciAoIzEuMSlcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uKHMpOiBcImNhcGFiaWxpdGllc1wiIG11c3QgYmUgYSBKU09OIG9iamVjdC4nKTtcbiAgfVxuXG4gIC8vIExldCAncmVxdWlyZWRDYXBzJyBiZSBwcm9wZXJ0eSBuYW1lZCAnYWx3YXlzTWF0Y2gnIGZyb20gY2FwYWJpbGl0aWVzIHJlcXVlc3QgKCMyKVxuICAvLyBhbmQgJ2FsbEZpcnN0TWF0Y2hDYXBzJyBiZSBwcm9wZXJ0eSBuYW1lZCAnZmlyc3RNYXRjaCcgZnJvbSBjYXBhYmlsaXRpZXMgcmVxdWVzdCAoIzMpXG4gIGxldCB7XG4gICAgYWx3YXlzTWF0Y2g6IHJlcXVpcmVkQ2FwcyA9IHt9LCAvLyBJZiAncmVxdWlyZWRDYXBzJyBpcyB1bmRlZmluZWQsIHNldCBpdCB0byBhbiBlbXB0eSBKU09OIG9iamVjdCAoIzIuMSlcbiAgICBmaXJzdE1hdGNoOiBhbGxGaXJzdE1hdGNoQ2FwcyA9IFt7fV0sIC8vIElmICdmaXJzdE1hdGNoJyBpcyB1bmRlZmluZWQgc2V0IGl0IHRvIGEgc2luZ2xldG9uIGxpc3Qgd2l0aCBvbmUgZW1wdHkgb2JqZWN0ICgjMy4xKVxuICB9ID0gY2FwcztcblxuICAvLyBSZWplY3QgJ2ZpcnN0TWF0Y2gnIGFyZ3VtZW50IGlmIGl0J3Mgbm90IGFuIGFycmF5ICgjMy4yKVxuICBpZiAoIV8uaXNBcnJheShhbGxGaXJzdE1hdGNoQ2FwcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdUaGUgY2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggYXJndW1lbnQgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb24ocyk6IFwiY2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hcIiBtdXN0IGJlIGEgSlNPTiBhcnJheSBvciB1bmRlZmluZWQnKTtcbiAgfVxuXG4gIC8vIElmIGFuIGVtcHR5IGFycmF5IGFzIHByb3ZpZGVkLCB3ZSdsbCBiZSBmb3JnaXZpbmcgYW5kIG1ha2UgaXQgYW4gYXJyYXkgb2Ygb25lIGVtcHR5IG9iamVjdFxuICBpZiAoYWxsRmlyc3RNYXRjaENhcHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsRmlyc3RNYXRjaENhcHMucHVzaCh7fSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3Igbm9uLXByZWZpeGVkLCBub24tc3RhbmRhcmQgY2FwYWJpbGl0aWVzIGFuZCBsb2cgd2FybmluZ3MgaWYgdGhleSBhcmUgZm91bmRcbiAgbGV0IG5vblByZWZpeGVkQ2FwcyA9IGZpbmROb25QcmVmaXhlZENhcHMoY2Fwcyk7XG4gIGlmICghXy5pc0VtcHR5KG5vblByZWZpeGVkQ2FwcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBBbGwgbm9uLXN0YW5kYXJkIGNhcGFiaWxpdGllcyBzaG91bGQgaGF2ZSBhIHZlbmRvciBwcmVmaXguIFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIGRpZCBub3QgaGF2ZSBvbmU6ICR7bm9uUHJlZml4ZWRDYXBzfWApO1xuICB9XG5cbiAgLy8gU3RyaXAgb3V0IHRoZSAnYXBwaXVtOicgcHJlZml4IGZyb20gYWxsXG4gIHN0cmlwQXBwaXVtUHJlZml4ZXMocmVxdWlyZWRDYXBzKTtcbiAgZm9yIChsZXQgZmlyc3RNYXRjaENhcHMgb2YgYWxsRmlyc3RNYXRjaENhcHMpIHtcbiAgICBzdHJpcEFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hDYXBzKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSByZXF1aXJlZENhcHMuIEJ1dCBkb24ndCB2YWxpZGF0ZSAncHJlc2VuY2UnIGJlY2F1c2UgaWYgdGhhdCBjb25zdHJhaW50IGZhaWxzIG9uICdhbHdheXNNYXRjaCcgaXQgY291bGQgc3RpbGwgcGFzcyBvbiBvbmUgb2YgdGhlICdmaXJzdE1hdGNoJyBrZXlzXG4gIGlmIChzaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICByZXF1aXJlZENhcHMgPSB2YWxpZGF0ZUNhcHMocmVxdWlyZWRDYXBzLCBjb25zdHJhaW50cywge3NraXBQcmVzZW5jZUNvbnN0cmFpbnQ6IHRydWV9KTtcbiAgfVxuXG5cbiAgLy8gUmVtb3ZlIHRoZSAncHJlc2VuY2UnIGNvbnN0cmFpbnQgZm9yIGFueSBrZXlzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCBpbiAncmVxdWlyZWRDYXBzJ1xuICAvLyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhpcyBjb25zdHJhaW50IGhhcyBhbHJlYWR5IHBhc3NlZFxuICBsZXQgZmlsdGVyZWRDb25zdHJhaW50cyA9IHsuLi5jb25zdHJhaW50c307XG4gIGxldCByZXF1aXJlZENhcHNLZXlzID0gXy5rZXlzKHJlcXVpcmVkQ2Fwcyk7XG4gIGZvciAobGV0IGtleSBvZiBfLmtleXMoZmlsdGVyZWRDb25zdHJhaW50cykpIHtcbiAgICBpZiAocmVxdWlyZWRDYXBzS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBkZWxldGUgZmlsdGVyZWRDb25zdHJhaW50c1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGFsbCBvZiB0aGUgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0aWVzIGFuZCByZXR1cm4gYW4gYXJyYXkgd2l0aCBvbmx5IHRoZSB2YWxpZCBjYXBzIChzZWUgc3BlYyAjNSlcbiAgbGV0IHZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgbGV0IHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzID0gYWxsRmlyc3RNYXRjaENhcHMubWFwKChmaXJzdE1hdGNoQ2FwcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBmaXJzdE1hdGNoIGNhcHNcbiAgICAgIHJldHVybiBzaG91bGRWYWxpZGF0ZUNhcHMgPyB2YWxpZGF0ZUNhcHMoZmlyc3RNYXRjaENhcHMsIGZpbHRlcmVkQ29uc3RyYWludHMpIDogZmlyc3RNYXRjaENhcHM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pLmZpbHRlcigoY2FwcykgPT4gIV8uaXNOdWxsKGNhcHMpKTtcblxuICAvLyBUcnkgdG8gbWVyZ2UgcmVxdWlyZWRDYXBzIHdpdGggZmlyc3QgbWF0Y2ggY2FwYWJpbGl0aWVzLCBicmVhayBvbmNlIGl0IGZpbmRzIGl0cyBmaXJzdCBtYXRjaCAoc2VlIHNwZWMgIzYpXG4gIGxldCBtYXRjaGVkQ2FwcyA9IG51bGw7XG4gIGZvciAobGV0IGZpcnN0TWF0Y2hDYXBzIG9mIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWRDYXBzID0gbWVyZ2VDYXBzKHJlcXVpcmVkQ2FwcywgZmlyc3RNYXRjaENhcHMpO1xuICAgICAgaWYgKG1hdGNoZWRDYXBzKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oZXJyLm1lc3NhZ2UpO1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHZhcmlhYmxlcyBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICByZXR1cm4ge3JlcXVpcmVkQ2FwcywgYWxsRmlyc3RNYXRjaENhcHMsIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzLCBtYXRjaGVkQ2FwcywgdmFsaWRhdGlvbkVycm9yc307XG59XG5cbi8vIENhbGxzIHBhcnNlQ2FwcyBhbmQganVzdCByZXR1cm5zIHRoZSBtYXRjaGVkQ2FwcyB2YXJpYWJsZVxuZnVuY3Rpb24gcHJvY2Vzc0NhcGFiaWxpdGllcyAoY2FwcywgY29uc3RyYWludHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICBjb25zdCB7bWF0Y2hlZENhcHMsIHZhbGlkYXRpb25FcnJvcnN9ID0gcGFyc2VDYXBzKGNhcHMsIGNvbnN0cmFpbnRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gIC8vIElmIHdlIGZvdW5kIGFuIGVycm9yIHRocm93IGFuIGV4Y2VwdGlvblxuICBpZiAoIXV0aWwuaGFzVmFsdWUobWF0Y2hlZENhcHMpKSB7XG4gICAgaWYgKF8uaXNBcnJheShjYXBzLmZpcnN0TWF0Y2gpICYmIGNhcHMuZmlyc3RNYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBJZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSAnZmlyc3RNYXRjaCcgY2FwLCBpbmRpY2F0ZSB0aGF0IHdlIGNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBjYXBhYmlsaXRpZXMgc2V0IGFuZCBzaG93IGFsbCB0aGUgZXJyb3JzXG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBDb3VsZCBub3QgZmluZCBtYXRjaGluZyBjYXBhYmlsaXRpZXMgZnJvbSAke0pTT04uc3RyaW5naWZ5KGNhcHMpfTpcXG4gJHt2YWxpZGF0aW9uRXJyb3JzLmpvaW4oJ1xcbicpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIGp1c3Qgc2hvdyB0aGUgc2luZ3VsYXIgZXJyb3IgbWVzc2FnZVxuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcih2YWxpZGF0aW9uRXJyb3JzWzBdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZENhcHM7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgY29weSBvZiBhIGNhcGFiaWxpdGllcyBvYmplY3Qgd2hpY2ggaGFzIHRha2VuIGV2ZXJ5dGhpbmcgd2l0aGluIHRoZSAnb3B0aW9ucydcbiAqIGNhcGFiaWxpdHkgYW5kIHByb21vdGVkIGl0IHRvIHRoZSB0b3AgbGV2ZWwuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGFzc3VtZWQgdG8gYmUgcnVuIGFmdGVyXG4gKiBhbGwgdmVuZG9yIHByZWZpeGVzIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmlwcGVkIGZyb20gdGhlIHRvcCBsZXZlbC4gU28gd2UgYXJlIGRlYWxpbmcgd2l0aCBlLmcuXG4gKiAnb3B0aW9ucycgYW5kIG5vdCAnYXBwaXVtOm9wdGlvbnMnIGF0IHRoaXMgcG9pbnQuIEFueSBwcmVmaXhlcyBfaW5zaWRlXyB0aGUgJ29wdGlvbnMnIGNhcGFiaWxpdHlcbiAqIHdpbGwgdGhlbXNlbHZlcyBiZSBzdHJpcHBlZC4gVGhpcyBpcyBkZXNpZ25lZCBhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IG9uZSB0byBvcGVyYXRlIG9uXG4gKiB1c2VyLWNvbnN0cnVjdGVkIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3JpZ2luYWxDYXBzIC0gdGhlIGNhcGFiaWxpdGllcyB0byBhbmFseXplIGFuZCBwcm9tb3RlIGZyb20gJ29wdGlvbnMnXG4gKiBAcmV0dXJuIHtvYmplY3R9IC0gdGhlIGNhcGFiaWxpdGllcyB3aXRoICdvcHRpb25zJyBwcm9tb3RlZCBpZiBuZWNlc3NhcnlcbiAqL1xuZnVuY3Rpb24gcHJvbW90ZUFwcGl1bU9wdGlvbnMgKG9yaWdpbmFsQ2Fwcykge1xuICBjb25zdCBhcHBpdW1PcHRpb25zID0gb3JpZ2luYWxDYXBzW0FQUElVTV9PUFRTX0NBUF07XG4gIGlmICghYXBwaXVtT3B0aW9ucykge1xuICAgIHJldHVybiBvcmlnaW5hbENhcHM7XG4gIH1cblxuICBsZXQgY2FwcyA9IF8uY2xvbmVEZWVwKG9yaWdpbmFsQ2Fwcyk7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGFwcGl1bU9wdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGBUaGUgJHtBUFBJVU1fT1BUU19DQVB9IGNhcGFiaWxpdHkgbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgfVxuXG4gIC8vIGZpcnN0IGdldCByaWQgb2YgYW55IHByZWZpeGVzIGluc2lkZSBhcHBpdW06b3B0aW9uc1xuICBzdHJpcEFwcGl1bVByZWZpeGVzKGFwcGl1bU9wdGlvbnMpO1xuXG4gIC8vIHdhcm4gaWYgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBhbnkga2V5cyBvbiB0aGUgYmFzZSBjYXBzIG9iamVjdFxuICBjb25zdCBvdmVyd3JpdHRlbktleXMgPSBfLmludGVyc2VjdGlvbihPYmplY3Qua2V5cyhjYXBzKSwgT2JqZWN0LmtleXMoYXBwaXVtT3B0aW9ucykpO1xuICBpZiAob3ZlcndyaXR0ZW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICBsb2cud2FybihgRm91bmQgY2FwYWJpbGl0aWVzIGluc2lkZSAke1BSRUZJWEVEX0FQUElVTV9PUFRTX0NBUH0gdGhhdCB3aWxsIG92ZXJ3cml0ZSBgICtcbiAgICAgICAgICAgICBgY2FwYWJpbGl0aWVzIGF0IHRoZSB0b3AgbGV2ZWw6ICR7SlNPTi5zdHJpbmdpZnkob3ZlcndyaXR0ZW5LZXlzKX1gKTtcbiAgfVxuXG4gIC8vIG5vdyBqdXN0IGFwcGx5IHRoZW0gdG8gdGhlIG1haW4gY2FwcyBvYmplY3RcbiAgY2FwcyA9IHsuLi5jYXBzLCAuLi5hcHBpdW1PcHRpb25zfTtcblxuICAvLyBhbmQgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIG9wdGlvbnMgY2FwXG4gIGRlbGV0ZSBjYXBzW0FQUElVTV9PUFRTX0NBUF07XG4gIHJldHVybiBjYXBzO1xufVxuXG5cbmV4cG9ydCB7XG4gIHBhcnNlQ2FwcywgcHJvY2Vzc0NhcGFiaWxpdGllcywgdmFsaWRhdGVDYXBzLCBtZXJnZUNhcHMsIEFQUElVTV9WRU5ET1JfUFJFRklYLCBBUFBJVU1fT1BUU19DQVAsXG4gIGZpbmROb25QcmVmaXhlZENhcHMsIGlzU3RhbmRhcmRDYXAsIHN0cmlwQXBwaXVtUHJlZml4ZXMsIHByb21vdGVBcHBpdW1PcHRpb25zLCBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAsXG59O1xuIl0sImZpbGUiOiJsaWIvYmFzZWRyaXZlci9jYXBhYmlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
259
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NhcGFiaWxpdGllcy5qcyJdLCJuYW1lcyI6WyJBUFBJVU1fVkVORE9SX1BSRUZJWCIsIkFQUElVTV9PUFRTX0NBUCIsIlBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCIsIm1lcmdlQ2FwcyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJuYW1lIiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzVW5kZWZpbmVkIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsaWRhdGVDYXBzIiwiY2FwcyIsImNvbnN0cmFpbnRzIiwib3B0cyIsInNraXBQcmVzZW5jZUNvbnN0cmFpbnQiLCJpc1BsYWluT2JqZWN0IiwiY2xvbmVEZWVwIiwia2V5Iiwia2V5cyIsInByZXNlbmNlIiwidmFsaWRhdGlvbkVycm9ycyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwicGlja0J5IiwidXRpbCIsImhhc1ZhbHVlIiwiZnVsbE1lc3NhZ2VzIiwibWVzc2FnZSIsImF0dHJpYnV0ZSIsInJlYXNvbnMiLCJyZWFzb24iLCJwdXNoIiwiam9pbiIsIlNUQU5EQVJEX0NBUFMiLCJpc1N0YW5kYXJkQ2FwIiwiY2FwIiwiZmluZCIsInN0YW5kYXJkQ2FwIiwidG9Mb3dlckNhc2UiLCJzdHJpcEFwcGl1bVByZWZpeGVzIiwicHJlZml4IiwicHJlZml4ZWRDYXBzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImJhZFByZWZpeGVkQ2FwcyIsInByZWZpeGVkQ2FwIiwic3RyaXBwZWRDYXBOYW1lIiwic3Vic3RyIiwibGVuZ3RoIiwiaXNOaWwiLCJsb2ciLCJ3YXJuIiwiZmluZE5vblByZWZpeGVkQ2FwcyIsImFsd2F5c01hdGNoIiwiZmlyc3RNYXRjaCIsImNoYWluIiwicmVkdWNlIiwidW5wcmVmaXhlZENhcHMiLCJpbmNsdWRlcyIsInVuaXEiLCJwYXJzZUNhcHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJyZXF1aXJlZENhcHMiLCJhbGxGaXJzdE1hdGNoQ2FwcyIsImlzQXJyYXkiLCJub25QcmVmaXhlZENhcHMiLCJpc0VtcHR5IiwiZmlyc3RNYXRjaENhcHMiLCJmaWx0ZXJlZENvbnN0cmFpbnRzIiwicmVxdWlyZWRDYXBzS2V5cyIsInZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzIiwibWFwIiwiZSIsImlzTnVsbCIsIm1hdGNoZWRDYXBzIiwiZXJyIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsInByb21vdGVBcHBpdW1PcHRpb25zIiwib3JpZ2luYWxDYXBzIiwiYXBwaXVtT3B0aW9ucyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJvdmVyd3JpdHRlbktleXMiLCJpbnRlcnNlY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxTQUE3Qjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsU0FBeEI7O0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUksR0FBRUYsb0JBQXFCLEdBQUVDLGVBQWdCLEVBQTNFOzs7QUFJQSxTQUFTRSxTQUFULENBQW9CQyxPQUFPLEdBQUcsRUFBOUIsRUFBa0NDLFNBQVMsR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxNQUFJQyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JKLE9BQWxCLENBQWI7O0FBRUEsT0FBSyxJQUFJLENBQUNLLElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCQyxnQkFBRUMsT0FBRixDQUFVUCxTQUFWLENBQTFCLEVBQWdEO0FBRTlDLFFBQUksQ0FBQ00sZ0JBQUVFLFdBQUYsQ0FBY1QsT0FBTyxDQUFDSyxJQUFELENBQXJCLENBQUwsRUFBbUM7QUFDakMsWUFBTSxJQUFJSyxlQUFPQyxvQkFBWCxDQUFpQyxhQUFZTixJQUFLLHVDQUFzQ08sSUFBSSxDQUFDQyxTQUFMLENBQWViLE9BQWYsQ0FBd0Isb0JBQW1C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QkFBVCxDQUErQkMsWUFBL0IsRUFBNkM7QUFDM0MsUUFBTUMsYUFBYSxHQUFHRCxZQUFZLENBQUNyRixlQUFELENBQWxDOztBQUNBLE1BQUksQ0FBQ3NGLGFBQUwsRUFBb0I7QUFDbEIsV0FBT0QsWUFBUDtBQUNEOztBQUVELE1BQUluRSxJQUFJLEdBQUdSLGdCQUFFYSxTQUFGLENBQVk4RCxZQUFaLENBQVg7O0FBQ0EsTUFBSSxDQUFDM0UsZ0JBQUVZLGFBQUYsQ0FBZ0JnRSxhQUFoQixDQUFMLEVBQXFDO0FBQ25DLFVBQU0sSUFBSXpFLGVBQU8wRSxzQkFBWCxDQUFtQyxPQUFNdkYsZUFBZ0IsK0JBQXpELENBQU47QUFDRDs7QUFHRDhDLEVBQUFBLG1CQUFtQixDQUFDd0MsYUFBRCxDQUFuQjs7QUFHQSxRQUFNRSxlQUFlLEdBQUc5RSxnQkFBRStFLFlBQUYsQ0FBZW5GLE1BQU0sQ0FBQ21CLElBQVAsQ0FBWVAsSUFBWixDQUFmLEVBQWtDWixNQUFNLENBQUNtQixJQUFQLENBQVk2RCxhQUFaLENBQWxDLENBQXhCOztBQUNBLE1BQUlFLGVBQWUsQ0FBQ2pDLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCRSxvQkFBSUMsSUFBSixDQUFVLDZCQUE0QnpELHdCQUF5Qix1QkFBdEQsR0FDQyxrQ0FBaUNjLElBQUksQ0FBQ0MsU0FBTCxDQUFld0UsZUFBZixDQUFnQyxFQUQzRTtBQUVEOztBQUdEdEUsRUFBQUEsSUFBSSxHQUFHLEVBQUMsR0FBR0EsSUFBSjtBQUFVLE9BQUdvRTtBQUFiLEdBQVA7QUFHQSxTQUFPcEUsSUFBSSxDQUFDbEIsZUFBRCxDQUFYO0FBQ0EsU0FBT2tCLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnLi4vcHJvdG9jb2wvZXJyb3JzJztcblxuY29uc3QgQVBQSVVNX1ZFTkRPUl9QUkVGSVggPSAnYXBwaXVtOic7XG5jb25zdCBBUFBJVU1fT1BUU19DQVAgPSAnb3B0aW9ucyc7XG5jb25zdCBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAgPSBgJHtBUFBJVU1fVkVORE9SX1BSRUZJWH0ke0FQUElVTV9PUFRTX0NBUH1gO1xuXG4vLyBUYWtlcyBwcmltYXJ5IGNhcHMgb2JqZWN0IGFuZCBtZXJnZXMgaXQgaW50byBhIHNlY29uZGFyeSBjYXBzIG9iamVjdC5cbi8vIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLW1lcmdpbmctY2FwYWJpbGl0aWVzKVxuZnVuY3Rpb24gbWVyZ2VDYXBzIChwcmltYXJ5ID0ge30sIHNlY29uZGFyeSA9IHt9KSB7XG4gIGxldCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmltYXJ5KTtcblxuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhzZWNvbmRhcnkpKSB7XG4gICAgLy8gT3ZlcndyaXRpbmcgaXMgbm90IGFsbG93ZWQuIFByaW1hcnkgYW5kIHNlY29uZGFyeSBtdXN0IGhhdmUgZGlmZmVyZW50IHByb3BlcnRpZXMgKHczYyBydWxlIDQuNClcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocHJpbWFyeVtuYW1lXSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYHByb3BlcnR5ICcke25hbWV9JyBzaG91bGQgbm90IGV4aXN0IG9uIGJvdGggcHJpbWFyeSAoJHtKU09OLnN0cmluZ2lmeShwcmltYXJ5KX0pIGFuZCBzZWNvbmRhcnkgKCR7SlNPTi5zdHJpbmdpZnkoc2Vjb25kYXJ5KX0pIG9iamVjdGApO1xuICAgIH1cbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFZhbGlkYXRlcyBjYXBzIGFnYWluc3QgYSBzZXQgb2YgY29uc3RyYWludHNcbmZ1bmN0aW9uIHZhbGlkYXRlQ2FwcyAoY2FwcywgY29uc3RyYWludHMgPSB7fSwgb3B0cyA9IHt9KSB7XG5cbiAgbGV0IHtza2lwUHJlc2VuY2VDb25zdHJhaW50fSA9IG9wdHM7XG5cbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgfVxuXG4gIGNvbnN0cmFpbnRzID0gXy5jbG9uZURlZXAoY29uc3RyYWludHMpOyAvLyBEZWZlbnNpdmUgY29weVxuXG4gIGlmIChza2lwUHJlc2VuY2VDb25zdHJhaW50KSB7XG4gICAgLy8gUmVtb3ZlIHRoZSAncHJlc2VuY2UnIGNvbnN0cmFpbnQgaWYgd2UncmUgbm90IGNoZWNraW5nIGZvciBpdFxuICAgIGZvciAobGV0IGtleSBvZiBfLmtleXMoY29uc3RyYWludHMpKSB7XG4gICAgICBkZWxldGUgY29uc3RyYWludHNba2V5XS5wcmVzZW5jZTtcbiAgICB9XG4gIH1cblxuICBsZXQgdmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRvci52YWxpZGF0ZShfLnBpY2tCeShjYXBzLCB1dGlsLmhhc1ZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZnVsbE1lc3NhZ2VzOiBmYWxzZX0pO1xuXG4gIGlmICh2YWxpZGF0aW9uRXJyb3JzKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBbXTtcbiAgICBmb3IgKGxldCBbYXR0cmlidXRlLCByZWFzb25zXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbkVycm9ycykpIHtcbiAgICAgIGZvciAobGV0IHJlYXNvbiBvZiByZWFzb25zKSB7XG4gICAgICAgIG1lc3NhZ2UucHVzaChgJyR7YXR0cmlidXRlfScgJHtyZWFzb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IobWVzc2FnZS5qb2luKCc7ICcpKTtcbiAgfVxuXG4gIC8vIFJldHVybiBjYXBzXG4gIHJldHVybiBjYXBzO1xufVxuXG4vLyBTdGFuZGFyZCwgbm9uLXByZWZpeGVkIGNhcGFiaWxpdGllcyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi10YWJsZS1vZi1zdGFuZGFyZC1jYXBhYmlsaXRpZXMpXG5jb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAnYnJvd3Nlck5hbWUnLFxuICAnYnJvd3NlclZlcnNpb24nLFxuICAncGxhdGZvcm1OYW1lJyxcbiAgJ2FjY2VwdEluc2VjdXJlQ2VydHMnLFxuICAncGFnZUxvYWRTdHJhdGVneScsXG4gICdwcm94eScsXG4gICdzZXRXaW5kb3dSZWN0JyxcbiAgJ3RpbWVvdXRzJyxcbiAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuXTtcblxuZnVuY3Rpb24gaXNTdGFuZGFyZENhcCAoY2FwKSB7XG4gIHJldHVybiAhIV8uZmluZChTVEFOREFSRF9DQVBTLCAoc3RhbmRhcmRDYXApID0+IHN0YW5kYXJkQ2FwLnRvTG93ZXJDYXNlKCkgPT09IGAke2NhcH1gLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vLyBJZiB0aGUgJ2FwcGl1bTonIHByZWZpeCB3YXMgcHJvdmlkZWQgYW5kIGl0J3MgYSB2YWxpZCBjYXBhYmlsaXR5LCBzdHJpcCBvdXQgdGhlIHByZWZpeCAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1leHRlbnNpb24tY2FwYWJpbGl0aWVzKVxuLy8gKE5PVEU6IE1ldGhvZCBpcyBkZXN0cnVjdGl2ZSBhbmQgbXV0YXRlcyBjb250ZW50cyBvZiBjYXBzKVxuZnVuY3Rpb24gc3RyaXBBcHBpdW1QcmVmaXhlcyAoY2Fwcykge1xuICBjb25zdCBwcmVmaXggPSAnYXBwaXVtOic7XG4gIGNvbnN0IHByZWZpeGVkQ2FwcyA9IF8uZmlsdGVyKF8ua2V5cyhjYXBzKSwgKGNhcCkgPT4gYCR7Y2FwfWAuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgY29uc3QgYmFkUHJlZml4ZWRDYXBzID0gW107XG5cbiAgLy8gU3RyaXAgb3V0IHRoZSAnYXBwaXVtOicgcHJlZml4XG4gIGZvciAobGV0IHByZWZpeGVkQ2FwIG9mIHByZWZpeGVkQ2Fwcykge1xuICAgIGNvbnN0IHN0cmlwcGVkQ2FwTmFtZSA9IHByZWZpeGVkQ2FwLnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcblxuICAgIC8vIElmIGl0J3Mgc3RhbmRhcmQgY2FwYWJpbGl0eSB0aGF0IHdhcyBwcmVmaXhlZCwgYWRkIGl0IHRvIGFuIGFycmF5IG9mIGluY29ycmVjdGx5IHByZWZpeGVkIGNhcGFiaWxpdGllc1xuICAgIGlmIChpc1N0YW5kYXJkQ2FwKHN0cmlwcGVkQ2FwTmFtZSkpIHtcbiAgICAgIGJhZFByZWZpeGVkQ2Fwcy5wdXNoKHN0cmlwcGVkQ2FwTmFtZSk7XG4gICAgICBpZiAoXy5pc05pbChjYXBzW3N0cmlwcGVkQ2FwTmFtZV0pKSB7XG4gICAgICAgIGNhcHNbc3RyaXBwZWRDYXBOYW1lXSA9IGNhcHNbcHJlZml4ZWRDYXBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oYElnbm9yaW5nIGNhcGFiaWxpdHkgJyR7cHJlZml4ZWRDYXB9PSR7Y2Fwc1twcmVmaXhlZENhcF19JyBhbmQgYCArXG4gICAgICAgICAgYHVzaW5nIGNhcGFiaWxpdHkgJyR7c3RyaXBwZWRDYXBOYW1lfT0ke2NhcHNbc3RyaXBwZWRDYXBOYW1lXX0nYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcHNbc3RyaXBwZWRDYXBOYW1lXSA9IGNhcHNbcHJlZml4ZWRDYXBdO1xuICAgIH1cblxuICAgIC8vIFN0cmlwIG91dCB0aGUgcHJlZml4XG4gICAgZGVsZXRlIGNhcHNbcHJlZml4ZWRDYXBdO1xuICB9XG5cbiAgLy8gSWYgd2UgZm91bmQgc3RhbmRhcmQgY2FwcyB0aGF0IHdlcmUgaW5jb3JyZWN0bHkgcHJlZml4ZWQsIHRocm93IGFuIGV4Y2VwdGlvbiAoZS5nLjogZG9uJ3QgYWNjZXB0ICdhcHBpdW06cGxhdGZvcm1OYW1lJywgb25seSBhY2NlcHQganVzdCAncGxhdGZvcm1OYW1lJylcbiAgaWYgKGJhZFByZWZpeGVkQ2Fwcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nLndhcm4oYFRoZSBjYXBhYmlsaXRpZXMgJHtKU09OLnN0cmluZ2lmeShiYWRQcmVmaXhlZENhcHMpfSBhcmUgc3RhbmRhcmQgY2FwYWJpbGl0aWVzIGFuZCBkbyBub3QgcmVxdWlyZSBcImFwcGl1bTpcIiBwcmVmaXhgKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBhbiBhcnJheSBvZiBhbGwgdGhlIHVucHJlZml4ZWQgY2FwcyB0aGF0IGFyZSBiZWluZyB1c2VkIGluICdhbHdheXNNYXRjaCcgYW5kIGFsbCBvZiB0aGUgJ2ZpcnN0TWF0Y2gnIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgQSBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZpbmROb25QcmVmaXhlZENhcHMgKHthbHdheXNNYXRjaCA9IHt9LCBmaXJzdE1hdGNoID0gW119KSB7XG4gIHJldHVybiBfLmNoYWluKFthbHdheXNNYXRjaCwgLi4uZmlyc3RNYXRjaF0pXG4gICAgLnJlZHVjZSgodW5wcmVmaXhlZENhcHMsIGNhcHMpID0+IFtcbiAgICAgIC4uLnVucHJlZml4ZWRDYXBzLFxuICAgICAgLi4uXyhjYXBzKS5rZXlzKCkuZmlsdGVyKChjYXApID0+ICFjYXAuaW5jbHVkZXMoJzonKSAmJiAhaXNTdGFuZGFyZENhcChjYXApKSxcbiAgICBdLCBbXSlcbiAgICAudW5pcSgpXG4gICAgLnZhbHVlKCk7XG59XG5cbi8vIFBhcnNlIGNhcGFiaWxpdGllcyAoYmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG5mdW5jdGlvbiBwYXJzZUNhcHMgKGNhcHMsIGNvbnN0cmFpbnRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgLy8gSWYgY2FwYWJpbGl0aWVzIHJlcXVlc3QgaXMgbm90IGFuIG9iamVjdCwgcmV0dXJuIGVycm9yICgjMS4xKVxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1RoZSBjYXBhYmlsaXRpZXMgYXJndW1lbnQgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb24ocyk6IFwiY2FwYWJpbGl0aWVzXCIgbXVzdCBiZSBhIEpTT04gb2JqZWN0LicpO1xuICB9XG5cbiAgLy8gTGV0ICdyZXF1aXJlZENhcHMnIGJlIHByb3BlcnR5IG5hbWVkICdhbHdheXNNYXRjaCcgZnJvbSBjYXBhYmlsaXRpZXMgcmVxdWVzdCAoIzIpXG4gIC8vIGFuZCAnYWxsRmlyc3RNYXRjaENhcHMnIGJlIHByb3BlcnR5IG5hbWVkICdmaXJzdE1hdGNoJyBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0ICgjMylcbiAgbGV0IHtcbiAgICBhbHdheXNNYXRjaDogcmVxdWlyZWRDYXBzID0ge30sIC8vIElmICdyZXF1aXJlZENhcHMnIGlzIHVuZGVmaW5lZCwgc2V0IGl0IHRvIGFuIGVtcHR5IEpTT04gb2JqZWN0ICgjMi4xKVxuICAgIGZpcnN0TWF0Y2g6IGFsbEZpcnN0TWF0Y2hDYXBzID0gW3t9XSwgLy8gSWYgJ2ZpcnN0TWF0Y2gnIGlzIHVuZGVmaW5lZCBzZXQgaXQgdG8gYSBzaW5nbGV0b24gbGlzdCB3aXRoIG9uZSBlbXB0eSBvYmplY3QgKCMzLjEpXG4gIH0gPSBjYXBzO1xuXG4gIC8vIFJlamVjdCAnZmlyc3RNYXRjaCcgYXJndW1lbnQgaWYgaXQncyBub3QgYW4gYXJyYXkgKCMzLjIpXG4gIGlmICghXy5pc0FycmF5KGFsbEZpcnN0TWF0Y2hDYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1RoZSBjYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCBhcmd1bWVudCB3YXMgbm90IHZhbGlkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbihzKTogXCJjYXBhYmlsaXRpZXMuZmlyc3RNYXRjaFwiIG11c3QgYmUgYSBKU09OIGFycmF5IG9yIHVuZGVmaW5lZCcpO1xuICB9XG5cbiAgLy8gSWYgYW4gZW1wdHkgYXJyYXkgYXMgcHJvdmlkZWQsIHdlJ2xsIGJlIGZvcmdpdmluZyBhbmQgbWFrZSBpdCBhbiBhcnJheSBvZiBvbmUgZW1wdHkgb2JqZWN0XG4gIC8vIEluIHRoZSBmdXR1cmUsIHJlamVjdCAnZmlyc3RNYXRjaCcgYXJndW1lbnQgaWYgaXRzIGFycmF5IGRpZCBub3QgaGF2ZSBvbmUgb3IgbW9yZSBlbnRyaWVzICgjMy4yKVxuICBpZiAoYWxsRmlyc3RNYXRjaENhcHMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nLndhcm4oYFRoZSBmaXJzdE1hdGNoIGFycmF5IGluIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgaGFzIG5vIGVudHJpZXMuIEFkZGluZyBhbiBlbXB0eSBlbnRyeSBmbyBybm93LCBgICtcbiAgICAgIGBidXQgaXQgd2lsbCByZXF1aXJlIG9uZSBvciBtb3JlIGVudHJpZXMgYXMgVzNDIHNwZWMuYCk7XG4gICAgYWxsRmlyc3RNYXRjaENhcHMucHVzaCh7fSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3Igbm9uLXByZWZpeGVkLCBub24tc3RhbmRhcmQgY2FwYWJpbGl0aWVzIGFuZCBsb2cgd2FybmluZ3MgaWYgdGhleSBhcmUgZm91bmRcbiAgbGV0IG5vblByZWZpeGVkQ2FwcyA9IGZpbmROb25QcmVmaXhlZENhcHMoY2Fwcyk7XG4gIGlmICghXy5pc0VtcHR5KG5vblByZWZpeGVkQ2FwcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBBbGwgbm9uLXN0YW5kYXJkIGNhcGFiaWxpdGllcyBzaG91bGQgaGF2ZSBhIHZlbmRvciBwcmVmaXguIFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIGRpZCBub3QgaGF2ZSBvbmU6ICR7bm9uUHJlZml4ZWRDYXBzfWApO1xuICB9XG5cbiAgLy8gU3RyaXAgb3V0IHRoZSAnYXBwaXVtOicgcHJlZml4IGZyb20gYWxsXG4gIHN0cmlwQXBwaXVtUHJlZml4ZXMocmVxdWlyZWRDYXBzKTtcbiAgZm9yIChsZXQgZmlyc3RNYXRjaENhcHMgb2YgYWxsRmlyc3RNYXRjaENhcHMpIHtcbiAgICBzdHJpcEFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hDYXBzKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoZSByZXF1aXJlZENhcHMuIEJ1dCBkb24ndCB2YWxpZGF0ZSAncHJlc2VuY2UnIGJlY2F1c2UgaWYgdGhhdCBjb25zdHJhaW50IGZhaWxzIG9uICdhbHdheXNNYXRjaCcgaXQgY291bGQgc3RpbGwgcGFzcyBvbiBvbmUgb2YgdGhlICdmaXJzdE1hdGNoJyBrZXlzXG4gIGlmIChzaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICByZXF1aXJlZENhcHMgPSB2YWxpZGF0ZUNhcHMocmVxdWlyZWRDYXBzLCBjb25zdHJhaW50cywge3NraXBQcmVzZW5jZUNvbnN0cmFpbnQ6IHRydWV9KTtcbiAgfVxuXG5cbiAgLy8gUmVtb3ZlIHRoZSAncHJlc2VuY2UnIGNvbnN0cmFpbnQgZm9yIGFueSBrZXlzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCBpbiAncmVxdWlyZWRDYXBzJ1xuICAvLyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhpcyBjb25zdHJhaW50IGhhcyBhbHJlYWR5IHBhc3NlZFxuICBsZXQgZmlsdGVyZWRDb25zdHJhaW50cyA9IHsuLi5jb25zdHJhaW50c307XG4gIGxldCByZXF1aXJlZENhcHNLZXlzID0gXy5rZXlzKHJlcXVpcmVkQ2Fwcyk7XG4gIGZvciAobGV0IGtleSBvZiBfLmtleXMoZmlsdGVyZWRDb25zdHJhaW50cykpIHtcbiAgICBpZiAocmVxdWlyZWRDYXBzS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBkZWxldGUgZmlsdGVyZWRDb25zdHJhaW50c1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGFsbCBvZiB0aGUgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0aWVzIGFuZCByZXR1cm4gYW4gYXJyYXkgd2l0aCBvbmx5IHRoZSB2YWxpZCBjYXBzIChzZWUgc3BlYyAjNSlcbiAgbGV0IHZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgbGV0IHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzID0gYWxsRmlyc3RNYXRjaENhcHMubWFwKChmaXJzdE1hdGNoQ2FwcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBmaXJzdE1hdGNoIGNhcHNcbiAgICAgIHJldHVybiBzaG91bGRWYWxpZGF0ZUNhcHMgPyB2YWxpZGF0ZUNhcHMoZmlyc3RNYXRjaENhcHMsIGZpbHRlcmVkQ29uc3RyYWludHMpIDogZmlyc3RNYXRjaENhcHM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pLmZpbHRlcigoY2FwcykgPT4gIV8uaXNOdWxsKGNhcHMpKTtcblxuICAvLyBUcnkgdG8gbWVyZ2UgcmVxdWlyZWRDYXBzIHdpdGggZmlyc3QgbWF0Y2ggY2FwYWJpbGl0aWVzLCBicmVhayBvbmNlIGl0IGZpbmRzIGl0cyBmaXJzdCBtYXRjaCAoc2VlIHNwZWMgIzYpXG4gIGxldCBtYXRjaGVkQ2FwcyA9IG51bGw7XG4gIGZvciAobGV0IGZpcnN0TWF0Y2hDYXBzIG9mIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWRDYXBzID0gbWVyZ2VDYXBzKHJlcXVpcmVkQ2FwcywgZmlyc3RNYXRjaENhcHMpO1xuICAgICAgaWYgKG1hdGNoZWRDYXBzKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oZXJyLm1lc3NhZ2UpO1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHZhcmlhYmxlcyBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICByZXR1cm4ge3JlcXVpcmVkQ2FwcywgYWxsRmlyc3RNYXRjaENhcHMsIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzLCBtYXRjaGVkQ2FwcywgdmFsaWRhdGlvbkVycm9yc307XG59XG5cbi8vIENhbGxzIHBhcnNlQ2FwcyBhbmQganVzdCByZXR1cm5zIHRoZSBtYXRjaGVkQ2FwcyB2YXJpYWJsZVxuZnVuY3Rpb24gcHJvY2Vzc0NhcGFiaWxpdGllcyAoY2FwcywgY29uc3RyYWludHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICBjb25zdCB7bWF0Y2hlZENhcHMsIHZhbGlkYXRpb25FcnJvcnN9ID0gcGFyc2VDYXBzKGNhcHMsIGNvbnN0cmFpbnRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gIC8vIElmIHdlIGZvdW5kIGFuIGVycm9yIHRocm93IGFuIGV4Y2VwdGlvblxuICBpZiAoIXV0aWwuaGFzVmFsdWUobWF0Y2hlZENhcHMpKSB7XG4gICAgaWYgKF8uaXNBcnJheShjYXBzLmZpcnN0TWF0Y2gpICYmIGNhcHMuZmlyc3RNYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBJZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSAnZmlyc3RNYXRjaCcgY2FwLCBpbmRpY2F0ZSB0aGF0IHdlIGNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBjYXBhYmlsaXRpZXMgc2V0IGFuZCBzaG93IGFsbCB0aGUgZXJyb3JzXG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBDb3VsZCBub3QgZmluZCBtYXRjaGluZyBjYXBhYmlsaXRpZXMgZnJvbSAke0pTT04uc3RyaW5naWZ5KGNhcHMpfTpcXG4gJHt2YWxpZGF0aW9uRXJyb3JzLmpvaW4oJ1xcbicpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIGp1c3Qgc2hvdyB0aGUgc2luZ3VsYXIgZXJyb3IgbWVzc2FnZVxuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcih2YWxpZGF0aW9uRXJyb3JzWzBdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZENhcHM7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgY29weSBvZiBhIGNhcGFiaWxpdGllcyBvYmplY3Qgd2hpY2ggaGFzIHRha2VuIGV2ZXJ5dGhpbmcgd2l0aGluIHRoZSAnb3B0aW9ucydcbiAqIGNhcGFiaWxpdHkgYW5kIHByb21vdGVkIGl0IHRvIHRoZSB0b3AgbGV2ZWwuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGFzc3VtZWQgdG8gYmUgcnVuIGFmdGVyXG4gKiBhbGwgdmVuZG9yIHByZWZpeGVzIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmlwcGVkIGZyb20gdGhlIHRvcCBsZXZlbC4gU28gd2UgYXJlIGRlYWxpbmcgd2l0aCBlLmcuXG4gKiAnb3B0aW9ucycgYW5kIG5vdCAnYXBwaXVtOm9wdGlvbnMnIGF0IHRoaXMgcG9pbnQuIEFueSBwcmVmaXhlcyBfaW5zaWRlXyB0aGUgJ29wdGlvbnMnIGNhcGFiaWxpdHlcbiAqIHdpbGwgdGhlbXNlbHZlcyBiZSBzdHJpcHBlZC4gVGhpcyBpcyBkZXNpZ25lZCBhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IG9uZSB0byBvcGVyYXRlIG9uXG4gKiB1c2VyLWNvbnN0cnVjdGVkIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3JpZ2luYWxDYXBzIC0gdGhlIGNhcGFiaWxpdGllcyB0byBhbmFseXplIGFuZCBwcm9tb3RlIGZyb20gJ29wdGlvbnMnXG4gKiBAcmV0dXJuIHtvYmplY3R9IC0gdGhlIGNhcGFiaWxpdGllcyB3aXRoICdvcHRpb25zJyBwcm9tb3RlZCBpZiBuZWNlc3NhcnlcbiAqL1xuZnVuY3Rpb24gcHJvbW90ZUFwcGl1bU9wdGlvbnMgKG9yaWdpbmFsQ2Fwcykge1xuICBjb25zdCBhcHBpdW1PcHRpb25zID0gb3JpZ2luYWxDYXBzW0FQUElVTV9PUFRTX0NBUF07XG4gIGlmICghYXBwaXVtT3B0aW9ucykge1xuICAgIHJldHVybiBvcmlnaW5hbENhcHM7XG4gIH1cblxuICBsZXQgY2FwcyA9IF8uY2xvbmVEZWVwKG9yaWdpbmFsQ2Fwcyk7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGFwcGl1bU9wdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGBUaGUgJHtBUFBJVU1fT1BUU19DQVB9IGNhcGFiaWxpdHkgbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgfVxuXG4gIC8vIGZpcnN0IGdldCByaWQgb2YgYW55IHByZWZpeGVzIGluc2lkZSBhcHBpdW06b3B0aW9uc1xuICBzdHJpcEFwcGl1bVByZWZpeGVzKGFwcGl1bU9wdGlvbnMpO1xuXG4gIC8vIHdhcm4gaWYgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBhbnkga2V5cyBvbiB0aGUgYmFzZSBjYXBzIG9iamVjdFxuICBjb25zdCBvdmVyd3JpdHRlbktleXMgPSBfLmludGVyc2VjdGlvbihPYmplY3Qua2V5cyhjYXBzKSwgT2JqZWN0LmtleXMoYXBwaXVtT3B0aW9ucykpO1xuICBpZiAob3ZlcndyaXR0ZW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICBsb2cud2FybihgRm91bmQgY2FwYWJpbGl0aWVzIGluc2lkZSAke1BSRUZJWEVEX0FQUElVTV9PUFRTX0NBUH0gdGhhdCB3aWxsIG92ZXJ3cml0ZSBgICtcbiAgICAgICAgICAgICBgY2FwYWJpbGl0aWVzIGF0IHRoZSB0b3AgbGV2ZWw6ICR7SlNPTi5zdHJpbmdpZnkob3ZlcndyaXR0ZW5LZXlzKX1gKTtcbiAgfVxuXG4gIC8vIG5vdyBqdXN0IGFwcGx5IHRoZW0gdG8gdGhlIG1haW4gY2FwcyBvYmplY3RcbiAgY2FwcyA9IHsuLi5jYXBzLCAuLi5hcHBpdW1PcHRpb25zfTtcblxuICAvLyBhbmQgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIG9wdGlvbnMgY2FwXG4gIGRlbGV0ZSBjYXBzW0FQUElVTV9PUFRTX0NBUF07XG4gIHJldHVybiBjYXBzO1xufVxuXG5cbmV4cG9ydCB7XG4gIHBhcnNlQ2FwcywgcHJvY2Vzc0NhcGFiaWxpdGllcywgdmFsaWRhdGVDYXBzLCBtZXJnZUNhcHMsIEFQUElVTV9WRU5ET1JfUFJFRklYLCBBUFBJVU1fT1BUU19DQVAsXG4gIGZpbmROb25QcmVmaXhlZENhcHMsIGlzU3RhbmRhcmRDYXAsIHN0cmlwQXBwaXVtUHJlZml4ZXMsIHByb21vdGVBcHBpdW1PcHRpb25zLCBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAsXG59O1xuIl0sImZpbGUiOiJsaWIvYmFzZWRyaXZlci9jYXBhYmlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -19,14 +19,12 @@ var _find = _interopRequireDefault(require("./find"));
|
|
|
19
19
|
|
|
20
20
|
var _log = _interopRequireDefault(require("./log"));
|
|
21
21
|
|
|
22
|
-
var _execute = _interopRequireDefault(require("./execute"));
|
|
23
|
-
|
|
24
22
|
var _event = _interopRequireDefault(require("./event"));
|
|
25
23
|
|
|
26
24
|
let commands = {};
|
|
27
|
-
Object.assign(commands, _session.default, _settings.default, _timeout.default, _find.default, _log.default,
|
|
25
|
+
Object.assign(commands, _session.default, _settings.default, _timeout.default, _find.default, _log.default, _event.default);
|
|
28
26
|
var _default = commands;
|
|
29
27
|
exports.default = _default;require('source-map-support').install();
|
|
30
28
|
|
|
31
29
|
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2luZGV4LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwic2Vzc2lvbkNtZHMiLCJzZXR0aW5nc0NtZHMiLCJ0aW1lb3V0Q21kcyIsImZpbmRDbWRzIiwibG9nQ21kcyIsImV2ZW50Q21kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUVBQyxNQUFNLENBQUNDLE1BQVAsQ0FDRUYsUUFERixFQUVFRyxnQkFGRixFQUdFQyxpQkFIRixFQUlFQyxnQkFKRixFQUtFQyxhQUxGLEVBTUVDLFlBTkYsRUFPRUMsY0FQRjtlQVdlUixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNlc3Npb25DbWRzIGZyb20gJy4vc2Vzc2lvbic7XG5pbXBvcnQgc2V0dGluZ3NDbWRzIGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IHRpbWVvdXRDbWRzIGZyb20gJy4vdGltZW91dCc7XG5pbXBvcnQgZmluZENtZHMgZnJvbSAnLi9maW5kJztcbmltcG9ydCBsb2dDbWRzIGZyb20gJy4vbG9nJztcbmltcG9ydCBldmVudENtZHMgZnJvbSAnLi9ldmVudCc7XG5cblxubGV0IGNvbW1hbmRzID0ge307XG5cbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBzZXNzaW9uQ21kcyxcbiAgc2V0dGluZ3NDbWRzLFxuICB0aW1lb3V0Q21kcyxcbiAgZmluZENtZHMsXG4gIGxvZ0NtZHMsXG4gIGV2ZW50Q21kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2luZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uIn0=
|
|
@@ -227,7 +227,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
227
227
|
if (cmd === 'createSession') {
|
|
228
228
|
this.protocol = (0, _protocol.determineProtocol)(...args);
|
|
229
229
|
this.logEvent(EVENT_SESSION_INIT);
|
|
230
|
-
} else if (cmd ===
|
|
230
|
+
} else if (cmd === _protocol.DELETE_SESSION_COMMAND) {
|
|
231
231
|
this.logEvent(EVENT_SESSION_QUIT_START);
|
|
232
232
|
}
|
|
233
233
|
|
|
@@ -253,9 +253,9 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
253
253
|
}
|
|
254
254
|
});
|
|
255
255
|
|
|
256
|
-
const res = this.isCommandsQueueEnabled
|
|
256
|
+
const res = this.isCommandsQueueEnabled ? await this.commandsQueueGuard.acquire(BaseDriver.name, commandExecutor) : await commandExecutor();
|
|
257
257
|
|
|
258
|
-
if (this.isCommandsQueueEnabled && cmd !==
|
|
258
|
+
if (this.isCommandsQueueEnabled && cmd !== _protocol.DELETE_SESSION_COMMAND) {
|
|
259
259
|
this.startNewCommandTimeout();
|
|
260
260
|
}
|
|
261
261
|
|
|
@@ -269,7 +269,7 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
269
269
|
|
|
270
270
|
if (cmd === 'createSession') {
|
|
271
271
|
this.logEvent(EVENT_SESSION_START);
|
|
272
|
-
} else if (cmd ===
|
|
272
|
+
} else if (cmd === _protocol.DELETE_SESSION_COMMAND) {
|
|
273
273
|
this.logEvent(EVENT_SESSION_QUIT_DONE);
|
|
274
274
|
}
|
|
275
275
|
|
|
@@ -388,4 +388,4 @@ var _default = BaseDriver;
|
|
|
388
388
|
exports.default = _default;require('source-map-support').install();
|
|
389
389
|
|
|
390
390
|
|
|
391
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyJdLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIkVWRU5UX1NFU1NJT05fSU5JVCIsIkVWRU5UX1NFU1NJT05fU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJCYXNlRHJpdmVyIiwiUHJvdG9jb2wiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzZXNzaW9uSWQiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsIl9jb25zdHJhaW50cyIsIl8iLCJjbG9uZURlZXAiLCJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJub0NvbW1hbmRUaW1lciIsImNvbW1hbmRzUXVldWVHdWFyZCIsIkFzeW5jTG9jayIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJub29wIiwiaW5pdGlhbE9wdHMiLCJtYW5hZ2VkRHJpdmVycyIsIl9ldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInByb3RvY29sIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImxvZyIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsIm5hbWUiLCJpbmNsdWRlcyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJhcmdzIiwic3RhcnRUaW1lIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIk5vU3VjaERyaXZlckVycm9yIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyIiwiY29tbWFuZEV4ZWN1dG9yIiwicmFjZSIsInJlc29sdmUiLCJyZWplY3QiLCJmaW5hbGx5IiwicmVtb3ZlTGlzdGVuZXIiLCJyZXMiLCJhY3F1aXJlIiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsImVuZFRpbWUiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImVyciIsImVtaXQiLCJkZWxldGVTZXNzaW9uIiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsIndlYkNvbnRleHQiLCJ2YWxpZFN0cmF0ZWdpZXMiLCJqb2luIiwiY29uY2F0IiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJyZXNldCIsImN1cnJlbnRDb25maWciLCJwcm9wZXJ0eSIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJjcmVhdGVTZXNzaW9uIiwidW5kZWZpbmVkIiwia2V5IiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm1ldGhvZCIsInVybCIsImF2b2lkU2NoZW1hIiwiaXNBcnJheSIsImF2b2lkTWV0aG9kIiwiYXZvaWRQYXRoUmVnZXgiLCJpc1JlZ0V4cCIsIm5vcm1hbGl6ZWRVcmwiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwidGVzdCIsImFkZE1hbmFnZWREcml2ZXIiLCJkcml2ZXIiLCJnZXRNYW5hZ2VkRHJpdmVycyIsImZuIiwicHJvdG90eXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUdBLE1BQU07QUFBQ0EsRUFBQUEsT0FBTyxFQUFFQztBQUFWLElBQTRCQyxZQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbEM7O0FBRUFDLGtCQUFFQyxNQUFGLENBQVM7QUFDUEMsRUFBQUEsWUFBWSxFQUFFO0FBRFAsQ0FBVDs7QUFJQSxNQUFNQyxzQkFBc0IsR0FBRyxLQUFLLElBQXBDO0FBRUEsTUFBTUMsa0JBQWtCLEdBQUcscUJBQTNCO0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsbUJBQTVCO0FBQ0EsTUFB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LFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQcm90b2NvbCwgZXJyb3JzLCBkZXRlcm1pbmVQcm90b2NvbFxufSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBQUk9UT0NPTFMsIERFRkFVTFRfQkFTRV9QQVRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBEZXZpY2VTZXR0aW5ncyBmcm9tICcuL2RldmljZS1zZXR0aW5ncyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDYXBzIH0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG4vLyBmb3IgY29tcGF0IHdpdGggcnVubmluZyB0ZXN0cyB0cmFuc3BpbGVkIGFuZCBpbi1wbGFjZVxuY29uc3Qge3ZlcnNpb246IEJBU0VEUklWRVJfVkVSfSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuQi5jb25maWcoe1xuICBjYW5jZWxsYXRpb246IHRydWUsXG59KTtcblxuY29uc3QgTkVXX0NPTU1BTkRfVElNRU9VVF9NUyA9IDYwICogMTAwMDtcblxuY29uc3QgRVZFTlRfU0VTU0lPTl9JTklUID0gJ25ld1Nlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9TVEFSVCA9ICduZXdTZXNzaW9uU3RhcnRlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQgPSAncXVpdFNlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUgPSAncXVpdFNlc3Npb25GaW5pc2hlZCc7XG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcblxuY2xhc3MgQmFzZURyaXZlciBleHRlbmRzIFByb3RvY29sIHtcblxuICAvKipcbiAgICogTWFrZSB0aGUgYmFzZWRyaXZlciB2ZXJzaW9uIGF2YWlsYWJsZSBzbyBmb3IgYW55IGRyaXZlciB3aGljaCBpbmhlcml0cyBmcm9tIHRoaXMgcGFja2FnZSwgd2VcbiAgICoga25vdyB3aGljaCB2ZXJzaW9uIG9mIGJhc2Vkcml2ZXIgaXQgaW5oZXJpdGVkIGZyb21cbiAgICovXG4gIHN0YXRpYyBiYXNlVmVyc2lvbiA9IEJBU0VEUklWRVJfVkVSO1xuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gc2V0dXAgc3RhdGVcbiAgICB0aGlzLnNlc3Npb25JZCA9IG51bGw7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICB0aGlzLmNhcHMgPSBudWxsO1xuICAgIHRoaXMub3JpZ2luYWxDYXBzID0gbnVsbDsgLy8gVG8gZ2l2ZSB0aGUgb3JpZ2luYWwgY2FwYWJpbGl0aWVzIHRvIHJlc2V0XG4gICAgdGhpcy5oZWxwZXJzID0gaGVscGVycztcblxuICAgIC8vIGJhc2VQYXRoIGlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMsIGZvciBleGFtcGxlIGluIHNldHRpbmcgdXBcbiAgICAvLyBwcm94eWluZyB0byBvdGhlciBkcml2ZXJzLCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgYmFzZSBwYXRoXG4gICAgLy8gb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICAvLyBpbml0aWFsbHkgYnV0IGl0IGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBkdXJpbmcgYW55IGFjdHVhbCBwcm9ncmFtXG4gICAgLy8gZXhlY3V0aW9uIGJ5IHRoZSByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHdoaWNoIGlzIG5lY2Vzc2FyaWx5IHJ1biBhc1xuICAgIC8vIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgIHRoaXMuYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICAgIC8vIGluaXRpYWxpemUgc2VjdXJpdHkgbW9kZXNcbiAgICB0aGlzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFsbG93SW5zZWN1cmUgPSBbXTtcbiAgICB0aGlzLmRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gICAgLy8gdGltZW91dCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyA9IE5FV19DT01NQU5EX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG5cbiAgICB0aGlzLl9jb25zdHJhaW50cyA9IF8uY2xvbmVEZWVwKGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID0gdGhpcy5vcHRzLnRtcERpciB8fFxuICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fFxuICAgICAgICAgICAgICAgICAgICAgICBvcy50bXBkaXIoKTtcblxuICAgIC8vIGJhc2UtZHJpdmVyIGludGVybmFsc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB0aGlzLm5vQ29tbWFuZFRpbWVyID0gbnVsbDtcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcbiAgICB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAgIC8vIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAgLy8gd2Ugc2V0IGl0IHRvIGFuIGVtcHR5IERldmljZVNldHRpbmdzIGluc3RhbmNlIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlXG4gICAgLy8gZGVmYXVsdCBzZXR0aW5ncyBhcmUgYXBwbGllZCBldmVuIGlmIGFuIGV4dGVuZGluZyBkcml2ZXIgZG9lc24ndCB1dGlsaXplXG4gICAgLy8gdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgXy5ub29wKTtcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICAvLyBhbGxvdyBzdWJjbGFzc2VzIHRvIGhhdmUgaW50ZXJuYWwgZHJpdmVyc1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAgIC8vIHN0b3JlIGV2ZW50IHRpbWluZ3NcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkgPSB7XG4gICAgICBjb21tYW5kczogW10gLy8gY29tbWFuZHMgZ2V0IGEgc3BlY2lhbCBwbGFjZVxuICAgIH07XG5cbiAgICAvLyB1c2VkIHRvIGhhbmRsZSBkcml2ZXIgZXZlbnRzXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBjYWxsYmFjayBoYW5kbGVyIGlmIG5lZWRlZCB0byBleGVjdXRlIGEgY3VzdG9tIHBpZWNlIG9mIGNvZGVcbiAgICogd2hlbiB0aGUgZHJpdmVyIGlzIHNodXQgZG93biB1bmV4cGVjdGVkbHkuIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kXG4gICAqIHdpbGwgY2F1c2UgdGhlIGhhbmRsZXIgdG8gYmUgZXhlY3V0ZWQgbXV0aXBsZSB0aW1lc1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBjb2RlIHRvIGJlIGV4ZWN1dGVkIG9uIHVuZXhwZWN0ZWQgc2h1dGRvd24uXG4gICAqIFRoZSBmdW5jdGlvbiBtYXkgYWNjZXB0IG9uZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBlcnJvciBpbnN0YW5jZSwgd2hpY2hcbiAgICogY2F1c2VkIHRoZSBkcml2ZXIgdG8gc2h1dCBkb3duLlxuICAgKi9cbiAgb25VbmV4cGVjdGVkU2h1dGRvd24gKGhhbmRsZXIpIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCBoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgQXBwaXVtRHJpdmVyIHRvIHN0b3JlIHRoZSBkYXRhIG9mIHRoZVxuICAgKiBzcGVjaWZpYyBkcml2ZXIgc2Vzc2lvbnMuIFRoaXMgZGF0YSBjYW4gYmUgbGF0ZXIgdXNlZCB0byBhZGp1c3RcbiAgICogcHJvcGVydGllcyBmb3IgZHJpdmVyIGluc3RhbmNlcyBydW5uaW5nIGluIHBhcmFsbGVsLlxuICAgKiBPdmVycmlkZSBpdCBpbiBpbmhlcml0ZWQgZHJpdmVyIGNsYXNzZXMgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IERyaXZlciBwcm9wZXJ0aWVzIG1hcHBpbmdcbiAgICovXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgd2F5IHsjZXhlY3V0ZUNvbW1hbmR9IG1ldGhvZFxuICAgKiBoYW5kbGVzIG5ldyBkcml2ZXIgY29tbWFuZHMgcmVjZWl2ZWQgZnJvbSB0aGUgY2xpZW50LlxuICAgKiBPdmVycmlkZSBpdCBmb3IgaW5oZXJpdGVkIGNsYXNzZXMgb25seSBpbiBzcGVjaWFsIGNhc2VzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdHJ1ZSAoZGVmYXVsdCkgdGhlbiBhbGwgdGhlIGNvbW1hbmRzXG4gICAqICAgcmVjZWl2ZWQgYnkgdGhlIHBhcnRpY3VsYXIgZHJpdmVyIGluc3RhbmNlIGFyZSBnb2luZyB0byBiZSBwdXQgaW50byB0aGUgcXVldWUsXG4gICAqICAgc28gZWFjaCBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIG5vdCBiZSBleGVjdXRlZCB1bnRpbCB0aGUgcHJldmlvdXMgY29tbWFuZFxuICAgKiAgIGV4ZWN1dGlvbiBpcyBjb21wbGV0ZWQuIEZhbHNlIHZhbHVlIGRpc2FibGVzIHRoYXQgcXVldWUsIHNvIGVhY2ggZHJpdmVyIGNvbW1hbmRcbiAgICogICBpcyBleGVjdXRlZCBpbmRlcGVuZGVudGx5IGFuZCBkb2VzIG5vdCB3YWl0IGZvciBhbnl0aGluZy5cbiAgICovXG4gIGdldCBpc0NvbW1hbmRzUXVldWVFbmFibGVkICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIG1ha2UgZXZlbnRIaXN0b3J5IGEgcHJvcGVydHkgYW5kIHJldHVybiBhIGNsb25lZCBvYmplY3Qgc28gYSBjb25zdW1lciBjYW4ndFxuICAgKiBpbmFkdmVydGVudGx5IGNoYW5nZSBkYXRhIG91dHNpZGUgb2YgbG9nRXZlbnRcbiAgICovXG4gIGdldCBldmVudEhpc3RvcnkgKCkge1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLl9ldmVudEhpc3RvcnkpO1xuICB9XG5cbiAgLypcbiAgICogQVBJIG1ldGhvZCBmb3IgZHJpdmVyIGRldmVsb3BlcnMgdG8gbG9nIHRpbWluZ3MgZm9yIGltcG9ydGFudCBldmVudHNcbiAgICovXG4gIGxvZ0V2ZW50IChldmVudE5hbWUpIHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsb2cgY29tbWFuZHMgZGlyZWN0bHknKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXZlbnROYW1lICR7ZXZlbnROYW1lfWApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2V2ZW50SGlzdG9yeVtldmVudE5hbWVdKSB7XG4gICAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSA9IFtdO1xuICAgIH1cbiAgICBjb25zdCB0cyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbG9nVGltZSA9IChuZXcgRGF0ZSh0cykpLnRvVGltZVN0cmluZygpO1xuICAgIHRoaXMuX2V2ZW50SGlzdG9yeVtldmVudE5hbWVdLnB1c2godHMpO1xuICAgIGxvZy5kZWJ1ZyhgRXZlbnQgJyR7ZXZlbnROYW1lfScgbG9nZ2VkIGF0ICR7dHN9ICgke2xvZ1RpbWV9KWApO1xuICB9XG5cbiAgLypcbiAgICogT3ZlcnJpZGRlbiBpbiBhcHBpdW0gZHJpdmVyLCBidXQgaGVyZSBzbyB0aGF0IGluZGl2aWR1YWwgZHJpdmVycyBjYW4gYmVcbiAgICogdGVzdGVkIHdpdGggY2xpZW50cyB0aGF0IHBvbGxcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIHdlIG9ubHkgd2FudCBzdWJjbGFzc2VzIHRvIGV2ZXIgZXh0ZW5kIHRoZSBjb250cmFpbnRzXG4gIHNldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKGNvbnN0cmFpbnRzKSB7XG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NvbnN0cmFpbnRzLCBjb25zdHJhaW50cyk7XG4gICAgLy8gJ3ByZXNlbmNlJyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgdmFsaWRhdG9yLFxuICAgIC8vIHdoZW4gd2Ugc2F5ICd0cnVlJyB3ZSBtZWFuIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIGVtcHR5XG4gICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHRoaXMuX2NvbnN0cmFpbnRzKSkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByZXNlbmNlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlLnByZXNlbmNlID0ge1xuICAgICAgICAgIGFsbG93RW1wdHk6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25zdHJhaW50cztcbiAgfVxuXG4gIC8vIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZFxuICAvLyByZXNwb25kIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIHJlc3BvbnNlXG4gIHNlc3Npb25FeGlzdHMgKHNlc3Npb25JZCkge1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gZmFsc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICByZXR1cm4gc2Vzc2lvbklkID09PSB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8vIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tbWFuZCBzaG91bGRcbiAgLy8gYmUgcHJveGllZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyXG4gIGRyaXZlckZvclNlc3Npb24gKC8qc2Vzc2lvbklkKi8pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZ0V4dHJhQ2FwcyAoY2Fwcykge1xuICAgIGxldCBleHRyYUNhcHMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGNhcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5rZXlzKHRoaXMuX2NvbnN0cmFpbnRzKSk7XG4gICAgaWYgKGV4dHJhQ2Fwcy5sZW5ndGgpIHtcbiAgICAgIGxvZy53YXJuKGBUaGUgZm9sbG93aW5nIGNhcGFiaWxpdGllcyB3ZXJlIHByb3ZpZGVkLCBidXQgYXJlIG5vdCBgICtcbiAgICAgICAgICAgICAgIGByZWNvZ25pemVkIGJ5IEFwcGl1bTpgKTtcbiAgICAgIGZvciAoY29uc3QgY2FwIG9mIGV4dHJhQ2Fwcykge1xuICAgICAgICBsb2cud2FybihgICAke2NhcH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFZhbGlkYXRlQ2Fwcykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlQ2FwcyhjYXBzLCB0aGlzLl9jb25zdHJhaW50cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3cobmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGBUaGUgZGVzaXJlZENhcGFiaWxpdGllcyBvYmplY3Qgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGAgK1xuICAgICAgICAgICAgICAgICAgICBgZm9sbG93aW5nIHJlYXNvbihzKTogJHtlLm1lc3NhZ2V9YCkpO1xuICAgIH1cblxuICAgIHRoaXMubG9nRXh0cmFDYXBzKGNhcHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc01qc29ud3BQcm90b2NvbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQO1xuICB9XG5cbiAgaXNXM0NQcm90b2NvbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICBzZXRQcm90b2NvbE1KU09OV1AgKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIHNldFByb3RvY29sVzNDICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIHZpYSBpdHMgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgZmVhdHVyZS9jb21tYW5kXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cbiAgaXNGZWF0dXJlRW5hYmxlZCAobmFtZSkge1xuICAgIC8vIGlmIHdlIGhhdmUgZXhwbGljaXRseSBkZW5pZWQgdGhpcyBmZWF0dXJlLCByZXR1cm4gZmFsc2UgaW1tZWRpYXRlbHlcbiAgICBpZiAodGhpcy5kZW55SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmRlbnlJbnNlY3VyZSwgbmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBzcGVjaWZpY2FsbHkgaGF2ZSBhbGxvd2VkIHRoZSBmZWF0dXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLmFsbG93SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmFsbG93SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGlmIHdlJ3ZlIGdsb2JhbGx5IGFsbG93ZWQgaW5zZWN1cmUgZmVhdHVyZXMgYW5kIG5vdCBkZW5pZWRcbiAgICAvLyB0aGlzIG9uZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlbid0IGFsbG93ZWQgYW55dGhpbmcgaW5zZWN1cmUsIHRoZW4gcmVqZWN0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgZW5zdXJlRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGZWF0dXJlRW5hYmxlZChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgICAgICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBpcyB0aGUgbWFpbiBjb21tYW5kIGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIuIEl0IHdyYXBzIGNvbW1hbmRcbiAgLy8gZXhlY3V0aW9uIHdpdGggdGltZW91dCBsb2dpYywgY2hlY2tpbmcgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc2Vzc2lvbixcbiAgLy8gYW5kIGVuc3VyaW5nIHRoYXQgd2UgZXhlY3V0ZSBjb21tYW5kcyBvbmUgYXQgYSB0aW1lLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWRcbiAgLy8gYnkgTUpTT05XUCdzIGV4cHJlc3Mgcm91dGVyLlxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gZ2V0IHN0YXJ0IHRpbWUgZm9yIHRoaXMgY29tbWFuZCwgYW5kIGxvZyBpbiBzcGVjaWFsIGNhc2VzXG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIC8vIElmIGNyZWF0aW5nIGEgc2Vzc2lvbiBkZXRlcm1pbmUgaWYgVzNDIG9yIE1KU09OV1AgcHJvdG9jb2wgd2FzIHJlcXVlc3RlZCBhbmQgcmVtZW1iZXIgdGhlIGNob2ljZVxuICAgICAgdGhpcy5wcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX0lOSVQpO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSAnZGVsZXRlU2Vzc2lvbicpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9RVUlUX1NUQVJUKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYWQgYSBjb21tYW5kIHRpbWVyIHJ1bm5pbmcsIGNsZWFyIGl0IG5vdyB0aGF0IHdlJ3JlIHN0YXJ0aW5nXG4gICAgLy8gYSBuZXcgY29tbWFuZCBhbmQgc28gZG9uJ3Qgd2FudCB0byB0aW1lIG91dFxuICAgIHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gICAgaWYgKHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoJ1RoZSBkcml2ZXIgd2FzIHVuZXhwZWN0ZWRseSBzaHV0IGRvd24hJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGlzIGNvbW1hbmQsIGl0IG11c3Qgbm90IGJlIGltcGxlbWVudGVkXG4gICAgaWYgKCF0aGlzW2NtZF0pIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIGxldCB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcjtcbiAgICBjb25zdCBjb21tYW5kRXhlY3V0b3IgPSBhc3luYyAoKSA9PiBhd2FpdCBCLnJhY2UoW1xuICAgICAgdGhpc1tjbWRdKC4uLmFyZ3MpLFxuICAgICAgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciA9IHJlamVjdDtcbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIpO1xuICAgICAgfSlcbiAgICBdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmICh1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcikge1xuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lcihPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcik7XG4gICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSB0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgJiYgY21kICE9PSAnZXhlY3V0ZURyaXZlclNjcmlwdCdcbiAgICAgID8gYXdhaXQgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQuYWNxdWlyZShCYXNlRHJpdmVyLm5hbWUsIGNvbW1hbmRFeGVjdXRvcilcbiAgICAgIDogYXdhaXQgY29tbWFuZEV4ZWN1dG9yKCk7XG5cbiAgICAvLyBpZiB3ZSBoYXZlIHNldCBhIG5ldyBjb21tYW5kIHRpbWVvdXQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgc3RhcnQgYVxuICAgIC8vIHRpbWVyIG9uY2Ugd2UndmUgZmluaXNoZWQgZXhlY3V0aW5nIHRoaXMgY29tbWFuZC4gSWYgd2UgZG9uJ3QgY2xlYXJcbiAgICAvLyB0aGUgdGltZXIgKHdoaWNoIGlzIGRvbmUgd2hlbiBhIG5ldyBjb21tYW5kIGNvbWVzIGluKSwgd2Ugd2lsbCB0cmlnZ2VyXG4gICAgLy8gYXV0b21hdGljIHNlc3Npb24gZGVsZXRpb24gaW4gdGhpcy5vbkNvbW1hbmRUaW1lb3V0LiBPZiBjb3Vyc2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgdGhlIHRpbWVyIHdoZW4gdGhlIHVzZXIgaXMgc2h1dHRpbmcgZG93biB0aGUgc2Vzc2lvblxuICAgIC8vIGludGVudGlvbmFsbHlcbiAgICBpZiAodGhpcy5pc0NvbW1hbmRzUXVldWVFbmFibGVkICYmIGNtZCAhPT0gJ2RlbGV0ZVNlc3Npb24nKSB7XG4gICAgICAvLyByZXNldHRpbmcgZXhpc3RpbmcgdGltZW91dFxuICAgICAgdGhpcy5zdGFydE5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRpbWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbW1hbmRcbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkuY29tbWFuZHMucHVzaCh7Y21kLCBzdGFydFRpbWUsIGVuZFRpbWV9KTtcbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9TVEFSVCk7XG4gICAgfSBlbHNlIGlmIChjbWQgPT09ICdkZWxldGVTZXNzaW9uJykge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VW5leHBlY3RlZFNodXRkb3duIChlcnIgPSBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScpKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCBlcnIpOyAvLyBhbGxvdyBvdGhlcnMgdG8gbGlzdGVuIGZvciB0aGlzXG4gICAgdGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbih0aGlzLnNlc3Npb25JZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3ksIHdlYkNvbnRleHQgPSBmYWxzZSkge1xuICAgIGxldCB2YWxpZFN0cmF0ZWdpZXMgPSB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzO1xuICAgIGxvZy5kZWJ1ZyhgVmFsaWQgbG9jYXRvciBzdHJhdGVnaWVzIGZvciB0aGlzIHJlcXVlc3Q6ICR7dmFsaWRTdHJhdGVnaWVzLmpvaW4oJywgJyl9YCk7XG5cbiAgICBpZiAod2ViQ29udGV4dCkge1xuICAgICAgdmFsaWRTdHJhdGVnaWVzID0gdmFsaWRTdHJhdGVnaWVzLmNvbmNhdCh0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaW5jbHVkZXModmFsaWRTdHJhdGVnaWVzLCBzdHJhdGVneSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYExvY2F0b3IgU3RyYXRlZ3kgJyR7c3RyYXRlZ3l9JyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHNlc3Npb25gKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBSZXN0YXJ0IHRoZSBzZXNzaW9uIHdpdGggdGhlIG9yaWdpbmFsIGNhcHMsXG4gICAqIHByZXNlcnZpbmcgdGhlIHRpbWVvdXQgY29uZmlnLlxuICAgKi9cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGxvZy5kZWJ1ZygnUmVzZXR0aW5nIGFwcCBtaWQtc2Vzc2lvbicpO1xuICAgIGxvZy5kZWJ1ZygnUnVubmluZyBnZW5lcmljIGZ1bGwgcmVzZXQnKTtcblxuICAgIC8vIHByZXNlcnZpbmcgc3RhdGVcbiAgICBsZXQgY3VycmVudENvbmZpZyA9IHt9O1xuICAgIGZvciAobGV0IHByb3BlcnR5IG9mIFsnaW1wbGljaXRXYWl0TXMnLCAnbmV3Q29tbWFuZFRpbWVvdXRNcycsICdzZXNzaW9uSWQnLCAncmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biddKSB7XG4gICAgICBjdXJyZW50Q29uZmlnW3Byb3BlcnR5XSA9IHRoaXNbcHJvcGVydHldO1xuICAgIH1cblxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgY2FuY2VsbGVkIGR1cmluZyByZXNldC5cbiAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgICAgbG9nLmRlYnVnKCdSZXN0YXJ0aW5nIGFwcCcpO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLm9yaWdpbmFsQ2Fwcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIGFsd2F5cyByZXN0b3JlIHN0YXRlLlxuICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjdXJyZW50Q29uZmlnKSkge1xuICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoLyogc2Vzc2lvbklkICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKC8qIHNlc3Npb25JZCAqLykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNhblByb3h5ICgvKiBzZXNzaW9uSWQgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGdpdmVuIGNvbW1hbmQgcm91dGUgKGV4cHJlc3NlZCBhcyBtZXRob2QgYW5kIHVybCkgc2hvdWxkIG5vdCBiZVxuICAgKiBwcm94aWVkIGFjY29yZGluZyB0byB0aGlzIGRyaXZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIGN1cnJlbnQgc2Vzc2lvbklkIChpbiBjYXNlIHRoZSBkcml2ZXIgcnVuc1xuICAgKiBtdWx0aXBsZSBzZXNzaW9uIGlkcyBhbmQgcmVxdWlyZXMgaXQpLiBUaGlzIGlzIG5vdCB1c2VkIGluIHRoaXMgbWV0aG9kIGJ1dFxuICAgKiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUgdG8gb3ZlcnJpZGRlbiBtZXRob2RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gSFRUUCBtZXRob2Qgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSB7Pyp9IGJvZHkgLSB3ZWJkcml2ZXIgcmVxdWVzdCBib2R5XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHdoZXRoZXIgdGhlIHJvdXRlIHNob3VsZCBiZSBhdm9pZGVkXG4gICAqL1xuICBwcm94eVJvdXRlSXNBdm9pZGVkIChzZXNzaW9uSWQsIG1ldGhvZCwgdXJsLyosIGJvZHkqLykge1xuICAgIGZvciAobGV0IGF2b2lkU2NoZW1hIG9mIHRoaXMuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKSkge1xuICAgICAgaWYgKCFfLmlzQXJyYXkoYXZvaWRTY2hlbWEpIHx8IGF2b2lkU2NoZW1hLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBtdXN0IGJlIGEgbGlzdCBvZiBwYWlycycpO1xuICAgICAgfVxuICAgICAgbGV0IFthdm9pZE1ldGhvZCwgYXZvaWRQYXRoUmVnZXhdID0gYXZvaWRTY2hlbWE7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoWydHRVQnLCAnUE9TVCcsICdERUxFVEUnXSwgYXZvaWRNZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHByb3h5IGF2b2lkYW5jZSBtZXRob2QgJyR7YXZvaWRNZXRob2R9J2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzUmVnRXhwKGF2b2lkUGF0aFJlZ2V4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBwYXRoIG11c3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICAgIGxldCBub3JtYWxpemVkVXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7Xy5lc2NhcGVSZWdFeHAodGhpcy5iYXNlUGF0aCl9YCksICcnKTtcbiAgICAgIGlmIChhdm9pZE1ldGhvZCA9PT0gbWV0aG9kICYmIGF2b2lkUGF0aFJlZ2V4LnRlc3Qobm9ybWFsaXplZFVybCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFkZE1hbmFnZWREcml2ZXIgKGRyaXZlcikge1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMucHVzaChkcml2ZXIpO1xuICB9XG5cbiAgZ2V0TWFuYWdlZERyaXZlcnMgKCkge1xuICAgIHJldHVybiB0aGlzLm1hbmFnZWREcml2ZXJzO1xuICB9XG59XG5cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gIEJhc2VEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgQmFzZURyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQmFzZURyaXZlcjtcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyJdLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIkVWRU5UX1NFU1NJT05fSU5JVCIsIkVWRU5UX1NFU1NJT05fU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJCYXNlRHJpdmVyIiwiUHJvdG9jb2wiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzZXNzaW9uSWQiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsIl9jb25zdHJhaW50cyIsIl8iLCJjbG9uZURlZXAiLCJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJub0NvbW1hbmRUaW1lciIsImNvbW1hbmRzUXVldWVHdWFyZCIsIkFzeW5jTG9jayIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJub29wIiwiaW5pdGlhbE9wdHMiLCJtYW5hZ2VkRHJpdmVycyIsIl9ldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInByb3RvY29sIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImxvZyIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsIm5hbWUiLCJpbmNsdWRlcyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJhcmdzIiwic3RhcnRUaW1lIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsImNsZWFyTmV3Q29tbWFuZFRpbWVvdXQiLCJOb1N1Y2hEcml2ZXJFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJ1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciIsImNvbW1hbmRFeGVjdXRvciIsInJhY2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwicmVzIiwiYWNxdWlyZSIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJlbmRUaW1lIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJlcnIiLCJlbWl0IiwiZGVsZXRlU2Vzc2lvbiIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJ3ZWJDb250ZXh0IiwidmFsaWRTdHJhdGVnaWVzIiwiam9pbiIsImNvbmNhdCIsIkludmFsaWRTZWxlY3RvckVycm9yIiwicmVzZXQiLCJjdXJyZW50Q29uZmlnIiwicHJvcGVydHkiLCJyZXNldE9uVW5leHBlY3RlZFNodXRkb3duIiwiY3JlYXRlU2Vzc2lvbiIsInVuZGVmaW5lZCIsImtleSIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJhdm9pZFNjaGVtYSIsImlzQXJyYXkiLCJhdm9pZE1ldGhvZCIsImF2b2lkUGF0aFJlZ2V4IiwiaXNSZWdFeHAiLCJub3JtYWxpemVkVXJsIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsInRlc3QiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiZHJpdmVyIiwiZ2V0TWFuYWdlZERyaXZlcnMiLCJmbiIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0FBQUNBLEVBQUFBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsWUFBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQWxDOztBQUVBQyxrQkFBRUMsTUFBRixDQUFTO0FBQ1BDLEVBQUFBLFlBQVksRUFBRTtBQURQLENBQVQ7O0FBSUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxJQUFwQztBQUVBLE1BQU1DLGtCQUFrQixHQUFHLHFCQUEzQjtBQUNBLE1BQU1DLG1C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ZUFHY3RKLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQcm90b2NvbCwgZXJyb3JzLCBkZXRlcm1pbmVQcm90b2NvbCwgREVMRVRFX1NFU1NJT05fQ09NTUFORCxcbn0gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRGV2aWNlU2V0dGluZ3MgZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MnO1xuaW1wb3J0IHsgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IHZhbGlkYXRlQ2FwcyB9IGZyb20gJy4vY2FwYWJpbGl0aWVzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuLy8gZm9yIGNvbXBhdCB3aXRoIHJ1bm5pbmcgdGVzdHMgdHJhbnNwaWxlZCBhbmQgaW4tcGxhY2VcbmNvbnN0IHt2ZXJzaW9uOiBCQVNFRFJJVkVSX1ZFUn0gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKF9fZGlybmFtZSk7XG5cbkIuY29uZmlnKHtcbiAgY2FuY2VsbGF0aW9uOiB0cnVlLFxufSk7XG5cbmNvbnN0IE5FV19DT01NQU5EX1RJTUVPVVRfTVMgPSA2MCAqIDEwMDA7XG5cbmNvbnN0IEVWRU5UX1NFU1NJT05fSU5JVCA9ICduZXdTZXNzaW9uUmVxdWVzdGVkJztcbmNvbnN0IEVWRU5UX1NFU1NJT05fU1RBUlQgPSAnbmV3U2Vzc2lvblN0YXJ0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9RVUlUX1NUQVJUID0gJ3F1aXRTZXNzaW9uUmVxdWVzdGVkJztcbmNvbnN0IEVWRU5UX1NFU1NJT05fUVVJVF9ET05FID0gJ3F1aXRTZXNzaW9uRmluaXNoZWQnO1xuY29uc3QgT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCA9ICdvblVuZXhwZWN0ZWRTaHV0ZG93bic7XG5cbmNsYXNzIEJhc2VEcml2ZXIgZXh0ZW5kcyBQcm90b2NvbCB7XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhlIGJhc2Vkcml2ZXIgdmVyc2lvbiBhdmFpbGFibGUgc28gZm9yIGFueSBkcml2ZXIgd2hpY2ggaW5oZXJpdHMgZnJvbSB0aGlzIHBhY2thZ2UsIHdlXG4gICAqIGtub3cgd2hpY2ggdmVyc2lvbiBvZiBiYXNlZHJpdmVyIGl0IGluaGVyaXRlZCBmcm9tXG4gICAqL1xuICBzdGF0aWMgYmFzZVZlcnNpb24gPSBCQVNFRFJJVkVSX1ZFUjtcblxuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIHNldHVwIHN0YXRlXG4gICAgdGhpcy5zZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5jYXBzID0gbnVsbDtcbiAgICB0aGlzLm9yaWdpbmFsQ2FwcyA9IG51bGw7IC8vIFRvIGdpdmUgdGhlIG9yaWdpbmFsIGNhcGFiaWxpdGllcyB0byByZXNldFxuICAgIHRoaXMuaGVscGVycyA9IGhlbHBlcnM7XG5cbiAgICAvLyBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICAgLy8gcHJveHlpbmcgdG8gb3RoZXIgZHJpdmVycywgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoYXQgdGhlIGJhc2UgcGF0aFxuICAgIC8vIG9mIGFueSBpbmNvbWluZyByZXF1ZXN0IG1pZ2h0IGxvb2sgbGlrZS4gV2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0XG4gICAgLy8gaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAgIC8vIGV4ZWN1dGlvbiBieSB0aGUgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCB3aGljaCBpcyBuZWNlc3NhcmlseSBydW4gYXNcbiAgICAvLyB0aGUgZW50cnlwb2ludCBmb3IgYW55IEFwcGl1bSBzZXJ2ZXJcbiAgICB0aGlzLmJhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEg7XG5cbiAgICAvLyBpbml0aWFsaXplIHNlY3VyaXR5IG1vZGVzXG4gICAgdGhpcy5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5hbGxvd0luc2VjdXJlID0gW107XG4gICAgdGhpcy5kZW55SW5zZWN1cmUgPSBbXTtcblxuICAgIC8vIHRpbWVvdXQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuXG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBfLmNsb25lRGVlcChkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW107XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gICAgLy8gdXNlIGEgY3VzdG9tIHRtcCBkaXIgdG8gYXZvaWQgbG9zaW5nIGRhdGEgYW5kIGFwcCB3aGVuIGNvbXB1dGVyIGlzXG4gICAgLy8gcmVzdGFydGVkXG4gICAgdGhpcy5vcHRzLnRtcERpciA9IHRoaXMub3B0cy50bXBEaXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgb3MudG1wZGlyKCk7XG5cbiAgICAvLyBiYXNlLWRyaXZlciBpbnRlcm5hbHNcbiAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG4gICAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IG51bGw7XG4gICAgdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMgPSBzaG91bGRWYWxpZGF0ZUNhcHM7XG4gICAgdGhpcy5jb21tYW5kc1F1ZXVlR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbiAgICAvLyBzZXR0aW5ncyBzaG91bGQgYmUgaW5zdGFudGlhdGVkIGJ5IGRyaXZlcnMgd2hpY2ggZXh0ZW5kIEJhc2VEcml2ZXIsIGJ1dFxuICAgIC8vIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAgIC8vIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFwcGxpZWQgZXZlbiBpZiBhbiBleHRlbmRpbmcgZHJpdmVyIGRvZXNuJ3QgdXRpbGl6ZVxuICAgIC8vIHRoZSBzZXR0aW5ncyBmdW5jdGlvbmFsaXR5IGl0c2VsZlxuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe30sIF8ubm9vcCk7XG5cbiAgICAvLyBrZWVwaW5nIHRyYWNrIG9mIGluaXRpYWwgb3B0c1xuICAgIHRoaXMuaW5pdGlhbE9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gICAgLy8gYWxsb3cgc3ViY2xhc3NlcyB0byBoYXZlIGludGVybmFsIGRyaXZlcnNcbiAgICB0aGlzLm1hbmFnZWREcml2ZXJzID0gW107XG5cbiAgICAvLyBzdG9yZSBldmVudCB0aW1pbmdzXG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5ID0ge1xuICAgICAgY29tbWFuZHM6IFtdIC8vIGNvbW1hbmRzIGdldCBhIHNwZWNpYWwgcGxhY2VcbiAgICB9O1xuXG4gICAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAgKiBUaGUgZnVuY3Rpb24gbWF5IGFjY2VwdCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBhY3R1YWwgZXJyb3IgaW5zdGFuY2UsIHdoaWNoXG4gICAqIGNhdXNlZCB0aGUgZHJpdmVyIHRvIHNodXQgZG93bi5cbiAgICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duIChoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBEcml2ZXIgcHJvcGVydGllcyBtYXBwaW5nXG4gICAqL1xuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKlxuICAgKiBtYWtlIGV2ZW50SGlzdG9yeSBhIHByb3BlcnR5IGFuZCByZXR1cm4gYSBjbG9uZWQgb2JqZWN0IHNvIGEgY29uc3VtZXIgY2FuJ3RcbiAgICogaW5hZHZlcnRlbnRseSBjaGFuZ2UgZGF0YSBvdXRzaWRlIG9mIGxvZ0V2ZW50XG4gICAqL1xuICBnZXQgZXZlbnRIaXN0b3J5ICgpIHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5fZXZlbnRIaXN0b3J5KTtcbiAgfVxuXG4gIC8qXG4gICAqIEFQSSBtZXRob2QgZm9yIGRyaXZlciBkZXZlbG9wZXJzIHRvIGxvZyB0aW1pbmdzIGZvciBpbXBvcnRhbnQgZXZlbnRzXG4gICAqL1xuICBsb2dFdmVudCAoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSAobmV3IERhdGUodHMpKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICBsb2cuZGVidWcoYEV2ZW50ICcke2V2ZW50TmFtZX0nIGxvZ2dlZCBhdCAke3RzfSAoJHtsb2dUaW1lfSlgKTtcbiAgfVxuXG4gIC8qXG4gICAqIE92ZXJyaWRkZW4gaW4gYXBwaXVtIGRyaXZlciwgYnV0IGhlcmUgc28gdGhhdCBpbmRpdmlkdWFsIGRyaXZlcnMgY2FuIGJlXG4gICAqIHRlc3RlZCB3aXRoIGNsaWVudHMgdGhhdCBwb2xsXG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyB3ZSBvbmx5IHdhbnQgc3ViY2xhc3NlcyB0byBldmVyIGV4dGVuZCB0aGUgY29udHJhaW50c1xuICBzZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzIChjb25zdHJhaW50cykge1xuICAgIHRoaXMuX2NvbnN0cmFpbnRzID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jb25zdHJhaW50cywgY29uc3RyYWludHMpO1xuICAgIC8vICdwcmVzZW5jZScgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHZhbGlkYXRvcixcbiAgICAvLyB3aGVuIHdlIHNheSAndHJ1ZScgd2UgbWVhbiB0aGF0IGl0IHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSBlbXB0eVxuICAgIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIF8udG9QYWlycyh0aGlzLl9jb25zdHJhaW50cykpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcmVzZW5jZSA9PT0gdHJ1ZSkge1xuICAgICAgICB2YWx1ZS5wcmVzZW5jZSA9IHtcbiAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uc3RyYWludHM7XG4gIH1cblxuICAvLyBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGRcbiAgLy8gcmVzcG9uZCB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiByZXNwb25zZVxuICBzZXNzaW9uRXhpc3RzIChzZXNzaW9uSWQpIHtcbiAgICBpZiAoIXNlc3Npb25JZCkgcmV0dXJuIGZhbHNlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgcmV0dXJuIHNlc3Npb25JZCA9PT0gdGhpcy5zZXNzaW9uSWQ7XG4gIH1cblxuICAvLyBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbW1hbmQgc2hvdWxkXG4gIC8vIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICBkcml2ZXJGb3JTZXNzaW9uICgvKnNlc3Npb25JZCovKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2dFeHRyYUNhcHMgKGNhcHMpIHtcbiAgICBsZXQgZXh0cmFDYXBzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhjYXBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ua2V5cyh0aGlzLl9jb25zdHJhaW50cykpO1xuICAgIGlmIChleHRyYUNhcHMubGVuZ3RoKSB7XG4gICAgICBsb2cud2FybihgVGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXMgd2VyZSBwcm92aWRlZCwgYnV0IGFyZSBub3QgYCArXG4gICAgICAgICAgICAgICBgcmVjb2duaXplZCBieSBBcHBpdW06YCk7XG4gICAgICBmb3IgKGNvbnN0IGNhcCBvZiBleHRyYUNhcHMpIHtcbiAgICAgICAgbG9nLndhcm4oYCAgJHtjYXB9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihgVGhlIGRlc2lyZWRDYXBhYmlsaXRpZXMgb2JqZWN0IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBgICtcbiAgICAgICAgICAgICAgICAgICAgYGZvbGxvd2luZyByZWFzb24ocyk6ICR7ZS5tZXNzYWdlfWApKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ0V4dHJhQ2FwcyhjYXBzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNNanNvbndwUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGlzVzNDUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBzZXRQcm90b2NvbFczQyAoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCB2aWEgaXRzIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIGlzRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhyb3cgYSBoZWxwZnVsIGVycm9yIGlmIGl0J3NcbiAgICogbm90XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICovXG4gIGVuc3VyZUZlYXR1cmVFbmFibGVkIChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzRmVhdHVyZUVuYWJsZWQobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsbHkgaW5zZWN1cmUgZmVhdHVyZSAnJHtuYW1lfScgaGFzIG5vdCBiZWVuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBlbmFibGVkLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGFuZCBhY2NlcHQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHRoZSBzZWN1cml0eSByYW1pZmljYXRpb25zLCBwbGVhc2UgZG8gc28gYnkgZm9sbG93aW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB0aGUgZG9jdW1lbnRlZCBpbnN0cnVjdGlvbnMgYXQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bWAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAvYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vd3JpdGluZy1ydW5uaW5nLWFwcGl1bS9zZWN1cml0eS5tZGApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgaXMgdGhlIG1haW4gY29tbWFuZCBoYW5kbGVyIGZvciB0aGUgZHJpdmVyLiBJdCB3cmFwcyBjb21tYW5kXG4gIC8vIGV4ZWN1dGlvbiB3aXRoIHRpbWVvdXQgbG9naWMsIGNoZWNraW5nIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHNlc3Npb24sXG4gIC8vIGFuZCBlbnN1cmluZyB0aGF0IHdlIGV4ZWN1dGUgY29tbWFuZHMgb25lIGF0IGEgdGltZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkXG4gIC8vIGJ5IE1KU09OV1AncyBleHByZXNzIHJvdXRlci5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIC8vIGdldCBzdGFydCB0aW1lIGZvciB0aGlzIGNvbW1hbmQsIGFuZCBsb2cgaW4gc3BlY2lhbCBjYXNlc1xuICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGNtZCA9PT0gJ2NyZWF0ZVNlc3Npb24nKSB7XG4gICAgICAvLyBJZiBjcmVhdGluZyBhIHNlc3Npb24gZGV0ZXJtaW5lIGlmIFczQyBvciBNSlNPTldQIHByb3RvY29sIHdhcyByZXF1ZXN0ZWQgYW5kIHJlbWVtYmVyIHRoZSBjaG9pY2VcbiAgICAgIHRoaXMucHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbCguLi5hcmdzKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9JTklUKTtcbiAgICB9IGVsc2UgaWYgKGNtZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhZCBhIGNvbW1hbmQgdGltZXIgcnVubmluZywgY2xlYXIgaXQgbm93IHRoYXQgd2UncmUgc3RhcnRpbmdcbiAgICAvLyBhIG5ldyBjb21tYW5kIGFuZCBzbyBkb24ndCB3YW50IHRvIHRpbWUgb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICBpZiAodGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoaXMgY29tbWFuZCwgaXQgbXVzdCBub3QgYmUgaW1wbGVtZW50ZWRcbiAgICBpZiAoIXRoaXNbY21kXSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgbGV0IHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyO1xuICAgIGNvbnN0IGNvbW1hbmRFeGVjdXRvciA9IGFzeW5jICgpID0+IGF3YWl0IEIucmFjZShbXG4gICAgICB0aGlzW2NtZF0oLi4uYXJncyksXG4gICAgICBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyID0gcmVqZWN0O1xuICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcik7XG4gICAgICB9KVxuICAgIF0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKTtcbiAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuaXNDb21tYW5kc1F1ZXVlRW5hYmxlZFxuICAgICAgPyBhd2FpdCB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZC5hY3F1aXJlKEJhc2VEcml2ZXIubmFtZSwgY29tbWFuZEV4ZWN1dG9yKVxuICAgICAgOiBhd2FpdCBjb21tYW5kRXhlY3V0b3IoKTtcblxuICAgIC8vIGlmIHdlIGhhdmUgc2V0IGEgbmV3IGNvbW1hbmQgdGltZW91dCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBzdGFydCBhXG4gICAgLy8gdGltZXIgb25jZSB3ZSd2ZSBmaW5pc2hlZCBleGVjdXRpbmcgdGhpcyBjb21tYW5kLiBJZiB3ZSBkb24ndCBjbGVhclxuICAgIC8vIHRoZSB0aW1lciAod2hpY2ggaXMgZG9uZSB3aGVuIGEgbmV3IGNvbW1hbmQgY29tZXMgaW4pLCB3ZSB3aWxsIHRyaWdnZXJcbiAgICAvLyBhdXRvbWF0aWMgc2Vzc2lvbiBkZWxldGlvbiBpbiB0aGlzLm9uQ29tbWFuZFRpbWVvdXQuIE9mIGNvdXJzZSB3ZSBkb24ndFxuICAgIC8vIHdhbnQgdG8gdHJpZ2dlciB0aGUgdGltZXIgd2hlbiB0aGUgdXNlciBpcyBzaHV0dGluZyBkb3duIHRoZSBzZXNzaW9uXG4gICAgLy8gaW50ZW50aW9uYWxseVxuICAgIGlmICh0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgJiYgY21kICE9PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAvLyByZXNldHRpbmcgZXhpc3RpbmcgdGltZW91dFxuICAgICAgdGhpcy5zdGFydE5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRpbWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbW1hbmRcbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkuY29tbWFuZHMucHVzaCh7Y21kLCBzdGFydFRpbWUsIGVuZFRpbWV9KTtcbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9TVEFSVCk7XG4gICAgfSBlbHNlIGlmIChjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyBzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biAoZXJyID0gbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKSkge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgZXJyKTsgLy8gYWxsb3cgb3RoZXJzIHRvIGxpc3RlbiBmb3IgdGhpc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5LCB3ZWJDb250ZXh0ID0gZmFsc2UpIHtcbiAgICBsZXQgdmFsaWRTdHJhdGVnaWVzID0gdGhpcy5sb2NhdG9yU3RyYXRlZ2llcztcbiAgICBsb2cuZGVidWcoYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKCcsICcpfWApO1xuXG4gICAgaWYgKHdlYkNvbnRleHQpIHtcbiAgICAgIHZhbGlkU3RyYXRlZ2llcyA9IHZhbGlkU3RyYXRlZ2llcy5jb25jYXQodGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKHZhbGlkU3RyYXRlZ2llcywgc3RyYXRlZ3kpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKGBMb2NhdG9yIFN0cmF0ZWd5ICcke3N0cmF0ZWd5fScgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzZXNzaW9uYCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUmVzdGFydCB0aGUgc2Vzc2lvbiB3aXRoIHRoZSBvcmlnaW5hbCBjYXBzLFxuICAgKiBwcmVzZXJ2aW5nIHRoZSB0aW1lb3V0IGNvbmZpZy5cbiAgICovXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICBsb2cuZGVidWcoJ1Jlc2V0dGluZyBhcHAgbWlkLXNlc3Npb24nKTtcbiAgICBsb2cuZGVidWcoJ1J1bm5pbmcgZ2VuZXJpYyBmdWxsIHJlc2V0Jyk7XG5cbiAgICAvLyBwcmVzZXJ2aW5nIHN0YXRlXG4gICAgbGV0IGN1cnJlbnRDb25maWcgPSB7fTtcbiAgICBmb3IgKGxldCBwcm9wZXJ0eSBvZiBbJ2ltcGxpY2l0V2FpdE1zJywgJ25ld0NvbW1hbmRUaW1lb3V0TXMnLCAnc2Vzc2lvbklkJywgJ3Jlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24nXSkge1xuICAgICAgY3VycmVudENvbmZpZ1twcm9wZXJ0eV0gPSB0aGlzW3Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gcHJlc2VydmUgdGhlIHVuZXhwZWN0ZWQgc2h1dGRvd24sIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IGNhbmNlbGxlZCBkdXJpbmcgcmVzZXQuXG4gICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgIGxvZy5kZWJ1ZygnUmVzdGFydGluZyBhcHAnKTtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2Vzc2lvbih1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5vcmlnaW5hbENhcHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBhbHdheXMgcmVzdG9yZSBzdGF0ZS5cbiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY3VycmVudENvbmZpZykpIHtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKC8qIHNlc3Npb25JZCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgvKiBzZXNzaW9uSWQgKi8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjYW5Qcm94eSAoLyogc2Vzc2lvbklkICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBnaXZlbiBjb21tYW5kIHJvdXRlIChleHByZXNzZWQgYXMgbWV0aG9kIGFuZCB1cmwpIHNob3VsZCBub3QgYmVcbiAgICogcHJveGllZCBhY2NvcmRpbmcgdG8gdGhpcyBkcml2ZXJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBjdXJyZW50IHNlc3Npb25JZCAoaW4gY2FzZSB0aGUgZHJpdmVyIHJ1bnNcbiAgICogbXVsdGlwbGUgc2Vzc2lvbiBpZHMgYW5kIHJlcXVpcmVzIGl0KS4gVGhpcyBpcyBub3QgdXNlZCBpbiB0aGlzIG1ldGhvZCBidXRcbiAgICogc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHRvIG92ZXJyaWRkZW4gbWV0aG9kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0gez8qfSBib2R5IC0gd2ViZHJpdmVyIHJlcXVlc3QgYm9keVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB3aGV0aGVyIHRoZSByb3V0ZSBzaG91bGQgYmUgYXZvaWRlZFxuICAgKi9cbiAgcHJveHlSb3V0ZUlzQXZvaWRlZCAoc2Vzc2lvbklkLCBtZXRob2QsIHVybC8qLCBib2R5Ki8pIHtcbiAgICBmb3IgKGxldCBhdm9pZFNjaGVtYSBvZiB0aGlzLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGF2b2lkU2NoZW1hKSB8fCBhdm9pZFNjaGVtYS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgbXVzdCBiZSBhIGxpc3Qgb2YgcGFpcnMnKTtcbiAgICAgIH1cbiAgICAgIGxldCBbYXZvaWRNZXRob2QsIGF2b2lkUGF0aFJlZ2V4XSA9IGF2b2lkU2NoZW1hO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnR0VUJywgJ1BPU1QnLCAnREVMRVRFJ10sIGF2b2lkTWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBwcm94eSBhdm9pZGFuY2UgbWV0aG9kICcke2F2b2lkTWV0aG9kfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc1JlZ0V4cChhdm9pZFBhdGhSZWdleCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm94eSBhdm9pZGFuY2UgcGF0aCBtdXN0IGJlIGEgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgICB9XG4gICAgICBsZXQgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke18uZXNjYXBlUmVnRXhwKHRoaXMuYmFzZVBhdGgpfWApLCAnJyk7XG4gICAgICBpZiAoYXZvaWRNZXRob2QgPT09IG1ldGhvZCAmJiBhdm9pZFBhdGhSZWdleC50ZXN0KG5vcm1hbGl6ZWRVcmwpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhZGRNYW5hZ2VkRHJpdmVyIChkcml2ZXIpIHtcbiAgICB0aGlzLm1hbmFnZWREcml2ZXJzLnB1c2goZHJpdmVyKTtcbiAgfVxuXG4gIGdldE1hbmFnZWREcml2ZXJzICgpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VkRHJpdmVycztcbiAgfVxufVxuXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBCYXNlRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEJhc2VEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEJhc2VEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|