appium-adb 9.2.1 → 9.2.2
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/index.js +1 -1
- package/build/lib/adb.js +1 -1
- package/build/lib/helpers.js +1 -1
- package/build/lib/logcat.js +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/tools/aab-utils.js +1 -1
- package/build/lib/tools/adb-commands.js +1 -1
- package/build/lib/tools/adb-emu-commands.js +1 -1
- package/build/lib/tools/android-manifest.js +1 -1
- package/build/lib/tools/apk-signing.js +1 -1
- package/build/lib/tools/apk-utils.js +1 -1
- package/build/lib/tools/apks-utils.js +1 -1
- package/build/lib/tools/index.js +1 -1
- package/build/lib/tools/keyboard-commands.js +1 -1
- package/build/lib/tools/lockmgmt.js +1 -1
- package/build/lib/tools/settings-client-commands.js +1 -1
- package/build/lib/tools/system-calls.js +1 -1
- package/package.json +2 -2
|
@@ -1038,4 +1038,4 @@ var _default = systemCallMethods;
|
|
|
1038
1038
|
exports.default = _default;require('source-map-support').install();
|
|
1039
1039
|
|
|
1040
1040
|
|
|
1041
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zeXN0ZW0tY2FsbHMuanMiXSwibmFtZXMiOlsic3lzdGVtQ2FsbE1ldGhvZHMiLCJERUZBVUxUX0FEQl9SRUJPT1RfUkVUUklFUyIsIkxJTktFUl9XQVJOSU5HX1JFR0VYUCIsIkFEQl9SRVRSWV9FUlJPUl9QQVRURVJOUyIsIkJJTkFSWV9WRVJTSU9OX1BBVFRFUk4iLCJCUklER0VfVkVSU0lPTl9QQVRURVJOIiwiQ0VSVFNfUk9PVCIsIlNES19CSU5BUllfUk9PVFMiLCJNSU5fREVMQVlfQURCX0FQSV9MRVZFTCIsImdldFNka0JpbmFyeVBhdGgiLCJiaW5hcnlOYW1lIiwiZ2V0QmluYXJ5RnJvbVNka1Jvb3QiLCJnZXRCaW5hcnlOYW1lRm9yT1MiLCJfIiwibWVtb2l6ZSIsImdldEJpbmFyeU5hbWVGb3JPU01lbW9yaXplIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiaW5jbHVkZXMiLCJwYXRoIiwiZXh0bmFtZSIsImJpbmFyaWVzIiwiZnVsbEJpbmFyeU5hbWUiLCJiaW5hcnlMb2NzIiwiZ2V0U2RrQmluYXJ5TG9jYXRpb25DYW5kaWRhdGVzIiwic2RrUm9vdCIsImJ1aWxkVG9vbHNEaXJzIiwiYnVpbGRUb29sc1ZlcnNpb24iLCJmaWx0ZXIiLCJ4IiwiYmFzZW5hbWUiLCJpc0VtcHR5IiwibG9nIiwiaW5mbyIsInB1c2giLCJmbGF0dGVuIiwibWFwIiwiZGlyIiwicmVzb2x2ZSIsImJpbmFyeUxvYyIsImxvYyIsImZzIiwiZXhpc3RzIiwiaXNOdWxsIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNBcnJheSIsImdldEFuZHJvaWRCaW5hcnlQYXRoIiwiZ2V0QmluYXJ5RnJvbVBhdGgiLCJ3aGljaCIsImUiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiZGVidWciLCJzdGRvdXQiLCJleGVjdXRhYmxlIiwiZGVmYXVsdEFyZ3MiLCJtZXNzYWdlIiwibGlzdEhlYWRlciIsInN0YXJ0aW5nSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJleGNsdWRlZExpbmVzIiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImRldmljZXMiLCJzcGxpdCIsInRyaW0iLCJsaW5lIiwic29tZSIsInJlZHVjZSIsImFjYyIsInVkaWQiLCJzdGF0ZSIsImdldERldmljZXNXaXRoUmV0cnkiLCJ0aW1lb3V0TXMiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJnZXREZXZpY2VzIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJsZW5ndGgiLCJpZ24iLCJyZWNvbm5lY3QiLCJyZXN0YXJ0QWRiIiwidGFyZ2V0IiwiYXJncyIsImFkYkV4ZWMiLCJzdGRlcnIiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJraWxsU2VydmVyIiwiZXJyb3IiLCJhZGJQb3J0IiwiZXhjbHVzaXZlIiwicmVzZXRUZWxuZXRBdXRoVG9rZW4iLCJob21lRm9sZGVyUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJwbGF0Zm9ybSIsIndhcm4iLCJkc3RQYXRoIiwid3JpdGVGaWxlIiwiYWRiRXhlY0VtdSIsImNtZCIsInZlcmlmeUVtdWxhdG9yQ29ubmVjdGVkIiwiaXNFeGVjTG9ja2VkIiwiRVhFQ19PVVRQVVRfRk9STUFUIiwiT2JqZWN0IiwiZnJlZXplIiwiU1RET1VUIiwiRlVMTCIsIm9wdHMiLCJjbG9uZURlZXAiLCJ0aW1lb3V0IiwiYWRiRXhlY1RpbWVvdXQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJ0aW1lb3V0Q2FwTmFtZSIsIm91dHB1dEZvcm1hdCIsImFkYlJldHJpZWQiLCJleGVjRnVuYyIsImZpbmQiLCJhcmciLCJ0ZXN0IiwidXRpbCIsInF1b3RlIiwiam9pbiIsInJlcGxhY2UiLCJlcnJUZXh0IiwicCIsImNvZGUiLCJ3YWl0TXMiLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaW50ZXJ2YWxNcyIsInNoZWxsIiwicHJpdmlsZWdlZCIsImNtZEFyciIsImZ1bGxDbWQiLCJpc1Jvb3QiLCJjcmVhdGVTdWJQcm9jZXNzIiwiU3ViUHJvY2VzcyIsImdldEFkYlBhdGgiLCJnZXRBZGJTZXJ2ZXJQb3J0IiwiZ2V0RW11bGF0b3JQb3J0IiwiZW11bGF0b3JQb3J0IiwicG9ydCIsImdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmciLCJlbVN0ciIsInBvcnRQYXR0ZXJuIiwicGFyc2VJbnQiLCJleGVjIiwiZ2V0Q29ubmVjdGVkRW11bGF0b3JzIiwiZW11bGF0b3JzIiwiZGV2aWNlIiwicGx1cmFsaXplIiwic2V0RW11bGF0b3JQb3J0IiwiZW1Qb3J0Iiwic2V0RGV2aWNlSWQiLCJkZXZpY2VJZCIsImN1ckRldmljZUlkIiwiYXJnc0hhc0RldmljZSIsInNwbGljZSIsInNldERldmljZSIsImRldmljZU9iaiIsImdldFJ1bm5pbmdBVkQiLCJhdmROYW1lIiwiZW11bGF0b3IiLCJydW5uaW5nQVZETmFtZSIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImV4ZWNUaW1lb3V0IiwiY29ublRpbWVvdXQiLCJ0b0xvd2VyIiwiZ2V0UnVubmluZ0FWRFdpdGhSZXRyeSIsImtpbGxBbGxFbXVsYXRvcnMiLCJraWxsRW11bGF0b3IiLCJoYXNWYWx1ZSIsImlzRW11bGF0b3JDb25uZWN0ZWQiLCJsYXVuY2hBVkQiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJsYXVuY2hUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwicmV0cnlUaW1lcyIsImVtdWxhdG9yQmluYXJ5UGF0aCIsInN1YnN0ciIsImNoZWNrQXZkRXhpc3QiLCJsYXVuY2hBcmdzIiwiaXNEZWxheUFkYkZlYXR1cmVFbmFibGVkIiwiYWxsb3dEZWxheUFkYiIsInJldmlzaW9uIiwiZ2V0RW11VmVyc2lvbkluZm8iLCJjb21wYXJlVmVyc2lvbnMiLCJnZXRFbXVJbWFnZVByb3BlcnRpZXMiLCJhcGlNYXRjaCIsInNoZWxsUGFyc2UiLCJwcm9jIiwiYXNzaWduIiwib24iLCJCb29sZWFuIiwic2lnbmFsIiwid2FpdEZvckVtdWxhdG9yUmVhZHkiLCJnZXRWZXJzaW9uIiwicmVzdWx0IiwiYmluYXJ5VmVyc2lvbk1hdGNoIiwiYmluYXJ5IiwidmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsImJ1aWxkIiwiYnJpZGdlVmVyc2lvbk1hdGNoIiwiYnJpZGdlIiwiZXJyIiwid2FpdEZvckRldmljZSIsImFwcERldmljZVJlYWR5VGltZW91dCIsInJldHJpZXMiLCJwaW5nIiwicmVib290Iiwid2FzQWxyZWFkeVJvb3RlZCIsInJvb3QiLCJCIiwiZGVsYXkiLCJzZXREZXZpY2VQcm9wZXJ0eSIsInVucm9vdCIsImdldERldmljZVByb3BlcnR5IiwibXNnIiwiY2hhbmdlVXNlclByaXZpbGVnZXMiLCJpc0VsZXZhdGVkIiwicmV0cnlJZk9mZmxpbmUiLCJjbWRGdW5jIiwidG9Mb3dlckNhc2UiLCJpc1N1Y2Nlc3NmdWwiLCJmaWxlRXhpc3RzIiwicmVtb3RlUGF0aCIsInBhc3NGbGFnIiwiY2hlY2tDbWQiLCJscyIsImxpbmVzIiwibCIsImZpbGVTaXplIiwiZmlsZXMiLCJtYXRjaCIsImlzTmFOIiwiaW5zdGFsbE1pdG1DZXJ0aWZpY2F0ZSIsImNlcnQiLCJvcGVuU3NsIiwiaXNCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwic3JjQ2VydCIsImNlcnRIYXNoIiwiZHN0Q2VydENvbnRlbnQiLCJjb25jYXQiLCJkc3RDZXJ0IiwicmltcmFmIiwiaXNNaXRtQ2VydGlmaWNhdGVJbnN0YWxsZWQiLCJ0bXBDZXJ0IiwicG9zaXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLGlCQUFpQixHQUFHLEVBQXhCO0FBRUEsTUFBTUMsMEJBQTBCLEdBQUcsRUFBbkM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxzQkFBOUI7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxDQUMvQiwrQkFEK0IsRUFFL0Isa0NBRitCLEVBRy9CLGlDQUgrQixDQUFqQztB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O0FBQ0EsVUFBTWpOLFlBQUc4RCxTQUFILENBQWE2SixPQUFiLEVBQXNCZixJQUF0QixDQUFOO0FBQ0EsVUFBTTtBQUFDL0wsTUFBQUE7QUFBRCxRQUFXLE1BQU0sd0JBQUtnTSxPQUFMLEVBQWMsQ0FBQyxNQUFELEVBQVMsUUFBVCxFQUFtQixPQUFuQixFQUE0QixLQUE1QixFQUFtQ2MsT0FBbkMsQ0FBZCxDQUF2QjtBQUNBTixJQUFBQSxRQUFRLEdBQUd4TSxNQUFNLENBQUNZLElBQVAsRUFBWDtBQUNELEdBTEQsQ0FLRSxPQUFPbUosR0FBUCxFQUFZO0FBQ1osVUFBTSxJQUFJekssS0FBSixDQUFXLHdDQUFELEdBQ0MsMERBREQsR0FFQyxtQkFBa0J5SyxHQUFHLENBQUM1SixPQUFRLEVBRnpDLENBQU47QUFHRCxHQVRELFNBU1U7QUFDUixVQUFNaEIsWUFBR3lOLE1BQUgsQ0FBVVIsT0FBVixDQUFOO0FBQ0Q7O0FBQ0QsUUFBTXBKLE9BQU8sR0FBR25GLGNBQUtrUCxLQUFMLENBQVcvTixPQUFYLENBQW1CaEMsVUFBbkIsRUFBZ0MsR0FBRXdQLFFBQVMsSUFBM0MsQ0FBaEI7O0FBQ0E5TixrQkFBSXFCLEtBQUosQ0FBVyx3REFBdURpRCxPQUFRLEdBQTFFOztBQUNBLFNBQU8sTUFBTSxLQUFLbUksVUFBTCxDQUFnQm5JLE9BQWhCLENBQWI7QUFDRCxDQXhCRDs7ZUEwQmV0RyxpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgdXRpbCwgdGVtcERpciwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7XG4gIGdldEJ1aWxkVG9vbHNEaXJzLCB0b0F2ZExvY2FsZUFyZ3MsXG4gIGdldE9wZW5Tc2xGb3JPcywgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCBnZXRTZGtSb290RnJvbUVudlxufSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IGV4ZWMsIFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc2xlZXAsIHJldHJ5LCByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuXG5sZXQgc3lzdGVtQ2FsbE1ldGhvZHMgPSB7fTtcblxuY29uc3QgREVGQVVMVF9BREJfUkVCT09UX1JFVFJJRVMgPSA5MDtcbmNvbnN0IExJTktFUl9XQVJOSU5HX1JFR0VYUCA9IC9eV0FSTklORzogbGlua2VyLiskL207XG5jb25zdCBBREJfUkVUUllfRVJST1JfUEFUVEVSTlMgPSBbXG4gIC9wcm90b2NvbCBmYXVsdCBcXChubyBzdGF0dXNcXCkvaSxcbiAgL2Vycm9yOiBkZXZpY2UgKCcuKycgKT9ub3QgZm91bmQvaSxcbiAgL2Vycm9yOiBkZXZpY2Ugc3RpbGwgY29ubmVjdGluZy9pLFxuXTtcbmNvbnN0IEJJTkFSWV9WRVJTSU9OX1BBVFRFUk4gPSAvXlZlcnNpb24gKFtcXGQuXSspLShcXGQrKS9tO1xuY29uc3QgQlJJREdFX1ZFUlNJT05fUEFUVEVSTiA9IC9eQW5kcm9pZCBEZWJ1ZyBCcmlkZ2UgdmVyc2lvbiAoW1xcZC5dKykvbTtcbmNvbnN0IENFUlRTX1JPT1QgPSAnL3N5c3RlbS9ldGMvc2VjdXJpdHkvY2FjZXJ0cyc7XG5jb25zdCBTREtfQklOQVJZX1JPT1RTID0gW1xuICAncGxhdGZvcm0tdG9vbHMnLFxuICAnZW11bGF0b3InLFxuICBbJ2NtZGxpbmUtdG9vbHMnLCAnbGF0ZXN0JywgJ2JpbiddLFxuICAndG9vbHMnLFxuICBbJ3Rvb2xzJywgJ2JpbiddLFxuICAnLicgLy8gQWxsb3cgY3VzdG9tIHNka1Jvb3QgdG8gc3BlY2lmeSBmdWxsIGZvbGRlciBwYXRoXG5dO1xuY29uc3QgTUlOX0RFTEFZX0FEQl9BUElfTEVWRUwgPSAyODtcblxuLyoqXG4gKiBSZXRyaWV2ZSBmdWxsIHBhdGggdG8gdGhlIGdpdmVuIGJpbmFyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluYXJ5TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBiaW5hcnkuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZ2l2ZW4gYmluYXJ5IGluY2x1ZGluZyBjdXJyZW50IFNESyByb290LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRTZGtCaW5hcnlQYXRoID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2RrQmluYXJ5UGF0aCAoYmluYXJ5TmFtZSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRCaW5hcnlGcm9tU2RrUm9vdChiaW5hcnlOYW1lKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgZnVsbCBiaW5hcnkgbmFtZSBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbSBhcyBtZW1vdGl6ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluYXJ5TmFtZSAtIHNpbXBsZSBiaW5hcnkgbmFtZSwgZm9yIGV4YW1wbGUgJ2FuZHJvaWQnLlxuICogQHJldHVybiB7c3RyaW5nfSBGb3JtYXR0ZWQgYmluYXJ5IG5hbWUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLFxuICogICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSwgJ2FuZHJvaWQuYmF0JyBvbiBXaW5kb3dzLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRCaW5hcnlOYW1lRm9yT1MgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0QmluYXJ5TmFtZUZvck9TTWVtb3JpemUgKGJpbmFyeU5hbWUpIHtcbiAgcmV0dXJuIGdldEJpbmFyeU5hbWVGb3JPUyhiaW5hcnlOYW1lKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlIGZ1bGwgYmluYXJ5IG5hbWUgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJpbmFyeU5hbWUgLSBzaW1wbGUgYmluYXJ5IG5hbWUsIGZvciBleGFtcGxlICdhbmRyb2lkJy5cbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGJpbmFyeSBuYW1lIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSxcbiAqICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsICdhbmRyb2lkLmJhdCcgb24gV2luZG93cy5cbiAqL1xuZnVuY3Rpb24gZ2V0QmluYXJ5TmFtZUZvck9TIChiaW5hcnlOYW1lKSB7XG4gIGlmICghc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgcmV0dXJuIGJpbmFyeU5hbWU7XG4gIH1cblxuICBpZiAoWydhbmRyb2lkJywgJ2Fwa3NpZ25lcicsICdhcGthbmFseXplciddLmluY2x1ZGVzKGJpbmFyeU5hbWUpKSB7XG4gICAgcmV0dXJuIGAke2JpbmFyeU5hbWV9LmJhdGA7XG4gIH1cbiAgaWYgKCFwYXRoLmV4dG5hbWUoYmluYXJ5TmFtZSkpIHtcbiAgICByZXR1cm4gYCR7YmluYXJ5TmFtZX0uZXhlYDtcbiAgfVxuICByZXR1cm4gYmluYXJ5TmFtZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBmdWxsIHBhdGggdG8gdGhlIGdpdmVuIGJpbmFyeSBhbmQgY2FjaGVzIGl0IGludG8gYGJpbmFyaWVzYFxuICogcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQgQURCIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiaW5hcnlOYW1lIC0gU2ltcGxlIG5hbWUgb2YgYSBiaW5hcnkgZmlsZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gRnVsbCBwYXRoIHRvIHRoZSBnaXZlbiBiaW5hcnkuIFRoZSBtZXRob2QgdHJpZXNcbiAqICAgICAgICAgICAgICAgICAgdG8gZW51bWVyYXRlIGFsbCB0aGUga25vd24gbG9jYXRpb25zIHdoZXJlIHRoZSBiaW5hcnlcbiAqICAgICAgICAgICAgICAgICAgbWlnaHQgYmUgbG9jYXRlZCBhbmQgc3RvcHMgdGhlIHNlYXJjaCBhcyBzb29uIGFzIHRoZSBmaXJzdFxuICogICAgICAgICAgICAgICAgICBtYXRjaCBpcyBmb3VuZCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGJpbmFyeSB3aXRoIGdpdmVuIG5hbWUgaXMgbm90IHByZXNlbnQgYXQgYW55XG4gKiAgICAgICAgICAgICAgICAgb2Yga25vd24gbG9jYXRpb25zIG9yIEFuZHJvaWQgU0RLIGlzIG5vdCBpbnN0YWxsZWQgb24gdGhlXG4gKiAgICAgICAgICAgICAgICAgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldEJpbmFyeUZyb21TZGtSb290ID0gYXN5bmMgZnVuY3Rpb24gZ2V0QmluYXJ5RnJvbVNka1Jvb3QgKGJpbmFyeU5hbWUpIHtcbiAgaWYgKHRoaXMuYmluYXJpZXNbYmluYXJ5TmFtZV0pIHtcbiAgICByZXR1cm4gdGhpcy5iaW5hcmllc1tiaW5hcnlOYW1lXTtcbiAgfVxuICBjb25zdCBmdWxsQmluYXJ5TmFtZSA9IHRoaXMuZ2V0QmluYXJ5TmFtZUZvck9TKGJpbmFyeU5hbWUpO1xuICBjb25zdCBiaW5hcnlMb2NzID0gZ2V0U2RrQmluYXJ5TG9jYXRpb25DYW5kaWRhdGVzKHRoaXMuc2RrUm9vdCwgZnVsbEJpbmFyeU5hbWUpO1xuXG4gIC8vIGdldCBzdWJwYXRocyBmb3IgY3VycmVudGx5IGluc3RhbGxlZCBidWlsZCB0b29sIGRpcmVjdG9yaWVzXG4gIGxldCBidWlsZFRvb2xzRGlycyA9IGF3YWl0IGdldEJ1aWxkVG9vbHNEaXJzKHRoaXMuc2RrUm9vdCk7XG4gIGlmICh0aGlzLmJ1aWxkVG9vbHNWZXJzaW9uKSB7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBidWlsZFRvb2xzRGlyc1xuICAgICAgLmZpbHRlcigoeCkgPT4gcGF0aC5iYXNlbmFtZSh4KSA9PT0gdGhpcy5idWlsZFRvb2xzVmVyc2lvbik7XG4gICAgaWYgKF8uaXNFbXB0eShidWlsZFRvb2xzRGlycykpIHtcbiAgICAgIGxvZy5pbmZvKGBGb3VuZCBubyBidWlsZCB0b29scyB3aG9zZSB2ZXJzaW9uIG1hdGNoZXMgdG8gJyR7dGhpcy5idWlsZFRvb2xzVmVyc2lvbn0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyBidWlsZCB0b29scyBhdCAnJHtidWlsZFRvb2xzRGlyc30nYCk7XG4gICAgfVxuICB9XG4gIGJpbmFyeUxvY3MucHVzaCguLi4oXy5mbGF0dGVuKGJ1aWxkVG9vbHNEaXJzXG4gICAgLm1hcCgoZGlyKSA9PiBbXG4gICAgICBwYXRoLnJlc29sdmUoZGlyLCBmdWxsQmluYXJ5TmFtZSksXG4gICAgICBwYXRoLnJlc29sdmUoZGlyLCAnbGliJywgZnVsbEJpbmFyeU5hbWUpLFxuICAgIF0pKVxuICApKTtcblxuICBsZXQgYmluYXJ5TG9jID0gbnVsbDtcbiAgZm9yIChjb25zdCBsb2Mgb2YgYmluYXJ5TG9jcykge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jKSkge1xuICAgICAgYmluYXJ5TG9jID0gbG9jO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChfLmlzTnVsbChiaW5hcnlMb2MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAnJHtmdWxsQmluYXJ5TmFtZX0nIGluICR7SlNPTi5zdHJpbmdpZnkoYmluYXJ5TG9jcyl9LiBgICtcbiAgICAgIGBEbyB5b3UgaGF2ZSBBbmRyb2lkIEJ1aWxkIFRvb2xzICR7dGhpcy5idWlsZFRvb2xzVmVyc2lvbiA/IGB2ICR7dGhpcy5idWlsZFRvb2xzVmVyc2lvbn0gYCA6ICcnfWAgK1xuICAgICAgYGluc3RhbGxlZCBhdCAnJHt0aGlzLnNka1Jvb3R9Jz9gKTtcbiAgfVxuICBsb2cuaW5mbyhgVXNpbmcgJyR7ZnVsbEJpbmFyeU5hbWV9JyBmcm9tICcke2JpbmFyeUxvY30nYCk7XG4gIHRoaXMuYmluYXJpZXNbYmluYXJ5TmFtZV0gPSBiaW5hcnlMb2M7XG4gIHJldHVybiBiaW5hcnlMb2M7XG59O1xuXG4vKipcbiAqICBSZXR1cm5zIHRoZSBBbmRyb2lkIGJpbmFyaWVzIGxvY2F0aW9uc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtSb290IFRoZSBwYXRoIHRvIEFuZHJvaWQgU0RLIHJvb3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZnVsbEJpbmFyeU5hbWUgVGhlIG5hbWUgb2YgZnVsbCBiaW5hcnkgbmFtZS5cbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIFNES19CSU5BUllfUk9PVFMgcGF0aHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNka1Jvb3QgYW5kIGZ1bGxCaW5hcnlOYW1lLlxuICovXG5mdW5jdGlvbiBnZXRTZGtCaW5hcnlMb2NhdGlvbkNhbmRpZGF0ZXMgKHNka1Jvb3QsIGZ1bGxCaW5hcnlOYW1lKSB7XG4gIHJldHVybiBTREtfQklOQVJZX1JPT1RTLm1hcCgoeCkgPT5cbiAgICBwYXRoLnJlc29sdmUoc2RrUm9vdCwgLi4uKF8uaXNBcnJheSh4KSA/IHggOiBbeF0pLCBmdWxsQmluYXJ5TmFtZSkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGZ1bGwgcGF0aCB0byB0aGUgZ2l2ZW4gYmluYXJ5LlxuICogVGhpcyBtZXRob2QgZG9lcyBub3QgaGF2ZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluYXJ5TmFtZSAtIFNpbXBsZSBuYW1lIG9mIGEgYmluYXJ5IGZpbGUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gJ2FkYicsICdhbmRyb2lkJ1xuICogQHJldHVybiB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGdpdmVuIGJpbmFyeS4gVGhlIG1ldGhvZCB0cmllc1xuICogICAgICAgICAgICAgICAgICB0byBlbnVtZXJhdGUgYWxsIHRoZSBrbm93biBsb2NhdGlvbnMgd2hlcmUgdGhlIGJpbmFyeVxuICogICAgICAgICAgICAgICAgICBtaWdodCBiZSBsb2NhdGVkIGFuZCBzdG9wcyB0aGUgc2VhcmNoIGFzIHNvb24gYXMgdGhlIGZpcnN0XG4gKiAgICAgICAgICAgICAgICAgIG1hdGNoIGlzIGZvdW5kIG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqICAgICAgICAgICAgICAgICAgZS5nLiAnL1BhdGgvVG8vQW5kcm9pZC9zZGsvcGxhdGZvcm0tdG9vbHMvYWRiJ1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBiaW5hcnkgd2l0aCBnaXZlbiBuYW1lIGlzIG5vdCBwcmVzZW50IGF0IGFueVxuICogICAgICAgICAgICAgICAgIG9mIGtub3duIGxvY2F0aW9ucyBvciBBbmRyb2lkIFNESyBpcyBub3QgaW5zdGFsbGVkIG9uIHRoZVxuICogICAgICAgICAgICAgICAgIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbmRyb2lkQmluYXJ5UGF0aCAoYmluYXJ5TmFtZSkge1xuICBjb25zdCBmdWxsQmluYXJ5TmFtZSA9IGdldEJpbmFyeU5hbWVGb3JPUyhiaW5hcnlOYW1lKTtcbiAgY29uc3Qgc2RrUm9vdCA9IGdldFNka1Jvb3RGcm9tRW52KCk7XG4gIGNvbnN0IGJpbmFyeUxvY3MgPSBnZXRTZGtCaW5hcnlMb2NhdGlvbkNhbmRpZGF0ZXMoc2RrUm9vdCwgZnVsbEJpbmFyeU5hbWUpO1xuICBmb3IgKGNvbnN0IGxvYyBvZiBiaW5hcnlMb2NzKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2MpKSB7XG4gICAgICByZXR1cm4gbG9jO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kICcke2Z1bGxCaW5hcnlOYW1lfScgaW4gJHtKU09OLnN0cmluZ2lmeShiaW5hcnlMb2NzKX0uIGAgK1xuICAgIGBEbyB5b3UgaGF2ZSBBbmRyb2lkIEJ1aWxkIFRvb2xzIGluc3RhbGxlZCBhdCAnJHtzZGtSb290fSc/YCk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgZnVsbCBwYXRoIHRvIGEgYmluYXJ5IGZpbGUgdXNpbmcgdGhlIHN0YW5kYXJkIHN5c3RlbSBsb29rdXAgdG9vbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluYXJ5TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBiaW5hcnkuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgYmluYXJ5IHJlY2VpdmVkIGZyb20gJ3doaWNoJy8nd2hlcmUnXG4gKiAgICAgICAgICAgICAgICAgIG91dHB1dC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBsb29rdXAgdG9vbCByZXR1cm5zIG5vbi16ZXJvIHJldHVybiBjb2RlLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRCaW5hcnlGcm9tUGF0aCA9IGFzeW5jIGZ1bmN0aW9uIGdldEJpbmFyeUZyb21QYXRoIChiaW5hcnlOYW1lKSB7XG4gIGlmICh0aGlzLmJpbmFyaWVzW2JpbmFyeU5hbWVdKSB7XG4gICAgcmV0dXJuIHRoaXMuYmluYXJpZXNbYmluYXJ5TmFtZV07XG4gIH1cblxuICBjb25zdCBmdWxsQmluYXJ5TmFtZSA9IHRoaXMuZ2V0QmluYXJ5TmFtZUZvck9TKGJpbmFyeU5hbWUpO1xuICB0cnkge1xuICAgIGNvbnN0IGJpbmFyeUxvYyA9IGF3YWl0IGZzLndoaWNoKGZ1bGxCaW5hcnlOYW1lKTtcbiAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZnVsbEJpbmFyeU5hbWV9JyBmcm9tICcke2JpbmFyeUxvY30nYCk7XG4gICAgdGhpcy5iaW5hcmllc1tiaW5hcnlOYW1lXSA9IGJpbmFyeUxvYztcbiAgICByZXR1cm4gYmluYXJ5TG9jO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAnJHtmdWxsQmluYXJ5TmFtZX0nIGluIFBBVEguIFBsZWFzZSBzZXQgdGhlIEFORFJPSURfSE9NRSBgICtcbiAgICAgIGBvciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB0aGUgY29ycmVjdCBBbmRyb2lkIFNESyByb290IGRpcmVjdG9yeSBwYXRoLmApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERldmljZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIHVkaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhdGUgLSBDdXJyZW50IGRldmljZSBzdGF0ZSwgYXMgaXQgaXMgdmlzaWJsZSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FkYiBkZXZpY2VzIC1sXyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBkZXZpY2VzIHZpc2libGUgdG8gYWRiLlxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxEZXZpY2U+fSBUaGUgbGlzdCBvZiBkZXZpY2VzIG9yIGFuIGVtcHR5IGxpc3QgaWZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBubyBkZXZpY2VzIGFyZSBjb25uZWN0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGxpc3RpbmcgZGV2aWNlcy5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuZ2V0Q29ubmVjdGVkRGV2aWNlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbm5lY3RlZERldmljZXMgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgY29ubmVjdGVkIGRldmljZXMnKTtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKHRoaXMuZXhlY3V0YWJsZS5wYXRoLCBbLi4udGhpcy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLCAnZGV2aWNlcyddKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGdldHRpbmcgY29ubmVjdGVkIGRldmljZXMuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuICBjb25zdCBsaXN0SGVhZGVyID0gJ0xpc3Qgb2YgZGV2aWNlcyc7XG4gIC8vIGV4cGVjdGluZyBhZGIgZGV2aWNlcyB0byByZXR1cm4gb3V0cHV0IGFzXG4gIC8vIExpc3Qgb2YgZGV2aWNlcyBhdHRhY2hlZFxuICAvLyBlbXVsYXRvci01NTU0XHRkZXZpY2VcbiAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHN0ZG91dC5pbmRleE9mKGxpc3RIZWFkZXIpO1xuICBpZiAoc3RhcnRpbmdJbmRleCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3V0cHV0IHdoaWxlIHRyeWluZyB0byBnZXQgZGV2aWNlczogJHtzdGRvdXR9YCk7XG4gIH1cbiAgLy8gc2xpY2luZyBvdXRwdXQgd2UgY2FyZSBhYm91dFxuICBzdGRvdXQgPSBzdGRvdXQuc2xpY2Uoc3RhcnRpbmdJbmRleCk7XG4gIGxldCBleGNsdWRlZExpbmVzID0gW2xpc3RIZWFkZXIsICdhZGIgc2VydmVyJywgJyogZGFlbW9uJ107XG4gIGlmICghdGhpcy5hbGxvd09mZmxpbmVEZXZpY2VzKSB7XG4gICAgZXhjbHVkZWRMaW5lcy5wdXNoKCdvZmZsaW5lJyk7XG4gIH1cbiAgY29uc3QgZGV2aWNlcyA9IHN0ZG91dC5zcGxpdCgnXFxuJylcbiAgICAubWFwKF8udHJpbSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lICYmICFleGNsdWRlZExpbmVzLnNvbWUoKHgpID0+IGxpbmUuaW5jbHVkZXMoeCkpKVxuICAgIC5yZWR1Y2UoKGFjYywgbGluZSkgPT4ge1xuICAgICAgLy8gc3RhdGUgaXMgXCJkZXZpY2VcIiwgYWZhaWNcbiAgICAgIGNvbnN0IFt1ZGlkLCBzdGF0ZV0gPSBsaW5lLnNwbGl0KC9cXHMrLyk7XG4gICAgICBhY2MucHVzaCh7dWRpZCwgc3RhdGV9KTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xuICBpZiAoXy5pc0VtcHR5KGRldmljZXMpKSB7XG4gICAgbG9nLmRlYnVnKCdObyBjb25uZWN0ZWQgZGV2aWNlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYENvbm5lY3RlZCBkZXZpY2VzOiAke0pTT04uc3RyaW5naWZ5KGRldmljZXMpfWApO1xuICB9XG4gIHJldHVybiBkZXZpY2VzO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBkZXZpY2VzIHZpc2libGUgdG8gYWRiIHdpdGhpbiB0aGUgZ2l2ZW4gdGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dE1zIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBnZXQgYXQgbGVhc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgbGlzdCBpdGVtLlxuICogQHJldHVybiB7QXJyYXkuPERldmljZT59IFRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzLlxuICogQHRocm93cyB7RXJyb3J9IElmIG5vIGNvbm5lY3RlZCBkZXZpY2VzIGNhbiBiZSBkZXRlY3RlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldERldmljZXNXaXRoUmV0cnkgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzV2l0aFJldHJ5ICh0aW1lb3V0TXMgPSAyMDAwMCkge1xuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICBsb2cuZGVidWcoJ1RyeWluZyB0byBmaW5kIGEgY29ubmVjdGVkIGFuZHJvaWQgZGV2aWNlJyk7XG4gIGNvbnN0IGdldERldmljZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMgPiB0aW1lb3V0TXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UgaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXMuYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXZpY2VzID0gYXdhaXQgdGhpcy5nZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgICBpZiAoZGV2aWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBkZXZpY2VzO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGxvZy5kZWJ1ZygnQ291bGQgbm90IGZpbmQgb25saW5lIGRldmljZXMnKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZWNvbm5lY3QoKTtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIGF3YWl0IHRoaXMucmVzdGFydEFkYigpO1xuICAgIH1cbiAgICAvLyBjb29sIGRvd25cbiAgICBhd2FpdCBzbGVlcCgyMDApO1xuICAgIHJldHVybiBhd2FpdCBnZXREZXZpY2VzKCk7XG4gIH07XG4gIHJldHVybiBhd2FpdCBnZXREZXZpY2VzKCk7XG59O1xuXG4vKipcbiAqIEtpY2sgY3VycmVudCBjb25uZWN0aW9uIGZyb20gaG9zdC9kZXZpY2Ugc2lkZSBhbmQgbWFrZSBpdCByZWNvbm5lY3RcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IHRhcmdldCBbb2ZmbGluZV0gT25lIG9mIHBvc3NpYmxlIHRhcmdldHMgdG8gcmVjb25uZWN0OlxuICogb2ZmbGluZSwgZGV2aWNlIG9yIG51bGxcbiAqIFByb3ZpZGluZyBgbnVsbGAgd2lsbCBjYXVzZSByZWNvbm5lY3Rpb24gdG8gaGFwcGVuIGZyb20gdGhlIGhvc3Qgc2lkZS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIEFEQiB2ZXJzaW9uIGlzIHRvbyBvbGQgYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhpc1xuICogY29tbWFuZCBvciB0aGVyZSB3YXMgYSBmYWlsdXJlIGR1cmluZyByZWNvbm5lY3QuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLnJlY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uIHJlY29ubmVjdCAodGFyZ2V0ID0gJ29mZmxpbmUnKSB7XG4gIGxvZy5kZWJ1ZyhgUmVjb25uZWN0aW5nIGFkYiAodGFyZ2V0ICR7dGFyZ2V0fSlgKTtcblxuICBjb25zdCBhcmdzID0gWydyZWNvbm5lY3QnXTtcbiAgaWYgKHRhcmdldCkge1xuICAgIGFyZ3MucHVzaCh0YXJnZXQpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVjb25uZWN0IGFkYi4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFJlc3RhcnQgYWRiIHNlcnZlciwgdW5sZXNzIF90aGlzLnN1cHByZXNzS2lsbFNlcnZlcl8gcHJvcGVydHkgaXMgdHJ1ZS5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMucmVzdGFydEFkYiA9IGFzeW5jIGZ1bmN0aW9uIHJlc3RhcnRBZGIgKCkge1xuICBpZiAodGhpcy5zdXBwcmVzc0tpbGxTZXJ2ZXIpIHtcbiAgICBsb2cuZGVidWcoYE5vdCByZXN0YXJ0aW5nIGFiZCBzaW5jZSAnc3VwcHJlc3NLaWxsU2VydmVyJyBpcyBvbmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnUmVzdGFydGluZyBhZGInKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmtpbGxTZXJ2ZXIoKTtcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydzdGFydC1zZXJ2ZXInXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoYEVycm9yIGtpbGxpbmcgQURCIHNlcnZlciwgZ29pbmcgdG8gc2VlIGlmIGl0J3Mgb25saW5lIGFueXdheWApO1xuICB9XG59O1xuXG4vKipcbiAqIEtpbGwgYWRiIHNlcnZlci5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMua2lsbFNlcnZlciA9IGFzeW5jIGZ1bmN0aW9uIGtpbGxTZXJ2ZXIgKCkge1xuICBsb2cuZGVidWcoYEtpbGxpbmcgYWRiIHNlcnZlciBvbiBwb3J0ICcke3RoaXMuYWRiUG9ydH0nYCk7XG4gIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2tpbGwtc2VydmVyJ10sIHtcbiAgICBleGNsdXNpdmU6IHRydWUsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXNldCBUZWxuZXQgYXV0aGVudGljYXRpb24gdG9rZW4uXG4gKiBAc2VlIHtAbGluayBodHRwOi8vdG9vbHMuYW5kcm9pZC5jb20vcmVjZW50L2VtdWxhdG9yMjUxNnJlbGVhc2Vub3Rlc30gZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgdG9rZW4gcmVzZXQgd2FzIHN1Y2Nlc3NmdWwuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLnJlc2V0VGVsbmV0QXV0aFRva2VuID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIHJlc2V0VGVsbmV0QXV0aFRva2VuICgpIHtcbiAgLy8gVGhlIG1ldGhvZHMgaXMgdXNlZCB0byByZW1vdmUgdGVsbmV0IGF1dGggdG9rZW5cbiAgLy9cbiAgY29uc3QgaG9tZUZvbGRlclBhdGggPSBwcm9jZXNzLmVudlsocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgPyAnVVNFUlBST0ZJTEUnIDogJ0hPTUUnXTtcbiAgaWYgKCFob21lRm9sZGVyUGF0aCkge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgZmluZCB0aGUgcGF0aCB0byB1c2VyIGhvbWUgZm9sZGVyLiBJZ25vcmluZyByZXNldHRpbmcgb2YgZW11bGF0b3IncyB0ZWxuZXQgYXV0aGVudGljYXRpb24gdG9rZW5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShob21lRm9sZGVyUGF0aCwgJy5lbXVsYXRvcl9jb25zb2xlX2F1dGhfdG9rZW4nKTtcbiAgbG9nLmRlYnVnKGBPdmVycmlkaW5nICR7ZHN0UGF0aH0gd2l0aCBhbiBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgdGVsbmV0IGF1dGhlbnRpY2F0aW9uIGZvciBlbXVsYXRvciBjb21tYW5kc2ApO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShkc3RQYXRoLCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cud2FybihgRXJyb3IgJHtlLm1lc3NhZ2V9IHdoaWxlIHJlc2V0dGluZyB0aGUgY29udGVudCBvZiAke2RzdFBhdGh9LiBJZ25vcmluZyByZXNldHRpbmcgb2YgZW11bGF0b3IncyB0ZWxuZXQgYXV0aGVudGljYXRpb24gdG9rZW5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59KTtcblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBnaXZlbiBlbXVsYXRvciBjb21tYW5kIHVzaW5nIF9hZGIgZW11XyB0b29sLlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNtZCAtIFRoZSBhcnJheSBvZiByZXN0IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5hZGJFeGVjRW11ID0gYXN5bmMgZnVuY3Rpb24gYWRiRXhlY0VtdSAoY21kKSB7XG4gIGF3YWl0IHRoaXMudmVyaWZ5RW11bGF0b3JDb25uZWN0ZWQoKTtcbiAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAuLi5jbWRdKTtcbn07XG5cbmxldCBpc0V4ZWNMb2NrZWQgPSBmYWxzZTtcblxuc3lzdGVtQ2FsbE1ldGhvZHMuRVhFQ19PVVRQVVRfRk9STUFUID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFNURE9VVDogJ3N0ZG91dCcsXG4gIEZVTEw6ICdmdWxsJyxcbn0pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgVGhlIHN0ZG91dCByZWNlaXZlZCBmcm9tIGV4ZWNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRlcnIgVGhlIHN0ZGVyciByZWNlaXZlZCBmcm9tIGV4ZWNcbiAqL1xuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGdpdmVuIGFkYiBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNtZCAtIFRoZSBhcnJheSBvZiByZXN0IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICBvciBhIHNpbmdsZSBzdHJpbmcgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgbWFwcGluZy4gU2VlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL25vZGUtdGVlbl9wcm9jZXNzfVxuICogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLlxuICogICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2V0IHRoZSBhZGRpdGlvbmFsIGBleGNsdXNpdmVgIHBhcmFtXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGB0cnVlYCB0aGF0IGFzc3VyZXMgbm8gb3RoZXIgcGFyYWxsZWwgYWRiIGNvbW1hbmRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBnb2luZyB0byBiZSBleGVjdXRlZCB3aGlsZSB0aGUgY3VycmVudCBvbmUgaXMgcnVubmluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGUgYG91dHB1dEZvcm1hdGAgcGFyYW0gdG8gYHN0ZG91dGAgdG8gcmVjZWl2ZSBqdXN0IHRoZSBzdGRvdXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IChkZWZhdWx0KSBvciBgZnVsbGAgdG8gcmVjZWl2ZSB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgcmVzcG9uc2UgZnJvbSBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgd2l0aCBhIHplcm8gZXhpdCBjb2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd8RXhlY1Jlc3VsdH0gLSBDb21tYW5kJ3Mgc3Rkb3V0IG9yIGFuIG9iamVjdCBjb250YWluaW5nIHN0ZG91dCBhbmQgc3RkZXJyLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgY29kZS5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuYWRiRXhlYyA9IGFzeW5jIGZ1bmN0aW9uIGFkYkV4ZWMgKGNtZCwgb3B0cyA9IHt9KSB7XG4gIGlmICghY21kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBwYXNzIGluIGEgY29tbWFuZCB0byBhZGJFeGVjKCknKTtcbiAgfVxuXG4gIG9wdHMgPSBfLmNsb25lRGVlcChvcHRzKTtcbiAgLy8gc2V0dGluZyBkZWZhdWx0IHRpbWVvdXQgZm9yIGVhY2ggY29tbWFuZCB0byBwcmV2ZW50IGluZmluaXRlIHdhaXQuXG4gIG9wdHMudGltZW91dCA9IG9wdHMudGltZW91dCB8fCB0aGlzLmFkYkV4ZWNUaW1lb3V0IHx8IERFRkFVTFRfQURCX0VYRUNfVElNRU9VVDtcbiAgb3B0cy50aW1lb3V0Q2FwTmFtZSA9IG9wdHMudGltZW91dENhcE5hbWUgfHwgJ2FkYkV4ZWNUaW1lb3V0JzsgLy8gRm9yIGVycm9yIG1lc3NhZ2VcblxuICBjb25zdCB7b3V0cHV0Rm9ybWF0ID0gdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuU1RET1VUfSA9IG9wdHM7XG5cbiAgY21kID0gXy5pc0FycmF5KGNtZCkgPyBjbWQgOiBbY21kXTtcbiAgbGV0IGFkYlJldHJpZWQgPSBmYWxzZTtcbiAgY29uc3QgZXhlY0Z1bmMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbLi4udGhpcy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLCAuLi5jbWRdO1xuICAgICAgbG9nLmRlYnVnKGBSdW5uaW5nICcke3RoaXMuZXhlY3V0YWJsZS5wYXRofSBgICtcbiAgICAgICAgKGFyZ3MuZmluZCgoYXJnKSA9PiAvXFxzKy8udGVzdChhcmcpKSA/IHV0aWwucXVvdGUoYXJncykgOiBhcmdzLmpvaW4oJyAnKSkgKyBgJ2ApO1xuICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKHRoaXMuZXhlY3V0YWJsZS5wYXRoLCBhcmdzLCBvcHRzKTtcbiAgICAgIC8vIHNvbWV0aW1lcyBBREIgcHJpbnRzIG91dCB3ZWlyZCBzdGRvdXQgd2FybmluZ3MgdGhhdCB3ZSBkb24ndCB3YW50XG4gICAgICAvLyB0byBpbmNsdWRlIGluIGFueSBvZiB0aGUgcmVzcG9uc2UgZGF0YSwgc28gbGV0J3Mgc3RyaXAgaXQgb3V0XG4gICAgICBzdGRvdXQgPSBzdGRvdXQucmVwbGFjZShMSU5LRVJfV0FSTklOR19SRUdFWFAsICcnKS50cmltKCk7XG4gICAgICByZXR1cm4gb3V0cHV0Rm9ybWF0ID09PSB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMID8ge3N0ZG91dCwgc3RkZXJyfSA6IHN0ZG91dDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJUZXh0ID0gYCR7ZS5tZXNzYWdlfSwgJHtlLnN0ZG91dH0sICR7ZS5zdGRlcnJ9YDtcbiAgICAgIGlmIChBREJfUkVUUllfRVJST1JfUEFUVEVSTlMuc29tZSgocCkgPT4gcC50ZXN0KGVyclRleHQpKSkge1xuICAgICAgICBsb2cuaW5mbyhgRXJyb3Igc2VuZGluZyBjb21tYW5kLCByZWNvbm5lY3RpbmcgZGV2aWNlIGFuZCByZXRyeWluZzogJHtjbWR9YCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgICAgICBhd2FpdCB0aGlzLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgICAgICAvLyB0cnkgYWdhaW4gb25lIHRpbWVcbiAgICAgICAgaWYgKGFkYlJldHJpZWQpIHtcbiAgICAgICAgICBhZGJSZXRyaWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZXhlY0Z1bmMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZS5jb2RlID09PSAwICYmIGUuc3Rkb3V0KSB7XG4gICAgICAgIHJldHVybiBlLnN0ZG91dC5yZXBsYWNlKExJTktFUl9XQVJOSU5HX1JFR0VYUCwgJycpLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNOdWxsKGUuY29kZSkpIHtcbiAgICAgICAgZS5tZXNzYWdlID0gYEVycm9yIGV4ZWN1dGluZyBhZGJFeGVjLiBPcmlnaW5hbCBlcnJvcjogJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICAgIGBUcnkgdG8gaW5jcmVhc2UgdGhlICR7b3B0cy50aW1lb3V0fW1zIGFkYiBleGVjdXRpb24gdGltZW91dCByZXByZXNlbnRlZCBieSAnJHtvcHRzLnRpbWVvdXRDYXBOYW1lfScgY2FwYWJpbGl0eWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlLm1lc3NhZ2UgPSBgRXJyb3IgZXhlY3V0aW5nIGFkYkV4ZWMuIE9yaWdpbmFsIGVycm9yOiAnJHtlLm1lc3NhZ2V9JzsgYCArXG4gICAgICAgICAgYENvbW1hbmQgb3V0cHV0OiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8ICc8ZW1wdHk+J31gO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGlzRXhlY0xvY2tlZCkge1xuICAgIGxvZy5kZWJ1ZygnV2FpdGluZyB1bnRpbCB0aGUgb3RoZXIgZXhjbHVzaXZlIEFEQiBjb21tYW5kIGlzIGNvbXBsZXRlZCcpO1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oKCkgPT4gIWlzRXhlY0xvY2tlZCwge1xuICAgICAgd2FpdE1zOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgIGludGVydmFsTXM6IDEwLFxuICAgIH0pO1xuICAgIGxvZy5kZWJ1ZygnQ29udGludWluZyB3aXRoIHRoZSBjdXJyZW50IEFEQiBjb21tYW5kJyk7XG4gIH1cbiAgaWYgKG9wdHMuZXhjbHVzaXZlKSB7XG4gICAgaXNFeGVjTG9ja2VkID0gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBleGVjRnVuYygpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChvcHRzLmV4Y2x1c2l2ZSkge1xuICAgICAgaXNFeGVjTG9ja2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNoZWxsRXhlY09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FkYkV4ZWNUaW1lb3V0XSAtIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIEFwcGl1bSdzIHRpbWVvdXQgY2FwYWJpbGl0eVxuICogKHVzZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2VzKS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdGltZW91dCBbYWRiRXhlY1RpbWVvdXRdIC0gY29tbWFuZCBleGVjdXRpb24gdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHByaXZpbGVnZWQgW2ZhbHN5XSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kIGFzIHJvb3QuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG91dHB1dEZvcm1hdCBbc3Rkb3V0XSAtIFdoZXRoZXIgcmVzcG9uc2Ugc2hvdWxkIGluY2x1ZGUgZnVsbCBleGVjIG91dHB1dCBvciBqdXN0IHN0ZG91dC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG90ZW50aWFsIHZhbHVlcyBhcmUgZnVsbCBvciBzdGRvdXQuXG4gKlxuICogQWxsIG90aGVyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBgZXhlY2AgY2FsbCBmcm9tIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL25vZGUtdGVlbl9wcm9jZXNzfVxuICogbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kIHVzaW5nIF9hZGIgc2hlbGxfIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPnxzdHJpbmd9IGNtZCAtIFRoZSBhcnJheSBvZiByZXN0IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIG9yIGEgc2luZ2xlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7P1NoZWxsRXhlY09wdGlvbnN9IG9wdHMgW3t9XSAtIEFkZGl0aW9uYWwgb3B0aW9ucyBtYXBwaW5nLlxuICogQHJldHVybiB7c3RyaW5nfSAtIENvbW1hbmQncyBzdGRvdXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBjb2RlLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5zaGVsbCA9IGFzeW5jIGZ1bmN0aW9uIHNoZWxsIChjbWQsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgcHJpdmlsZWdlZCxcbiAgfSA9IG9wdHM7XG5cbiAgY29uc3QgY21kQXJyID0gXy5pc0FycmF5KGNtZCkgPyBjbWQgOiBbY21kXTtcbiAgY29uc3QgZnVsbENtZCA9IFsnc2hlbGwnXTtcbiAgaWYgKHByaXZpbGVnZWQpIHtcbiAgICBsb2cuaW5mbyhgJ2FkYiBzaGVsbCAke3V0aWwucXVvdGUoY21kQXJyKX0nIHJlcXVpcmVzIHJvb3QgYWNjZXNzYCk7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNSb290KCkpIHtcbiAgICAgIGxvZy5pbmZvKCdUaGUgZGV2aWNlIGFscmVhZHkgaGFkIHJvb3QgYWNjZXNzJyk7XG4gICAgICBmdWxsQ21kLnB1c2goLi4uY21kQXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbENtZC5wdXNoKCdzdScsICdyb290JywgdXRpbC5xdW90ZShjbWRBcnIpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZnVsbENtZC5wdXNoKC4uLmNtZEFycik7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiRXhlYyhmdWxsQ21kLCBvcHRzKTtcbn07XG5cbnN5c3RlbUNhbGxNZXRob2RzLmNyZWF0ZVN1YlByb2Nlc3MgPSBmdW5jdGlvbiBjcmVhdGVTdWJQcm9jZXNzIChhcmdzID0gW10pIHtcbiAgLy8gYWRkIHRoZSBkZWZhdWx0IGFyZ3VtZW50c1xuICBhcmdzID0gWy4uLnRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncywgLi4uYXJnc107XG4gIGxvZy5kZWJ1ZyhgQ3JlYXRpbmcgQURCIHN1YnByb2Nlc3Mgd2l0aCBhcmdzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICByZXR1cm4gbmV3IFN1YlByb2Nlc3ModGhpcy5nZXRBZGJQYXRoKCksIGFyZ3MpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBhZGIgcG9ydC5cbiAqIEB0b2RvIGNhbiBwcm9iYWJseSBkZXByZWNhdGUgdGhpcyBub3cgdGhhdCB0aGUgbG9naWMgaXMganVzdCB0byByZWFkIHRoaXMuYWRiUG9ydFxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgY3VycmVudCBhZGIgcG9ydCBudW1iZXIuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldEFkYlNlcnZlclBvcnQgPSBmdW5jdGlvbiBnZXRBZGJTZXJ2ZXJQb3J0ICgpIHtcbiAgcmV0dXJuIHRoaXMuYWRiUG9ydDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZW11bGF0b3IgcG9ydCBmcm9tIF9hZGIgZGV2aXZlc18gb3V0cHV0LlxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgZW11bGF0b3IgcG9ydC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBhcmUgbm8gY29ubmVjdGVkIGRldmljZXMuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldEVtdWxhdG9yUG9ydCA9IGFzeW5jIGZ1bmN0aW9uIGdldEVtdWxhdG9yUG9ydCAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBydW5uaW5nIGVtdWxhdG9yIHBvcnQnKTtcbiAgaWYgKHRoaXMuZW11bGF0b3JQb3J0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZW11bGF0b3JQb3J0O1xuICB9XG4gIHRyeSB7XG4gICAgbGV0IGRldmljZXMgPSBhd2FpdCB0aGlzLmdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICBsZXQgcG9ydCA9IHRoaXMuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyhkZXZpY2VzWzBdLnVkaWQpO1xuICAgIGlmIChwb3J0KSB7XG4gICAgICByZXR1cm4gcG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbXVsYXRvciBwb3J0IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGV2aWNlcyBjb25uZWN0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBlbXVsYXRvciBwb3J0IGJ5IHBhcnNpbmcgZW11bGF0b3IgbmFtZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGVtU3RyIC0gRW11bGF0b3IgbmFtZSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtudW1iZXJ8Ym9vbGVhbn0gRWl0aGVyIHRoZSBjdXJyZW50IGVtdWxhdG9yIHBvcnQgb3JcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBfZmFsc2VfIGlmIHBvcnQgbnVtYmVyIGNhbm5vdCBiZSBwYXJzZWQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcgPSBmdW5jdGlvbiBnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIChlbVN0cikge1xuICBsZXQgcG9ydFBhdHRlcm4gPSAvZW11bGF0b3ItKFxcZCspLztcbiAgaWYgKHBvcnRQYXR0ZXJuLnRlc3QoZW1TdHIpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHBvcnRQYXR0ZXJuLmV4ZWMoZW1TdHIpWzFdLCAxMCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjdXJyZW50bHkgY29ubmVjdGVkIGVtdWxhdG9ycy5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48RGV2aWNlPn0gVGhlIGxpc3Qgb2YgY29ubmVjdGVkIGRldmljZXMuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldENvbm5lY3RlZEVtdWxhdG9ycyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbm5lY3RlZEVtdWxhdG9ycyAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBjb25uZWN0ZWQgZW11bGF0b3JzJyk7XG4gIHRyeSB7XG4gICAgbGV0IGRldmljZXMgPSBhd2FpdCB0aGlzLmdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICBsZXQgZW11bGF0b3JzID0gW107XG4gICAgZm9yIChsZXQgZGV2aWNlIG9mIGRldmljZXMpIHtcbiAgICAgIGxldCBwb3J0ID0gdGhpcy5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKGRldmljZS51ZGlkKTtcbiAgICAgIGlmIChwb3J0KSB7XG4gICAgICAgIGRldmljZS5wb3J0ID0gcG9ydDtcbiAgICAgICAgZW11bGF0b3JzLnB1c2goZGV2aWNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke3V0aWwucGx1cmFsaXplKCdlbXVsYXRvcicsIGVtdWxhdG9ycy5sZW5ndGgsIHRydWUpfSBjb25uZWN0ZWRgKTtcbiAgICByZXR1cm4gZW11bGF0b3JzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZXR0aW5nIGVtdWxhdG9ycy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFNldCBfZW11bGF0b3JQb3J0XyBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudCBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZW1Qb3J0IC0gVGhlIGVtdWxhdG9yIHBvcnQgdG8gYmUgc2V0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5zZXRFbXVsYXRvclBvcnQgPSBmdW5jdGlvbiBzZXRFbXVsYXRvclBvcnQgKGVtUG9ydCkge1xuICB0aGlzLmVtdWxhdG9yUG9ydCA9IGVtUG9ydDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjdXJyZW50IGRldmljZSAoX3RoaXMuY3VyRGV2aWNlSWRfKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gLSBUaGUgZGV2aWNlIGlkZW50aWZpZXIuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLnNldERldmljZUlkID0gZnVuY3Rpb24gc2V0RGV2aWNlSWQgKGRldmljZUlkKSB7XG4gIGxvZy5kZWJ1ZyhgU2V0dGluZyBkZXZpY2UgaWQgdG8gJHtkZXZpY2VJZH1gKTtcbiAgdGhpcy5jdXJEZXZpY2VJZCA9IGRldmljZUlkO1xuICBsZXQgYXJnc0hhc0RldmljZSA9IHRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5pbmRleE9mKCctcycpO1xuICBpZiAoYXJnc0hhc0RldmljZSAhPT0gLTEpIHtcbiAgICAvLyByZW1vdmUgdGhlIG9sZCBkZXZpY2UgaWQgZnJvbSB0aGUgYXJndW1lbnRzXG4gICAgdGhpcy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLnNwbGljZShhcmdzSGFzRGV2aWNlLCAyKTtcbiAgfVxuICB0aGlzLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MucHVzaCgnLXMnLCBkZXZpY2VJZCk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgdGhlIGN1cnJlbnQgZGV2aWNlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0RldmljZX0gZGV2aWNlT2JqIC0gVGhlIGRldmljZSBvYmplY3QgdG8gYmUgc2V0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5zZXREZXZpY2UgPSBmdW5jdGlvbiBzZXREZXZpY2UgKGRldmljZU9iaikge1xuICBsZXQgZGV2aWNlSWQgPSBkZXZpY2VPYmoudWRpZDtcbiAgbGV0IGVtUG9ydCA9IHRoaXMuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyhkZXZpY2VJZCk7XG4gIHRoaXMuc2V0RW11bGF0b3JQb3J0KGVtUG9ydCk7XG4gIHRoaXMuc2V0RGV2aWNlSWQoZGV2aWNlSWQpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnRseSBydW5uaW5nIGVtdWxhdG9yLlxuICogISEhIFRoaXMgbWV0aG9kIGhhcyBhIHNpZGUgZWZmZWN0IC0gaXQgaW1wbGljaXRseSBjaGFuZ2VzIHRoZVxuICogYGRldmljZUlkYCAob25seSBpZiBBVkQgd2l0aCBhIG1hdGNoaW5nIG5hbWUgaXMgZm91bmQpXG4gKiBhbmQgYGVtdWxhdG9yUG9ydGAgaW5zdGFuY2UgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkTmFtZSAtIEVtdWxhdG9yIG5hbWUuXG4gKiBAcmV0dXJuIHs/RGV2aWNlfSBDdXJyZW50bHkgcnVubmluZyBlbXVsYXRvciBvciBfbnVsbF8uXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldFJ1bm5pbmdBVkQgPSBhc3luYyBmdW5jdGlvbiBnZXRSdW5uaW5nQVZEIChhdmROYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIGZpbmQgJyR7YXZkTmFtZX0nIGVtdWxhdG9yYCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZW11bGF0b3JzID0gYXdhaXQgdGhpcy5nZXRDb25uZWN0ZWRFbXVsYXRvcnMoKTtcbiAgICBmb3IgKGNvbnN0IGVtdWxhdG9yIG9mIGVtdWxhdG9ycykge1xuICAgICAgdGhpcy5zZXRFbXVsYXRvclBvcnQoZW11bGF0b3IucG9ydCk7XG4gICAgICBjb25zdCBydW5uaW5nQVZETmFtZSA9IGF3YWl0IHRoaXMuZXhlY0VtdUNvbnNvbGVDb21tYW5kKFsnYXZkJywgJ25hbWUnXSwge1xuICAgICAgICBwb3J0OiBlbXVsYXRvci5wb3J0LFxuICAgICAgICBleGVjVGltZW91dDogNTAwMCxcbiAgICAgICAgY29ublRpbWVvdXQ6IDEwMDAsXG4gICAgICB9KTtcbiAgICAgIGlmIChfLnRvTG93ZXIoYXZkTmFtZSkgPT09IF8udG9Mb3dlcihydW5uaW5nQVZETmFtZS50cmltKCkpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgZW11bGF0b3IgJyR7YXZkTmFtZX0nIG9uIHBvcnQgJHtlbXVsYXRvci5wb3J0fWApO1xuICAgICAgICB0aGlzLnNldERldmljZUlkKGVtdWxhdG9yLnVkaWQpO1xuICAgICAgICByZXR1cm4gZW11bGF0b3I7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgRW11bGF0b3IgJyR7YXZkTmFtZX0nIG5vdCBydW5uaW5nYCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGdldHRpbmcgQVZELiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkTmFtZSAtIEVtdWxhdG9yIG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dE1zIFsyMDAwMF0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3YWl0IHVudGlsIGF0IGxlYXN0IG9uZSBydW5uaW5nIEFWRCBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGRldGVjdGVkLlxuICogQHJldHVybiB7P0RldmljZX0gQ3VycmVudGx5IHJ1bm5pbmcgZW11bGF0b3Igb3IgX251bGxfLlxuICogQHRocm93cyB7RXJyb3J9IElmIG5vIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldFJ1bm5pbmdBVkRXaXRoUmV0cnkgPSBhc3luYyBmdW5jdGlvbiBnZXRSdW5uaW5nQVZEV2l0aFJldHJ5IChhdmROYW1lLCB0aW1lb3V0TXMgPSAyMDAwMCkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFJ1bm5pbmdBVkQoYXZkTmFtZS5yZXBsYWNlKCdAJywgJycpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyxcbiAgICAgIGludGVydmFsTXM6IDEwMDAsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGdldHRpbmcgQVZEIHdpdGggcmV0cnkuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTaHV0ZG93biBhbGwgcnVubmluZyBlbXVsYXRvcnMgYnkga2lsbGluZyB0aGVpciBwcm9jZXNzZXMuXG4gKlxuICogQHRocm93cyB7RXJyb3J9IElmIGtpbGxpbmcgdG9vbCByZXR1cm5lZCBub24temVybyByZXR1cm4gY29kZS5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMua2lsbEFsbEVtdWxhdG9ycyA9IGFzeW5jIGZ1bmN0aW9uIGtpbGxBbGxFbXVsYXRvcnMgKCkge1xuICBsZXQgY21kLCBhcmdzO1xuICBpZiAoc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgY21kID0gJ1RBU0tLSUxMJztcbiAgICBhcmdzID0gWydUQVNLS0lMTCcsICcvSU0nLCAnZW11bGF0b3IuZXhlJ107XG4gIH0gZWxzZSB7XG4gICAgY21kID0gJy91c3IvYmluL2tpbGxhbGwnO1xuICAgIGFyZ3MgPSBbJy1tJywgJ2VtdWxhdG9yKiddO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYyhjbWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBraWxsaW5nIGVtdWxhdG9ycy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEtpbGwgZW11bGF0b3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gTm8gZXJyb3JcbiAqIGlzIHRocm93biBpcyBnaXZlbiBhdmQgZG9lcyBub3QgZXhpc3QvaXMgbm90IHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBhdmROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGVtdWxhdG9yIHRvIGJlIGtpbGxlZC4gSWYgZW1wdHksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBlbXVsYXRvciB3aWxsIGJlIGtpbGxlZC5cbiAqIEBwYXJhbSB7P251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgYmVmb3JlIHRocm93aW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4Y2VwdGlvbiBhYm91dCB1bnN1Y2Nlc3NmdWwga2lsbGluZ1xuICogQHJldHVybiB7Ym9vbGVhbn0gLSBUcnVlIGlmIHRoZSBlbXVsYXRvciB3YXMga2lsbGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSBieSBraWxsaW5nIHRoZSBlbXVsYXRvclxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5raWxsRW11bGF0b3IgPSBhc3luYyBmdW5jdGlvbiBraWxsRW11bGF0b3IgKGF2ZE5hbWUgPSBudWxsLCB0aW1lb3V0ID0gNjAwMDApIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoYXZkTmFtZSkpIHtcbiAgICBsb2cuZGVidWcoYEtpbGxpbmcgYXZkICcke2F2ZE5hbWV9J2ApO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuZ2V0UnVubmluZ0FWRChhdmROYW1lKTtcbiAgICBpZiAoIWRldmljZSkge1xuICAgICAgbG9nLmluZm8oYE5vIGF2ZCB3aXRoIG5hbWUgJyR7YXZkTmFtZX0nIHJ1bm5pbmcuIFNraXBwaW5nIGtpbGwgc3RlcC5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8ga2lsbGluZyB0aGUgY3VycmVudCBhdmRcbiAgICBsb2cuZGVidWcoYEtpbGxpbmcgYXZkIHdpdGggaWQgJyR7dGhpcy5jdXJEZXZpY2VJZH0nYCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmlzRW11bGF0b3JDb25uZWN0ZWQoKSkge1xuICAgICAgbG9nLmRlYnVnKGBFbXVsYXRvciB3aXRoIGlkICcke3RoaXMuY3VyRGV2aWNlSWR9JyBub3QgY29ubmVjdGVkLiBTa2lwcGluZyBraWxsIHN0ZXBgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2tpbGwnXSk7XG4gIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXR9bXMgdW50aWwgdGhlIGVtdWxhdG9yICcke2F2ZE5hbWUgPyBhdmROYW1lIDogdGhpcy5jdXJEZXZpY2VJZH0nIGlzIGtpbGxlZGApO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoYXZkTmFtZSlcbiAgICAgICAgICA/ICFhd2FpdCB0aGlzLmdldFJ1bm5pbmdBVkQoYXZkTmFtZSlcbiAgICAgICAgICA6ICFhd2FpdCB0aGlzLmlzRW11bGF0b3JDb25uZWN0ZWQoKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAyMDAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZW11bGF0b3IgJyR7YXZkTmFtZSA/IGF2ZE5hbWUgOiB0aGlzLmN1ckRldmljZUlkfScgaXMgc3RpbGwgcnVubmluZyBhZnRlciBiZWluZyBraWxsZWQgJHt0aW1lb3V0fW1zIGFnb2ApO1xuICB9XG4gIGxvZy5pbmZvKGBTdWNjZXNzZnVsbHkga2lsbGVkIHRoZSAnJHthdmROYW1lID8gYXZkTmFtZSA6IHRoaXMuY3VyRGV2aWNlSWR9JyBlbXVsYXRvcmApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXZkTGF1bmNoT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gYXJncyBBZGRpdGlvbmFsIGVtdWxhdG9yIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbnYgQWRkaXRpb25hbCBlbXVsYXRvciBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYW5ndWFnZSBFbXVsYXRvciBzeXN0ZW0gbGFuZ3VhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb3VudHJ5IEVtdWxhdG9yIHN5c3RlbSBjb3VudHJ5XG4gKiBAcHJvcGVydHkge251bWJlcn0gbGF1bmNoVGltZW91dCBbNjAwMDBdIEVtdWxhdG9yIHN0YXJ0dXAgdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWFkeVRpbWVvdXQgWzYwMDAwXSBUaGUgbWF4aW11bSBwZXJpb2Qgb2YgdGltZSB0byB3YWl0IHVudGlsIEVtdWxhdG9yXG4gKiBpcyByZWFkeSBmb3IgdXNhZ2UgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmV0cnlUaW1lcyBbMV0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YXJ0dXAgcmV0cmllc1xuICovXG5cbi8qKlxuICogU3RhcnQgYW4gZW11bGF0b3Igd2l0aCBnaXZlbiBwYXJhbWV0ZXJzIGFuZCB3YWl0IHVudGlsIGl0IGlzIGZ1bGx5IHN0YXJ0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgLSBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyBlbXVsYXRvci5cbiAqIEBwYXJhbSB7P0F2ZExhdW5jaE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtTdWJQcm9jZXNzfSBFbXVsYXRvciBzdWJwcm9jZXNzIGluc3RhbmNlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtdWxhdG9yIGZhaWxzIHRvIHN0YXJ0IHdpdGhpbiB0aGUgZ2l2ZW4gdGltZW91dC5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMubGF1bmNoQVZEID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQVZEIChhdmROYW1lLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFyZ3MgPSBbXSxcbiAgICBlbnYgPSB7fSxcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQgPSA2MDAwMCxcbiAgICByZWFkeVRpbWVvdXQgPSA2MDAwMCxcbiAgICByZXRyeVRpbWVzID0gMSxcbiAgfSA9IG9wdHM7XG4gIGxvZy5kZWJ1ZyhgTGF1bmNoaW5nIEVtdWxhdG9yIHdpdGggQVZEICR7YXZkTmFtZX0sIGxhdW5jaFRpbWVvdXQgYCArXG4gICAgICAgICAgICBgJHtsYXVuY2hUaW1lb3V0fW1zIGFuZCByZWFkeVRpbWVvdXQgJHtyZWFkeVRpbWVvdXR9bXNgKTtcbiAgY29uc3QgZW11bGF0b3JCaW5hcnlQYXRoID0gYXdhaXQgdGhpcy5nZXRTZGtCaW5hcnlQYXRoKCdlbXVsYXRvcicpO1xuICBpZiAoYXZkTmFtZVswXSA9PT0gJ0AnKSB7XG4gICAgYXZkTmFtZSA9IGF2ZE5hbWUuc3Vic3RyKDEpO1xuICB9XG4gIGF3YWl0IHRoaXMuY2hlY2tBdmRFeGlzdChhdmROYW1lKTtcblxuICBjb25zdCBsYXVuY2hBcmdzID0gWyctYXZkJywgYXZkTmFtZV07XG4gIGxhdW5jaEFyZ3MucHVzaCguLi4odG9BdmRMb2NhbGVBcmdzKGxhbmd1YWdlLCBjb3VudHJ5KSkpO1xuXG4gIGxldCBpc0RlbGF5QWRiRmVhdHVyZUVuYWJsZWQgPSBmYWxzZTtcbiAgaWYgKHRoaXMuYWxsb3dEZWxheUFkYikge1xuICAgIGNvbnN0IHtyZXZpc2lvbn0gPSBhd2FpdCB0aGlzLmdldEVtdVZlcnNpb25JbmZvKCk7XG4gICAgaWYgKHJldmlzaW9uICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHJldmlzaW9uLCAnPj0nLCAnMjkuMC43JykpIHtcbiAgICAgIC8vIGh0dHBzOi8vYW5kcm9pZHN0dWRpby5nb29nbGVibG9nLmNvbS8yMDE5LzA1L2VtdWxhdG9yLTI5MDctY2FuYXJ5Lmh0bWxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHt0YXJnZXR9ID0gYXdhaXQgdGhpcy5nZXRFbXVJbWFnZVByb3BlcnRpZXMoYXZkTmFtZSk7XG4gICAgICAgIGNvbnN0IGFwaU1hdGNoID0gL1xcZCsvLmV4ZWModGFyZ2V0KTtcbiAgICAgICAgLy8gaHR0cHM6Ly9pc3N1ZXRyYWNrZXIuZ29vZ2xlLmNvbS9pc3N1ZXMvMTQyNTMzMzU1XG4gICAgICAgIGlmIChhcGlNYXRjaCAmJiBwYXJzZUludChhcGlNYXRjaFswXSwgMTApID49IE1JTl9ERUxBWV9BREJfQVBJX0xFVkVMKSB7XG4gICAgICAgICAgbGF1bmNoQXJncy5wdXNoKCctZGVsYXktYWRiJyk7XG4gICAgICAgICAgaXNEZWxheUFkYkZlYXR1cmVFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhY3R1YWwgaW1hZ2UgQVBJIHZlcnNpb24gaXMgYmVsb3cgJHtNSU5fREVMQVlfQURCX0FQSV9MRVZFTH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuaW5mbyhgVGhlIC1kZWxheS1hZGIgZW11bGF0b3Igc3RhcnR1cCBkZXRlY3Rpb24gZmVhdHVyZSB3aWxsIG5vdCBiZSBlbmFibGVkLiBgICtcbiAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuaW5mbygnVGhlIC1kZWxheS1hZGIgZW11bGF0b3Igc3RhcnR1cCBkZXRlY3Rpb24gZmVhdHVyZSBoYXMgYmVlbiBleHBsaWNpdGx5IGRpc2FibGVkJyk7XG4gIH1cblxuICBpZiAoIV8uaXNFbXB0eShhcmdzKSkge1xuICAgIGxhdW5jaEFyZ3MucHVzaCguLi4oXy5pc0FycmF5KGFyZ3MpID8gYXJncyA6IHV0aWwuc2hlbGxQYXJzZShgJHthcmdzfWApKSk7XG4gIH1cblxuICBsb2cuZGVidWcoYFJ1bm5pbmcgJyR7ZW11bGF0b3JCaW5hcnlQYXRofScgd2l0aCBhcmdzOiAke3V0aWwucXVvdGUobGF1bmNoQXJncyl9YCk7XG4gIGlmICghXy5pc0VtcHR5KGVudikpIHtcbiAgICBsb2cuZGVidWcoYEN1c3RvbWl6ZWQgZW11bGF0b3IgZW52aXJvbm1lbnQ6ICR7SlNPTi5zdHJpbmdpZnkoZW52KX1gKTtcbiAgfVxuICBjb25zdCBwcm9jID0gbmV3IFN1YlByb2Nlc3MoZW11bGF0b3JCaW5hcnlQYXRoLCBsYXVuY2hBcmdzLCB7XG4gICAgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgZW52KSxcbiAgfSk7XG4gIGF3YWl0IHByb2Muc3RhcnQoMCk7XG4gIHByb2Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZG91dCB8fCBzdGRlcnIgfHwgJycpLnNwbGl0KCdcXG4nKS5maWx0ZXIoQm9vbGVhbikpIHtcbiAgICAgIGxvZy5pbmZvKGBbQVZEIE9VVFBVVF0gJHtsaW5lfWApO1xuICAgIH1cbiAgfSk7XG4gIHByb2Mub24oJ2RpZScsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICBsb2cud2FybihgRW11bGF0b3IgYXZkICR7YXZkTmFtZX0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9JHtzaWduYWwgPyBgLCBzaWduYWwgJHtzaWduYWx9YCA6ICcnfWApO1xuICB9KTtcbiAgYXdhaXQgcmV0cnkocmV0cnlUaW1lcywgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5nZXRSdW5uaW5nQVZEV2l0aFJldHJ5KGF2ZE5hbWUsIGxhdW5jaFRpbWVvdXQpKTtcbiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGRldmljZUlkIGFscmVhZHkgYXNzaWduZWRcbiAgaWYgKGlzRGVsYXlBZGJGZWF0dXJlRW5hYmxlZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWyd3YWl0LWZvci1kZXZpY2UnXSwge3RpbWVvdXQ6IHJlYWR5VGltZW91dH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7YXZkTmFtZX0nIEVtdWxhdG9yIGhhcyBmYWlsZWQgdG8gYm9vdDogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckVtdWxhdG9yUmVhZHkocmVhZHlUaW1lb3V0KTtcbiAgfVxuICByZXR1cm4gcHJvYztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQmluYXJ5VmVyc2lvblxuICogQHByb3BlcnR5IHtTZW1WZXJ9IHZlcnNpb24gLSBUaGUgQURCIGJpbmFyeSB2ZXJzaW9uIG51bWJlclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJ1aWxkIC0gVGhlIEFEQiBiaW5hcnkgYnVpbGQgbnVtYmVyXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBCcmlkZ2VWZXJzaW9uXG4gKiBAcHJvcGVydHkge1NlbVZlcn0gdmVyc2lvbiAtIFRoZSBBbmRyb2lkIERlYnVnIEJyaWRnZSB2ZXJzaW9uIG51bWJlclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVmVyc2lvblxuICogQHByb3BlcnR5IHs/QmluYXJ5VmVyc2lvbn0gYmluYXJ5IFRoaXMgdmVyc2lvbiBudW1iZXIgbWlnaHQgbm90IGJlXG4gKiBiZSBwcmVzZW50IGZvciBvbGRlciBBREIgcmVsZWFzZXMuXG4gKiBAcHJvcGVydHkge0JyaWRnZVZlcnNpb259IGJyaWRnZVxuICovXG5cbi8qKlxuICogR2V0IHRoZSBhZGIgdmVyc2lvbi4gVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBpcyBjYWNoZWQuXG4gKlxuICogQHJldHVybiB7VmVyc2lvbn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcGFyc2UgYWRiIGJpbmFyeSB2ZXJzaW9uLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRWZXJzaW9uID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKCkge1xuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgIHN0ZG91dCA9IGF3YWl0IHRoaXMuYWRiRXhlYygndmVyc2lvbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZXR0aW5nIGFkYiB2ZXJzaW9uOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBiaW5hcnlWZXJzaW9uTWF0Y2ggPSBCSU5BUllfVkVSU0lPTl9QQVRURVJOLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKGJpbmFyeVZlcnNpb25NYXRjaCkge1xuICAgIHJlc3VsdC5iaW5hcnkgPSB7XG4gICAgICB2ZXJzaW9uOiBzZW12ZXIuY29lcmNlKGJpbmFyeVZlcnNpb25NYXRjaFsxXSksXG4gICAgICBidWlsZDogcGFyc2VJbnQoYmluYXJ5VmVyc2lvbk1hdGNoWzJdLCAxMCksXG4gICAgfTtcbiAgfVxuICBjb25zdCBicmlkZ2VWZXJzaW9uTWF0Y2ggPSBCUklER0VfVkVSU0lPTl9QQVRURVJOLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKGJyaWRnZVZlcnNpb25NYXRjaCkge1xuICAgIHJlc3VsdC5icmlkZ2UgPSB7XG4gICAgICB2ZXJzaW9uOiBzZW12ZXIuY29lcmNlKGJyaWRnZVZlcnNpb25NYXRjaFsxXSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZW11bGF0b3IgaXMgcmVhZHkgdG8gYWNjZXB0IGZ1cnRoZXIgY29tbWFuZHMgKGJvb3RpbmcgY29tcGxldGVkKS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dE1zIFsyMDAwMF0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtdWxhdG9yIGlzIG5vdCByZWFkeSB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLndhaXRGb3JFbXVsYXRvclJlYWR5ID0gYXN5bmMgZnVuY3Rpb24gd2FpdEZvckVtdWxhdG9yUmVhZHkgKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLnNoZWxsKFsnZ2V0cHJvcCcsICdpbml0LnN2Yy5ib290YW5pbSddKSkuaW5jbHVkZXMoJ3N0b3BwZWQnKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21ldGltZXMgdGhlIHBhY2thZ2UgbWFuYWdlciBzZXJ2aWNlIG1pZ2h0IHN0aWxsIGJlaW5nIGluaXRpYWxpemVkXG4gICAgICAgIC8vIG9uIHNsb3cgc3lzdGVtcyBldmVuIGFmdGVyIGVtdWxhdG9yIGJvb3RpbmcgaXMgY29tcGxldGVkLlxuICAgICAgICAvLyBUaGUgdXN1YWwgb3V0cHV0IG9mIGBwbSBnZXQtaW5zdGFsbC1sb2NhdGlvbmAgY29tbWFuZCBsb29rcyBsaWtlIGAwW2F1dG9dYFxuICAgICAgICByZXR1cm4gL1xcZCtcXFtcXHcrXFxdLy50ZXN0KGF3YWl0IHRoaXMuc2hlbGwoWydwbScsICdnZXQtaW5zdGFsbC1sb2NhdGlvbiddKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBXYWl0aW5nIGZvciBlbXVsYXRvciBzdGFydHVwLiBJbnRlcm1lZGlhdGUgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyxcbiAgICAgIGludGVydmFsTXM6IDMwMDAsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVtdWxhdG9yIGlzIG5vdCByZWFkeSB3aXRoaW4gJHt0aW1lb3V0TXN9bXNgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgcmVhZHkgdG8gYWNjZXB0IGZ1cnRoZXIgY29tbWFuZHMgKGJvb3RpbmcgY29tcGxldGVkKS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYXBwRGV2aWNlUmVhZHlUaW1lb3V0IFszMF0gLSBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0LlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBkZXZpY2UgaXMgbm90IHJlYWR5IHdpdGhpbiB0aGUgZ2l2ZW4gdGltZW91dC5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMud2FpdEZvckRldmljZSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JEZXZpY2UgKGFwcERldmljZVJlYWR5VGltZW91dCA9IDMwKSB7XG4gIHRoaXMuYXBwRGV2aWNlUmVhZHlUaW1lb3V0ID0gYXBwRGV2aWNlUmVhZHlUaW1lb3V0O1xuICBjb25zdCByZXRyaWVzID0gMztcbiAgY29uc3QgdGltZW91dCA9IHBhcnNlSW50KHRoaXMuYXBwRGV2aWNlUmVhZHlUaW1lb3V0LCAxMCkgKiAxMDAwIC8gcmV0cmllcztcbiAgYXdhaXQgcmV0cnkocmV0cmllcywgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoJ3dhaXQtZm9yLWRldmljZScsIHt0aW1lb3V0fSk7XG4gICAgICBhd2FpdCB0aGlzLnBpbmcoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlY29ubmVjdCgpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydEFkYigpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdhaXRpbmcgZm9yIHRoZSBkZXZpY2UgdG8gYmUgYXZhaWxhYmxlLiBPcmlnaW5hbCBlcnJvcjogJyR7ZS5tZXNzYWdlfSdgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZWJvb3QgdGhlIGN1cnJlbnQgZGV2aWNlIGFuZCB3YWl0IHVudGlsIGl0IGlzIGNvbXBsZXRlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmV0cmllcyBbREVGQVVMVF9BREJfUkVCT09UX1JFVFJJRVNdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlYm9vdCByZXRyaWVzLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBkZXZpY2UgZmFpbGVkIHRvIHJlYm9vdCBhbmQgbnVtYmVyIG9mIHJldHJpZXMgaXMgZXhjZWVkZWQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLnJlYm9vdCA9IGFzeW5jIGZ1bmN0aW9uIHJlYm9vdCAocmV0cmllcyA9IERFRkFVTFRfQURCX1JFQk9PVF9SRVRSSUVTKSB7XG4gIC8vIEdldCByb290IGFjY2VzcyBzbyB3ZSBjYW4gcnVuIHRoZSBuZXh0IHNoZWxsIGNvbW1hbmRzIHdoaWNoIHJlcXVpcmUgcm9vdCBhY2Nlc3NcbiAgY29uc3QgeyB3YXNBbHJlYWR5Um9vdGVkIH0gPSBhd2FpdCB0aGlzLnJvb3QoKTtcbiAgdHJ5IHtcbiAgICAvLyBTdG9wIGFuZCByZS1zdGFydCB0aGUgZGV2aWNlXG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N0b3AnXSk7XG4gICAgYXdhaXQgQi5kZWxheSgyMDAwKTsgLy8gbGV0IHRoZSBlbXUgZmluaXNoIHN0b3BwaW5nO1xuICAgIGF3YWl0IHRoaXMuc2V0RGV2aWNlUHJvcGVydHkoJ3N5cy5ib290X2NvbXBsZXRlZCcsIDAsIHtcbiAgICAgIHByaXZpbGVnZWQ6IGZhbHNlIC8vIG5vIG5lZWQgdG8gc2V0IHByaXZpbGVnZWQgdHJ1ZSBiZWNhdXNlIGRldmljZSBhbHJlYWR5IHJvb3RlZFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoWydzdGFydCddKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHttZXNzYWdlfSA9IGU7XG5cbiAgICAvLyBwcm92aWRlIGEgaGVscGZ1bCBlcnJvciBtZXNzYWdlIGlmIHRoZSByZWFzb24gcmVib290IGZhaWxlZCB3YXMgYmVjYXVzZSBBREIgY291bGRuJ3QgZ2FpbiByb290IGFjY2Vzc1xuICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdtdXN0IGJlIHJvb3QnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVib290IGRldmljZS4gUmVib290aW5nIHJlcXVpcmVzIHJvb3QgYWNjZXNzIGFuZCBgICtcbiAgICAgICAgYGF0dGVtcHQgdG8gZ2V0IHJvb3QgYWNjZXNzIG9uIGRldmljZSBmYWlsZWQgd2l0aCBlcnJvcjogJyR7bWVzc2FnZX0nYCk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gUmV0dXJuIHJvb3Qgc3RhdGUgdG8gd2hhdCBpdCB3YXMgYmVmb3JlXG4gICAgaWYgKCF3YXNBbHJlYWR5Um9vdGVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVucm9vdCgpO1xuICAgIH1cbiAgfVxuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoKGF3YWl0IHRoaXMuZ2V0RGV2aWNlUHJvcGVydHkoJ3N5cy5ib290X2NvbXBsZXRlZCcpKSA9PT0gJzEnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHdlIGRvbid0IHdhbnQgdGhlIHN0YWNrIHRyYWNlLCBzbyBubyBsb2cuZXJyb3JBbmRUaHJvd1xuICAgIGNvbnN0IG1zZyA9IGBSZWJvb3QgaXMgbm90IGNvbXBsZXRlZCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2A7XG4gICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSByb290UmVzdWx0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzU3VjY2Vzc2Z1bCBUcnVlIGlmIHRoZSBjYWxsIHRvIHJvb3QvdW5yb290IHdhcyBzdWNjZXNzZnVsXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHdhc0FscmVhZHlSb290ZWQgVHJ1ZSBpZiB0aGUgZGV2aWNlIHdhcyBhbHJlYWR5IHJvb3RlZFxuICovXG5cbi8qKlxuICogU3dpdGNoIGFkYiBzZXJ2ZXIgcm9vdCBwcml2aWxlZ2VzLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VsZXZhdGVkIC0gU2hvdWxkIHdlIGVsZXZhdGUgdG8gdG8gcm9vdCBvciB1bnJvb3Q/IChkZWZhdWx0IHRydWUpXG4gKiBAcmV0dXJuIHtyb290UmVzdWx0fVxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5jaGFuZ2VVc2VyUHJpdmlsZWdlcyA9IGFzeW5jIGZ1bmN0aW9uIGNoYW5nZVVzZXJQcml2aWxlZ2VzIChpc0VsZXZhdGVkKSB7XG4gIGNvbnN0IGNtZCA9IGlzRWxldmF0ZWQgPyAncm9vdCcgOiAndW5yb290JztcblxuICBjb25zdCByZXRyeUlmT2ZmbGluZSA9IGFzeW5jIChjbWRGdW5jKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjbWRGdW5jKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBDaGVjayB0aGUgb3V0cHV0IG9mIHRoZSBzdGRFcnIgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGNsdWVzIHRoYXQgc2hvdyB0aGF0IHRoZSBkZXZpY2Ugd2VudCBvZmZsaW5lXG4gICAgICAvLyBhbmQgaWYgaXQgZGlkIGdvIG9mZmxpbmUsIHJlc3RhcnQgQURCXG4gICAgICBpZiAoWydjbG9zZWQnLCAnZGV2aWNlIG9mZmxpbmUnLCAndGltZW91dCBleHBpcmVkJ11cbiAgICAgICAgICAuc29tZSgoeCkgPT4gKGVyci5zdGRlcnIgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoeCkpKSB7XG4gICAgICAgIGxvZy53YXJuKGBBdHRlbXB0IHRvICR7Y21kfSBjYXVzZWQgQURCIHRvIHRoaW5rIHRoZSBkZXZpY2Ugd2VudCBvZmZsaW5lYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWNvbm5lY3QoKTtcbiAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0QWRiKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNtZEZ1bmMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gSWYgaXQncyBhbHJlYWR5IHJvb3RlZCwgb3VyIGpvYiBpcyBkb25lLiBObyBuZWVkIHRvIHJvb3QgaXQgYWdhaW4uXG4gIGNvbnN0IGlzUm9vdCA9IGF3YWl0IHJldHJ5SWZPZmZsaW5lKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuaXNSb290KCkpO1xuICBpZiAoKGlzUm9vdCAmJiBpc0VsZXZhdGVkKSB8fCAoIWlzUm9vdCAmJiAhaXNFbGV2YXRlZCkpIHtcbiAgICByZXR1cm4ge2lzU3VjY2Vzc2Z1bDogdHJ1ZSwgd2FzQWxyZWFkeVJvb3RlZDogaXNSb290fTtcbiAgfVxuXG4gIGxldCB3YXNBbHJlYWR5Um9vdGVkID0gaXNSb290O1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgcmV0cnlJZk9mZmxpbmUoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5hZGJFeGVjKFtjbWRdKSk7XG4gICAgbG9nLmRlYnVnKHN0ZG91dCk7XG5cbiAgICAvLyBvbiByZWFsIGRldmljZXMgaW4gc29tZSBzaXR1YXRpb25zIHdlIGdldCBhbiBlcnJvciBpbiB0aGUgc3Rkb3V0XG4gICAgaWYgKHN0ZG91dCkge1xuICAgICAgaWYgKHN0ZG91dC5pbmNsdWRlcygnYWRiZCBjYW5ub3QgcnVuIGFzIHJvb3QnKSkge1xuICAgICAgICByZXR1cm4ge2lzU3VjY2Vzc2Z1bDogZmFsc2UsIHdhc0FscmVhZHlSb290ZWR9O1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGRldmljZSB3YXMgYWxyZWFkeSByb290ZWQsIHJldHVybiB0aGF0IGluIHRoZSByZXN1bHRcbiAgICAgIGlmIChzdGRvdXQuaW5jbHVkZXMoJ2FscmVhZHkgcnVubmluZyBhcyByb290JykpIHtcbiAgICAgICAgd2FzQWxyZWFkeVJvb3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7aXNTdWNjZXNzZnVsOiB0cnVlLCB3YXNBbHJlYWR5Um9vdGVkfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3Qge3N0ZGVyciA9ICcnLCBtZXNzYWdlfSA9IGVycjtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvICR7Y21kfSBhZGIgZGFlbW9uLiBPcmlnaW5hbCBlcnJvcjogJyR7bWVzc2FnZX0nLiBTdGRlcnI6ICcke3N0ZGVycn0nLiBDb250aW51aW5nLmApO1xuICAgIHJldHVybiB7aXNTdWNjZXNzZnVsOiBmYWxzZSwgd2FzQWxyZWFkeVJvb3RlZH07XG4gIH1cbn07XG5cbi8qKlxuICogU3dpdGNoIGFkYiBzZXJ2ZXIgdG8gcm9vdCBtb2RlXG4gKiBAcmV0dXJuIHtyb290UmVzdWx0fVxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5yb290ID0gYXN5bmMgZnVuY3Rpb24gcm9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmNoYW5nZVVzZXJQcml2aWxlZ2VzKHRydWUpO1xufTtcblxuLyoqXG4gKiBTd2l0Y2ggYWRiIHNlcnZlciB0byBub24tcm9vdCBtb2RlLlxuICpcbiAqIEByZXR1cm4ge3Jvb3RSZXN1bHR9XG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLnVucm9vdCA9IGFzeW5jIGZ1bmN0aW9uIHVucm9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmNoYW5nZVVzZXJQcml2aWxlZ2VzKGZhbHNlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgdXNlciBpcyByb290XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdXNlciBpcyByb290XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGlkZW50aWZ5aW5nXG4gKiB0aGUgdXNlci5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuaXNSb290ID0gYXN5bmMgZnVuY3Rpb24gaXNSb290ICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLnNoZWxsKFsnd2hvYW1pJ10pKS50cmltKCkgPT09ICdyb290Jztcbn07XG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYSByZW1vdGUgcGF0aCBleGlzdHMgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHJlbW90ZSBwYXRoIHRvIHZlcmlmeS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIHBhdGggZXhpc3RzIG9uIHRoZSBkZXZpY2UuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmZpbGVFeGlzdHMgPSBhc3luYyBmdW5jdGlvbiBmaWxlRXhpc3RzIChyZW1vdGVQYXRoKSB7XG4gIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgY29uc3QgY2hlY2tDbWQgPSBgWyAtZSAnJHtyZW1vdGVQYXRoLnJlcGxhY2UoLycvZywgYFxcXFwnYCl9JyBdICYmIGVjaG8gJHtwYXNzRmxhZ31gO1xuICB0cnkge1xuICAgIHJldHVybiBfLmluY2x1ZGVzKGF3YWl0IHRoaXMuc2hlbGwoW2NoZWNrQ21kXSksIHBhc3NGbGFnKTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgb3V0cHV0IG9mIF9sc18gY29tbWFuZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggLSBUaGUgcmVtb3RlIHBhdGggKHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgX2xzXyBjb21tYW5kKS5cbiAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IG9wdHMgW1tdXSAtIEFkZGl0aW9uYWwgX2xzXyBvcHRpb25zLlxuICogQHJldHVybiB7QXJyYXkuPFN0cmluZz59IFRoZSBfbHNfIG91dHB1dCBhcyBhbiBhcnJheSBvZiBzcGxpdCBsaW5lcy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZCBvZiB0aGUgZ2l2ZW4gX3JlbW90ZVBhdGhfXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgZXhpc3QuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmxzID0gYXN5bmMgZnVuY3Rpb24gbHMgKHJlbW90ZVBhdGgsIG9wdHMgPSBbXSkge1xuICB0cnkge1xuICAgIGxldCBhcmdzID0gWydscycsIC4uLm9wdHMsIHJlbW90ZVBhdGhdO1xuICAgIGxldCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICAgIGxldCBsaW5lcyA9IHN0ZG91dC5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIGxpbmVzLm1hcCgobCkgPT4gbC50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuZmlsdGVyKChsKSA9PiBsLmluZGV4T2YoJ05vIHN1Y2ggZmlsZScpID09PSAtMSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmRleE9mKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIHNpemUgb2YgdGhlIHBhcnRpY3VsYXIgZmlsZSBsb2NhdGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCAtIFRoZSByZW1vdGUgcGF0aCB0byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge251bWJlcn0gRmlsZSBzaXplIGluIGJ5dGVzLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBnaXZlbiBmaWxlLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5maWxlU2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGZpbGVTaXplIChyZW1vdGVQYXRoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLmxzKHJlbW90ZVBhdGgsIFsnLWxhJ10pO1xuICAgIGlmIChmaWxlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVtb3RlIHBhdGggaXMgbm90IGEgZmlsZWApO1xuICAgIH1cbiAgICAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL2ZPczRQNC84XG4gICAgY29uc3QgbWF0Y2ggPSAvW3J3eHNTdFRcXC0rXXsxMH1bXFxzXFxkXSpcXHNbXlxcc10rXFxzK1teXFxzXStcXHMrKFxcZCspLy5leGVjKGZpbGVzWzBdKTtcbiAgICBpZiAoIW1hdGNoIHx8IF8uaXNOYU4ocGFyc2VJbnQobWF0Y2hbMV0sIDEwKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHNpemUgZnJvbSBsaXN0IG91dHB1dDogJyR7ZmlsZXNbMF19J2ApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZ2V0IGZpbGUgc2l6ZSBmb3IgJyR7cmVtb3RlUGF0aH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBvbiBhIHJvb3RlZCByZWFsIGRldmljZSBvclxuICogYW4gZW11bGF0b3IuIFRoZSBlbXVsYXRvciBtdXN0IGJlIGV4ZWN1dGVkIHdpdGggYC13cml0YWJsZS1zeXN0ZW1gXG4gKiBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBhZGIgZGFlbW9uIHNob3VsZCBiZSBydW5uaW5nIGluIHJvb3RcbiAqIG1vZGUgZm9yIHRoaXMgbWV0aG9kIHRvIHdvcmsgcHJvcGVybHkuIFRoZSBtZXRob2QgYWxzbyByZXF1aXJlc1xuICogb3BlbnNzbCB0b29sIHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgZGVzdGluYXRpb24gc3lzdGVtLlxuICogUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTA5NjRcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyB0b3BpY1xuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gY2VydCAtIGJhc2U2NC1kZWNvZGVkIGNvbnRlbnQgb2YgdGhlIGFjdHVhbCBjZXJ0aWZpY2F0ZVxuICogcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgb3IgYSBidWZmZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBvcGVuc3NsIHRvb2wgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgZGVzdGluYXRpb24gc3lzdGVtXG4gKiBvciBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgaW5zdGFsbGluZyB0aGUgY2VydGlmaWNhdGVcbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuaW5zdGFsbE1pdG1DZXJ0aWZpY2F0ZSA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxNaXRtQ2VydGlmaWNhdGUgKGNlcnQpIHtcbiAgY29uc3Qgb3BlblNzbCA9IGF3YWl0IGdldE9wZW5Tc2xGb3JPcygpO1xuXG4gIGlmICghXy5pc0J1ZmZlcihjZXJ0KSkge1xuICAgIGNlcnQgPSBCdWZmZXIuZnJvbShjZXJ0LCAnYmFzZTY0Jyk7XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3JjQ2VydCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnc291cmNlLmNlcicpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNDZXJ0LCBjZXJ0KTtcbiAgICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKG9wZW5Tc2wsIFsneDUwOScsICctbm9vdXQnLCAnLWhhc2gnLCAnLWluJywgc3JjQ2VydF0pO1xuICAgIGNvbnN0IGNlcnRIYXNoID0gc3Rkb3V0LnRyaW0oKTtcbiAgICBsb2cuZGVidWcoYEdvdCBjZXJ0aWZpY2F0ZSBoYXNoOiAke2NlcnRIYXNofWApO1xuICAgIGxvZy5kZWJ1ZygnUHJlcGFyaW5nIGNlcnRpZmljYXRlIGNvbnRlbnQnKTtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKG9wZW5Tc2wsIFsneDUwOScsICctaW4nLCBzcmNDZXJ0XSwge2lzQnVmZmVyOiB0cnVlfSkpO1xuICAgIGxldCBkc3RDZXJ0Q29udGVudCA9IHN0ZG91dDtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKG9wZW5Tc2wsIFsneDUwOScsXG4gICAgICAnLWluJywgc3JjQ2VydCxcbiAgICAgICctdGV4dCcsXG4gICAgICAnLWZpbmdlcnByaW50JyxcbiAgICAgICctbm9vdXQnXSwge2lzQnVmZmVyOiB0cnVlfSkpO1xuICAgIGRzdENlcnRDb250ZW50ID0gQnVmZmVyLmNvbmNhdChbZHN0Q2VydENvbnRlbnQsIHN0ZG91dF0pO1xuICAgIGNvbnN0IGRzdENlcnQgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgYCR7Y2VydEhhc2h9LjBgKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZHN0Q2VydCwgZHN0Q2VydENvbnRlbnQpO1xuICAgIGxvZy5kZWJ1ZygnUmVtb3VudGluZyAvc3lzdGVtIGluIHJ3IG1vZGUnKTtcbiAgICAvLyBTb21ldGltZXMgZW11bGF0b3IgcmVib290IGlzIHN0aWxsIG5vdCBmdWxseSBmaW5pc2hlZCBvbiB0aGlzIHN0YWdlLCBzbyByZXRyeVxuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMjAwMCwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5hZGJFeGVjKFsncmVtb3VudCddKSk7XG4gICAgbG9nLmRlYnVnKGBVcGxvYWRpbmcgdGhlIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBmcm9tICcke2RzdENlcnR9JyB0byAnJHtDRVJUU19ST09UfSdgKTtcbiAgICBhd2FpdCB0aGlzLnB1c2goZHN0Q2VydCwgQ0VSVFNfUk9PVCk7XG4gICAgbG9nLmRlYnVnKCdSZW1vdW50aW5nIC9zeXN0ZW0gdG8gY29uZmlybSBjaGFuZ2VzJyk7XG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsncmVtb3VudCddKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5qZWN0IHRoZSBjdXN0b20gY2VydGlmaWNhdGUuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgSXMgdGhlIGNlcnRpZmljYXRlIHByb3Blcmx5IGVuY29kZWQgaW50byBiYXNlNjQtc3RyaW5nPyBgICtcbiAgICAgICAgICAgICAgICAgICAgYERvIHlvdSBoYXZlIHJvb3QgcGVybWlzc2lvbnMgb24gdGhlIGRldmljZT8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbi8qKlxuICogVmVyaWZpZXMgaWYgdGhlIGdpdmVuIHJvb3QgY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQgb24gdGhlIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGNlcnQgLSBiYXNlNjQtZGVjb2RlZCBjb250ZW50IG9mIHRoZSBhY3R1YWwgY2VydGlmaWNhdGVcbiAqIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9yIGEgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlbnNzbCB0b29sIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGRlc3RpbmF0aW9uIHN5c3RlbVxuICogb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNoZWNraW5nIHRoZSBjZXJ0aWZpY2F0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIGNlcnRpZmljYXRlIGlzIGFscmVhZHkgaW5zdGFsbGVkXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmlzTWl0bUNlcnRpZmljYXRlSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNNaXRtQ2VydGlmaWNhdGVJbnN0YWxsZWQgKGNlcnQpIHtcbiAgY29uc3Qgb3BlblNzbCA9IGF3YWl0IGdldE9wZW5Tc2xGb3JPcygpO1xuXG4gIGlmICghXy5pc0J1ZmZlcihjZXJ0KSkge1xuICAgIGNlcnQgPSBCdWZmZXIuZnJvbShjZXJ0LCAnYmFzZTY0Jyk7XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIGxldCBjZXJ0SGFzaDtcbiAgdHJ5IHtcbiAgICBjb25zdCB0bXBDZXJ0ID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsICdzb3VyY2UuY2VyJyk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRtcENlcnQsIGNlcnQpO1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhvcGVuU3NsLCBbJ3g1MDknLCAnLW5vb3V0JywgJy1oYXNoJywgJy1pbicsIHRtcENlcnRdKTtcbiAgICBjZXJ0SGFzaCA9IHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjZXJ0aWZpY2F0ZSBoYXNoLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYElzIHRoZSBjZXJ0aWZpY2F0ZSBwcm9wZXJseSBlbmNvZGVkIGludG8gYmFzZTY0LXN0cmluZz8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbiAgY29uc3QgZHN0UGF0aCA9IHBhdGgucG9zaXgucmVzb2x2ZShDRVJUU19ST09ULCBgJHtjZXJ0SGFzaH0uMGApO1xuICBsb2cuZGVidWcoYENoZWNraW5nIGlmIHRoZSBjZXJ0aWZpY2F0ZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhdCAnJHtkc3RQYXRofSdgKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsZUV4aXN0cyhkc3RQYXRoKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN5c3RlbUNhbGxNZXRob2RzO1xuZXhwb3J0IHsgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9O1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvc3lzdGVtLWNhbGxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
1041
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL3N5c3RlbS1jYWxscy5qcyIsIm5hbWVzIjpbInN5c3RlbUNhbGxNZXRob2RzIiwiREVGQVVMVF9BREJfUkVCT09UX1JFVFJJRVMiLCJMSU5LRVJfV0FSTklOR19SRUdFWFAiLCJBREJfUkVUUllfRVJST1JfUEFUVEVSTlMiLCJCSU5BUllfVkVSU0lPTl9QQVRURVJOIiwiQlJJREdFX1ZFUlNJT05fUEFUVEVSTiIsIkNFUlRTX1JPT1QiLCJTREtfQklOQVJZX1JPT1RTIiwiTUlOX0RFTEFZX0FEQl9BUElfTEVWRUwiLCJnZXRTZGtCaW5hcnlQYXRoIiwiYmluYXJ5TmFtZSIsImdldEJpbmFyeUZyb21TZGtSb290IiwiZ2V0QmluYXJ5TmFtZUZvck9TIiwiXyIsIm1lbW9pemUiLCJnZXRCaW5hcnlOYW1lRm9yT1NNZW1vcml6ZSIsInN5c3RlbSIsImlzV2luZG93cyIsImluY2x1ZGVzIiwicGF0aCIsImV4dG5hbWUiLCJiaW5hcmllcyIsImZ1bGxCaW5hcnlOYW1lIiwiYmluYXJ5TG9jcyIsImdldFNka0JpbmFyeUxvY2F0aW9uQ2FuZGlkYXRlcyIsInNka1Jvb3QiLCJidWlsZFRvb2xzRGlycyIsImJ1aWxkVG9vbHNWZXJzaW9uIiwiZmlsdGVyIiwieCIsImJhc2VuYW1lIiwiaXNFbXB0eSIsImxvZyIsImluZm8iLCJwdXNoIiwiZmxhdHRlbiIsIm1hcCIsImRpciIsInJlc29sdmUiLCJiaW5hcnlMb2MiLCJsb2MiLCJmcyIsImV4aXN0cyIsImlzTnVsbCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQXJyYXkiLCJnZXRBbmRyb2lkQmluYXJ5UGF0aCIsImdldEJpbmFyeUZyb21QYXRoIiwid2hpY2giLCJlIiwiZ2V0Q29ubmVjdGVkRGV2aWNlcyIsImRlYnVnIiwic3Rkb3V0IiwiZXhlY3V0YWJsZSIsImRlZmF1bHRBcmdzIiwibWVzc2FnZSIsImxpc3RIZWFkZXIiLCJzdGFydGluZ0luZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwiZXhjbHVkZWRMaW5lcyIsImFsbG93T2ZmbGluZURldmljZXMiLCJkZXZpY2VzIiwic3BsaXQiLCJ0cmltIiwibGluZSIsInNvbWUiLCJyZWR1Y2UiLCJhY2MiLCJ1ZGlkIiwic3RhdGUiLCJnZXREZXZpY2VzV2l0aFJldHJ5IiwidGltZW91dE1zIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwiZ2V0RGV2aWNlcyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwibGVuZ3RoIiwiaWduIiwicmVjb25uZWN0IiwicmVzdGFydEFkYiIsInRhcmdldCIsImFyZ3MiLCJhZGJFeGVjIiwic3RkZXJyIiwic3VwcHJlc3NLaWxsU2VydmVyIiwia2lsbFNlcnZlciIsImVycm9yIiwiYWRiUG9ydCIsImV4Y2x1c2l2ZSIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiaG9tZUZvbGRlclBhdGgiLCJwcm9jZXNzIiwiZW52IiwicGxhdGZvcm0iLCJ3YXJuIiwiZHN0UGF0aCIsIndyaXRlRmlsZSIsImFkYkV4ZWNFbXUiLCJjbWQiLCJ2ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCIsImlzRXhlY0xvY2tlZCIsIkVYRUNfT1VUUFVUX0ZPUk1BVCIsIk9iamVjdCIsImZyZWV6ZSIsIlNURE9VVCIsIkZVTEwiLCJvcHRzIiwiY2xvbmVEZWVwIiwidGltZW91dCIsImFkYkV4ZWNUaW1lb3V0IiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwidGltZW91dENhcE5hbWUiLCJvdXRwdXRGb3JtYXQiLCJhZGJSZXRyaWVkIiwiZXhlY0Z1bmMiLCJmaW5kIiwiYXJnIiwidGVzdCIsInV0aWwiLCJxdW90ZSIsImpvaW4iLCJyZXBsYWNlIiwiZXJyVGV4dCIsInAiLCJjb2RlIiwid2FpdE1zIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsImludGVydmFsTXMiLCJzaGVsbCIsInByaXZpbGVnZWQiLCJjbWRBcnIiLCJmdWxsQ21kIiwiaXNSb290IiwiY3JlYXRlU3ViUHJvY2VzcyIsIlN1YlByb2Nlc3MiLCJnZXRBZGJQYXRoIiwiZ2V0QWRiU2VydmVyUG9ydCIsImdldEVtdWxhdG9yUG9ydCIsImVtdWxhdG9yUG9ydCIsInBvcnQiLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwiZW1TdHIiLCJwb3J0UGF0dGVybiIsInBhcnNlSW50IiwiZXhlYyIsImdldENvbm5lY3RlZEVtdWxhdG9ycyIsImVtdWxhdG9ycyIsImRldmljZSIsInBsdXJhbGl6ZSIsInNldEVtdWxhdG9yUG9ydCIsImVtUG9ydCIsInNldERldmljZUlkIiwiZGV2aWNlSWQiLCJjdXJEZXZpY2VJZCIsImFyZ3NIYXNEZXZpY2UiLCJzcGxpY2UiLCJzZXREZXZpY2UiLCJkZXZpY2VPYmoiLCJnZXRSdW5uaW5nQVZEIiwiYXZkTmFtZSIsImVtdWxhdG9yIiwicnVubmluZ0FWRE5hbWUiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJleGVjVGltZW91dCIsImNvbm5UaW1lb3V0IiwidG9Mb3dlciIsImdldFJ1bm5pbmdBVkRXaXRoUmV0cnkiLCJraWxsQWxsRW11bGF0b3JzIiwia2lsbEVtdWxhdG9yIiwiaGFzVmFsdWUiLCJpc0VtdWxhdG9yQ29ubmVjdGVkIiwibGF1bmNoQVZEIiwibGFuZ3VhZ2UiLCJjb3VudHJ5IiwibGF1bmNoVGltZW91dCIsInJlYWR5VGltZW91dCIsInJldHJ5VGltZXMiLCJlbXVsYXRvckJpbmFyeVBhdGgiLCJzdWJzdHIiLCJjaGVja0F2ZEV4aXN0IiwibGF1bmNoQXJncyIsImlzRGVsYXlBZGJGZWF0dXJlRW5hYmxlZCIsImFsbG93RGVsYXlBZGIiLCJyZXZpc2lvbiIsImdldEVtdVZlcnNpb25JbmZvIiwiY29tcGFyZVZlcnNpb25zIiwiZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzIiwiYXBpTWF0Y2giLCJzaGVsbFBhcnNlIiwicHJvYyIsImFzc2lnbiIsIm9uIiwiQm9vbGVhbiIsInNpZ25hbCIsIndhaXRGb3JFbXVsYXRvclJlYWR5IiwiZ2V0VmVyc2lvbiIsInJlc3VsdCIsImJpbmFyeVZlcnNpb25NYXRjaCIsImJpbmFyeSIsInZlcnNpb24iLCJzZW12ZXIiLCJjb2VyY2UiLCJidWlsZCIsImJyaWRnZVZlcnNpb25NYXRjaCIsImJyaWRnZSIsImVyciIsIndhaXRGb3JEZXZpY2UiLCJhcHBEZXZpY2VSZWFkeVRpbWVvdXQiLCJyZXRyaWVzIiwicGluZyIsInJlYm9vdCIsIndhc0FscmVhZHlSb290ZWQiLCJyb290IiwiQiIsImRlbGF5Iiwic2V0RGV2aWNlUHJvcGVydHkiLCJ1bnJvb3QiLCJnZXREZXZpY2VQcm9wZXJ0eSIsIm1zZyIsImNoYW5nZVVzZXJQcml2aWxlZ2VzIiwiaXNFbGV2YXRlZCIsInJldHJ5SWZPZmZsaW5lIiwiY21kRnVuYyIsInRvTG93ZXJDYXNlIiwiaXNTdWNjZXNzZnVsIiwiZmlsZUV4aXN0cyIsInJlbW90ZVBhdGgiLCJwYXNzRmxhZyIsImNoZWNrQ21kIiwibHMiLCJsaW5lcyIsImwiLCJmaWxlU2l6ZSIsImZpbGVzIiwibWF0Y2giLCJpc05hTiIsImluc3RhbGxNaXRtQ2VydGlmaWNhdGUiLCJjZXJ0Iiwib3BlblNzbCIsImlzQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInNyY0NlcnQiLCJjZXJ0SGFzaCIsImRzdENlcnRDb250ZW50IiwiY29uY2F0IiwiZHN0Q2VydCIsInJpbXJhZiIsImlzTWl0bUNlcnRpZmljYXRlSW5zdGFsbGVkIiwidG1wQ2VydCIsInBvc2l4Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL3N5c3RlbS1jYWxscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIHV0aWwsIHRlbXBEaXIsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge1xuICBnZXRCdWlsZFRvb2xzRGlycywgdG9BdmRMb2NhbGVBcmdzLFxuICBnZXRPcGVuU3NsRm9yT3MsIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgZ2V0U2RrUm9vdEZyb21FbnZcbn0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBleGVjLCBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHNsZWVwLCByZXRyeSwgcmV0cnlJbnRlcnZhbCwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cblxubGV0IHN5c3RlbUNhbGxNZXRob2RzID0ge307XG5cbmNvbnN0IERFRkFVTFRfQURCX1JFQk9PVF9SRVRSSUVTID0gOTA7XG5jb25zdCBMSU5LRVJfV0FSTklOR19SRUdFWFAgPSAvXldBUk5JTkc6IGxpbmtlci4rJC9tO1xuY29uc3QgQURCX1JFVFJZX0VSUk9SX1BBVFRFUk5TID0gW1xuICAvcHJvdG9jb2wgZmF1bHQgXFwobm8gc3RhdHVzXFwpL2ksXG4gIC9lcnJvcjogZGV2aWNlICgnLisnICk/bm90IGZvdW5kL2ksXG4gIC9lcnJvcjogZGV2aWNlIHN0aWxsIGNvbm5lY3RpbmcvaSxcbl07XG5jb25zdCBCSU5BUllfVkVSU0lPTl9QQVRURVJOID0gL15WZXJzaW9uIChbXFxkLl0rKS0oXFxkKykvbTtcbmNvbnN0IEJSSURHRV9WRVJTSU9OX1BBVFRFUk4gPSAvXkFuZHJvaWQgRGVidWcgQnJpZGdlIHZlcnNpb24gKFtcXGQuXSspL207XG5jb25zdCBDRVJUU19ST09UID0gJy9zeXN0ZW0vZXRjL3NlY3VyaXR5L2NhY2VydHMnO1xuY29uc3QgU0RLX0JJTkFSWV9ST09UUyA9IFtcbiAgJ3BsYXRmb3JtLXRvb2xzJyxcbiAgJ2VtdWxhdG9yJyxcbiAgWydjbWRsaW5lLXRvb2xzJywgJ2xhdGVzdCcsICdiaW4nXSxcbiAgJ3Rvb2xzJyxcbiAgWyd0b29scycsICdiaW4nXSxcbiAgJy4nIC8vIEFsbG93IGN1c3RvbSBzZGtSb290IHRvIHNwZWNpZnkgZnVsbCBmb2xkZXIgcGF0aFxuXTtcbmNvbnN0IE1JTl9ERUxBWV9BREJfQVBJX0xFVkVMID0gMjg7XG5cbi8qKlxuICogUmV0cmlldmUgZnVsbCBwYXRoIHRvIHRoZSBnaXZlbiBiaW5hcnkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJpbmFyeU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5LlxuICogQHJldHVybiB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGdpdmVuIGJpbmFyeSBpbmNsdWRpbmcgY3VycmVudCBTREsgcm9vdC5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuZ2V0U2RrQmluYXJ5UGF0aCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNka0JpbmFyeVBhdGggKGJpbmFyeU5hbWUpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoYmluYXJ5TmFtZSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIGZ1bGwgYmluYXJ5IG5hbWUgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0gYXMgbWVtb3RpemUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJpbmFyeU5hbWUgLSBzaW1wbGUgYmluYXJ5IG5hbWUsIGZvciBleGFtcGxlICdhbmRyb2lkJy5cbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGJpbmFyeSBuYW1lIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSxcbiAqICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsICdhbmRyb2lkLmJhdCcgb24gV2luZG93cy5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuZ2V0QmluYXJ5TmFtZUZvck9TID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldEJpbmFyeU5hbWVGb3JPU01lbW9yaXplIChiaW5hcnlOYW1lKSB7XG4gIHJldHVybiBnZXRCaW5hcnlOYW1lRm9yT1MoYmluYXJ5TmFtZSk7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZSBmdWxsIGJpbmFyeSBuYW1lIGZvciB0aGUgY3VycmVudCBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiaW5hcnlOYW1lIC0gc2ltcGxlIGJpbmFyeSBuYW1lLCBmb3IgZXhhbXBsZSAnYW5kcm9pZCcuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBiaW5hcnkgbmFtZSBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0sXG4gKiAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCAnYW5kcm9pZC5iYXQnIG9uIFdpbmRvd3MuXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmFyeU5hbWVGb3JPUyAoYmluYXJ5TmFtZSkge1xuICBpZiAoIXN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIHJldHVybiBiaW5hcnlOYW1lO1xuICB9XG5cbiAgaWYgKFsnYW5kcm9pZCcsICdhcGtzaWduZXInLCAnYXBrYW5hbHl6ZXInXS5pbmNsdWRlcyhiaW5hcnlOYW1lKSkge1xuICAgIHJldHVybiBgJHtiaW5hcnlOYW1lfS5iYXRgO1xuICB9XG4gIGlmICghcGF0aC5leHRuYW1lKGJpbmFyeU5hbWUpKSB7XG4gICAgcmV0dXJuIGAke2JpbmFyeU5hbWV9LmV4ZWA7XG4gIH1cbiAgcmV0dXJuIGJpbmFyeU5hbWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgZnVsbCBwYXRoIHRvIHRoZSBnaXZlbiBiaW5hcnkgYW5kIGNhY2hlcyBpdCBpbnRvIGBiaW5hcmllc2BcbiAqIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IEFEQiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluYXJ5TmFtZSAtIFNpbXBsZSBuYW1lIG9mIGEgYmluYXJ5IGZpbGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZ2l2ZW4gYmluYXJ5LiBUaGUgbWV0aG9kIHRyaWVzXG4gKiAgICAgICAgICAgICAgICAgIHRvIGVudW1lcmF0ZSBhbGwgdGhlIGtub3duIGxvY2F0aW9ucyB3aGVyZSB0aGUgYmluYXJ5XG4gKiAgICAgICAgICAgICAgICAgIG1pZ2h0IGJlIGxvY2F0ZWQgYW5kIHN0b3BzIHRoZSBzZWFyY2ggYXMgc29vbiBhcyB0aGUgZmlyc3RcbiAqICAgICAgICAgICAgICAgICAgbWF0Y2ggaXMgZm91bmQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBiaW5hcnkgd2l0aCBnaXZlbiBuYW1lIGlzIG5vdCBwcmVzZW50IGF0IGFueVxuICogICAgICAgICAgICAgICAgIG9mIGtub3duIGxvY2F0aW9ucyBvciBBbmRyb2lkIFNESyBpcyBub3QgaW5zdGFsbGVkIG9uIHRoZVxuICogICAgICAgICAgICAgICAgIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRCaW5hcnlGcm9tU2RrUm9vdCA9IGFzeW5jIGZ1bmN0aW9uIGdldEJpbmFyeUZyb21TZGtSb290IChiaW5hcnlOYW1lKSB7XG4gIGlmICh0aGlzLmJpbmFyaWVzW2JpbmFyeU5hbWVdKSB7XG4gICAgcmV0dXJuIHRoaXMuYmluYXJpZXNbYmluYXJ5TmFtZV07XG4gIH1cbiAgY29uc3QgZnVsbEJpbmFyeU5hbWUgPSB0aGlzLmdldEJpbmFyeU5hbWVGb3JPUyhiaW5hcnlOYW1lKTtcbiAgY29uc3QgYmluYXJ5TG9jcyA9IGdldFNka0JpbmFyeUxvY2F0aW9uQ2FuZGlkYXRlcyh0aGlzLnNka1Jvb3QsIGZ1bGxCaW5hcnlOYW1lKTtcblxuICAvLyBnZXQgc3VicGF0aHMgZm9yIGN1cnJlbnRseSBpbnN0YWxsZWQgYnVpbGQgdG9vbCBkaXJlY3Rvcmllc1xuICBsZXQgYnVpbGRUb29sc0RpcnMgPSBhd2FpdCBnZXRCdWlsZFRvb2xzRGlycyh0aGlzLnNka1Jvb3QpO1xuICBpZiAodGhpcy5idWlsZFRvb2xzVmVyc2lvbikge1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gYnVpbGRUb29sc0RpcnNcbiAgICAgIC5maWx0ZXIoKHgpID0+IHBhdGguYmFzZW5hbWUoeCkgPT09IHRoaXMuYnVpbGRUb29sc1ZlcnNpb24pO1xuICAgIGlmIChfLmlzRW1wdHkoYnVpbGRUb29sc0RpcnMpKSB7XG4gICAgICBsb2cuaW5mbyhgRm91bmQgbm8gYnVpbGQgdG9vbHMgd2hvc2UgdmVyc2lvbiBtYXRjaGVzIHRvICcke3RoaXMuYnVpbGRUb29sc1ZlcnNpb259J2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgYnVpbGQgdG9vbHMgYXQgJyR7YnVpbGRUb29sc0RpcnN9J2ApO1xuICAgIH1cbiAgfVxuICBiaW5hcnlMb2NzLnB1c2goLi4uKF8uZmxhdHRlbihidWlsZFRvb2xzRGlyc1xuICAgIC5tYXAoKGRpcikgPT4gW1xuICAgICAgcGF0aC5yZXNvbHZlKGRpciwgZnVsbEJpbmFyeU5hbWUpLFxuICAgICAgcGF0aC5yZXNvbHZlKGRpciwgJ2xpYicsIGZ1bGxCaW5hcnlOYW1lKSxcbiAgICBdKSlcbiAgKSk7XG5cbiAgbGV0IGJpbmFyeUxvYyA9IG51bGw7XG4gIGZvciAoY29uc3QgbG9jIG9mIGJpbmFyeUxvY3MpIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvYykpIHtcbiAgICAgIGJpbmFyeUxvYyA9IGxvYztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoXy5pc051bGwoYmluYXJ5TG9jKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgJyR7ZnVsbEJpbmFyeU5hbWV9JyBpbiAke0pTT04uc3RyaW5naWZ5KGJpbmFyeUxvY3MpfS4gYCArXG4gICAgICBgRG8geW91IGhhdmUgQW5kcm9pZCBCdWlsZCBUb29scyAke3RoaXMuYnVpbGRUb29sc1ZlcnNpb24gPyBgdiAke3RoaXMuYnVpbGRUb29sc1ZlcnNpb259IGAgOiAnJ31gICtcbiAgICAgIGBpbnN0YWxsZWQgYXQgJyR7dGhpcy5zZGtSb290fSc/YCk7XG4gIH1cbiAgbG9nLmluZm8oYFVzaW5nICcke2Z1bGxCaW5hcnlOYW1lfScgZnJvbSAnJHtiaW5hcnlMb2N9J2ApO1xuICB0aGlzLmJpbmFyaWVzW2JpbmFyeU5hbWVdID0gYmluYXJ5TG9jO1xuICByZXR1cm4gYmluYXJ5TG9jO1xufTtcblxuLyoqXG4gKiAgUmV0dXJucyB0aGUgQW5kcm9pZCBiaW5hcmllcyBsb2NhdGlvbnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrUm9vdCBUaGUgcGF0aCB0byBBbmRyb2lkIFNESyByb290LlxuICogQHBhcmFtIHtzdHJpbmd9IGZ1bGxCaW5hcnlOYW1lIFRoZSBuYW1lIG9mIGZ1bGwgYmluYXJ5IG5hbWUuXG4gKiBAcmV0dXJuIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiBTREtfQklOQVJZX1JPT1RTIHBhdGhzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZGtSb290IGFuZCBmdWxsQmluYXJ5TmFtZS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2RrQmluYXJ5TG9jYXRpb25DYW5kaWRhdGVzIChzZGtSb290LCBmdWxsQmluYXJ5TmFtZSkge1xuICByZXR1cm4gU0RLX0JJTkFSWV9ST09UUy5tYXAoKHgpID0+XG4gICAgcGF0aC5yZXNvbHZlKHNka1Jvb3QsIC4uLihfLmlzQXJyYXkoeCkgPyB4IDogW3hdKSwgZnVsbEJpbmFyeU5hbWUpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBmdWxsIHBhdGggdG8gdGhlIGdpdmVuIGJpbmFyeS5cbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IGhhdmUgY2FjaGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJpbmFyeU5hbWUgLSBTaW1wbGUgbmFtZSBvZiBhIGJpbmFyeSBmaWxlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuICdhZGInLCAnYW5kcm9pZCdcbiAqIEByZXR1cm4ge3N0cmluZ30gRnVsbCBwYXRoIHRvIHRoZSBnaXZlbiBiaW5hcnkuIFRoZSBtZXRob2QgdHJpZXNcbiAqICAgICAgICAgICAgICAgICAgdG8gZW51bWVyYXRlIGFsbCB0aGUga25vd24gbG9jYXRpb25zIHdoZXJlIHRoZSBiaW5hcnlcbiAqICAgICAgICAgICAgICAgICAgbWlnaHQgYmUgbG9jYXRlZCBhbmQgc3RvcHMgdGhlIHNlYXJjaCBhcyBzb29uIGFzIHRoZSBmaXJzdFxuICogICAgICAgICAgICAgICAgICBtYXRjaCBpcyBmb3VuZCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKiAgICAgICAgICAgICAgICAgIGUuZy4gJy9QYXRoL1RvL0FuZHJvaWQvc2RrL3BsYXRmb3JtLXRvb2xzL2FkYidcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYmluYXJ5IHdpdGggZ2l2ZW4gbmFtZSBpcyBub3QgcHJlc2VudCBhdCBhbnlcbiAqICAgICAgICAgICAgICAgICBvZiBrbm93biBsb2NhdGlvbnMgb3IgQW5kcm9pZCBTREsgaXMgbm90IGluc3RhbGxlZCBvbiB0aGVcbiAqICAgICAgICAgICAgICAgICBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZEJpbmFyeVBhdGggKGJpbmFyeU5hbWUpIHtcbiAgY29uc3QgZnVsbEJpbmFyeU5hbWUgPSBnZXRCaW5hcnlOYW1lRm9yT1MoYmluYXJ5TmFtZSk7XG4gIGNvbnN0IHNka1Jvb3QgPSBnZXRTZGtSb290RnJvbUVudigpO1xuICBjb25zdCBiaW5hcnlMb2NzID0gZ2V0U2RrQmluYXJ5TG9jYXRpb25DYW5kaWRhdGVzKHNka1Jvb3QsIGZ1bGxCaW5hcnlOYW1lKTtcbiAgZm9yIChjb25zdCBsb2Mgb2YgYmluYXJ5TG9jcykge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jKSkge1xuICAgICAgcmV0dXJuIGxvYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAnJHtmdWxsQmluYXJ5TmFtZX0nIGluICR7SlNPTi5zdHJpbmdpZnkoYmluYXJ5TG9jcyl9LiBgICtcbiAgICBgRG8geW91IGhhdmUgQW5kcm9pZCBCdWlsZCBUb29scyBpbnN0YWxsZWQgYXQgJyR7c2RrUm9vdH0nP2ApO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGZ1bGwgcGF0aCB0byBhIGJpbmFyeSBmaWxlIHVzaW5nIHRoZSBzdGFuZGFyZCBzeXN0ZW0gbG9va3VwIHRvb2wuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJpbmFyeU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5LlxuICogQHJldHVybiB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGJpbmFyeSByZWNlaXZlZCBmcm9tICd3aGljaCcvJ3doZXJlJ1xuICogICAgICAgICAgICAgICAgICBvdXRwdXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgbG9va3VwIHRvb2wgcmV0dXJucyBub24temVybyByZXR1cm4gY29kZS5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuZ2V0QmluYXJ5RnJvbVBhdGggPSBhc3luYyBmdW5jdGlvbiBnZXRCaW5hcnlGcm9tUGF0aCAoYmluYXJ5TmFtZSkge1xuICBpZiAodGhpcy5iaW5hcmllc1tiaW5hcnlOYW1lXSkge1xuICAgIHJldHVybiB0aGlzLmJpbmFyaWVzW2JpbmFyeU5hbWVdO1xuICB9XG5cbiAgY29uc3QgZnVsbEJpbmFyeU5hbWUgPSB0aGlzLmdldEJpbmFyeU5hbWVGb3JPUyhiaW5hcnlOYW1lKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBiaW5hcnlMb2MgPSBhd2FpdCBmcy53aGljaChmdWxsQmluYXJ5TmFtZSk7XG4gICAgbG9nLmluZm8oYFVzaW5nICcke2Z1bGxCaW5hcnlOYW1lfScgZnJvbSAnJHtiaW5hcnlMb2N9J2ApO1xuICAgIHRoaXMuYmluYXJpZXNbYmluYXJ5TmFtZV0gPSBiaW5hcnlMb2M7XG4gICAgcmV0dXJuIGJpbmFyeUxvYztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgJyR7ZnVsbEJpbmFyeU5hbWV9JyBpbiBQQVRILiBQbGVhc2Ugc2V0IHRoZSBBTkRST0lEX0hPTUUgYCArXG4gICAgICBgb3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gdGhlIGNvcnJlY3QgQW5kcm9pZCBTREsgcm9vdCBkaXJlY3RvcnkgcGF0aC5gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSB1ZGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0YXRlIC0gQ3VycmVudCBkZXZpY2Ugc3RhdGUsIGFzIGl0IGlzIHZpc2libGUgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hZGIgZGV2aWNlcyAtbF8gb3V0cHV0LlxuICovXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGxpc3Qgb2YgZGV2aWNlcyB2aXNpYmxlIHRvIGFkYi5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48RGV2aWNlPn0gVGhlIGxpc3Qgb2YgZGV2aWNlcyBvciBhbiBlbXB0eSBsaXN0IGlmXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gZGV2aWNlcyBhcmUgY29ubmVjdGVkLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBsaXN0aW5nIGRldmljZXMuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmdldENvbm5lY3RlZERldmljZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb25uZWN0ZWREZXZpY2VzICgpIHtcbiAgbG9nLmRlYnVnKCdHZXR0aW5nIGNvbm5lY3RlZCBkZXZpY2VzJyk7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLmV4ZWN1dGFibGUucGF0aCwgWy4uLnRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncywgJ2RldmljZXMnXSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBnZXR0aW5nIGNvbm5lY3RlZCBkZXZpY2VzLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgY29uc3QgbGlzdEhlYWRlciA9ICdMaXN0IG9mIGRldmljZXMnO1xuICAvLyBleHBlY3RpbmcgYWRiIGRldmljZXMgdG8gcmV0dXJuIG91dHB1dCBhc1xuICAvLyBMaXN0IG9mIGRldmljZXMgYXR0YWNoZWRcbiAgLy8gZW11bGF0b3ItNTU1NFx0ZGV2aWNlXG4gIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSBzdGRvdXQuaW5kZXhPZihsaXN0SGVhZGVyKTtcbiAgaWYgKHN0YXJ0aW5nSW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG91dHB1dCB3aGlsZSB0cnlpbmcgdG8gZ2V0IGRldmljZXM6ICR7c3Rkb3V0fWApO1xuICB9XG4gIC8vIHNsaWNpbmcgb3V0cHV0IHdlIGNhcmUgYWJvdXRcbiAgc3Rkb3V0ID0gc3Rkb3V0LnNsaWNlKHN0YXJ0aW5nSW5kZXgpO1xuICBsZXQgZXhjbHVkZWRMaW5lcyA9IFtsaXN0SGVhZGVyLCAnYWRiIHNlcnZlcicsICcqIGRhZW1vbiddO1xuICBpZiAoIXRoaXMuYWxsb3dPZmZsaW5lRGV2aWNlcykge1xuICAgIGV4Y2x1ZGVkTGluZXMucHVzaCgnb2ZmbGluZScpO1xuICB9XG4gIGNvbnN0IGRldmljZXMgPSBzdGRvdXQuc3BsaXQoJ1xcbicpXG4gICAgLm1hcChfLnRyaW0pXG4gICAgLmZpbHRlcigobGluZSkgPT4gbGluZSAmJiAhZXhjbHVkZWRMaW5lcy5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSlcbiAgICAucmVkdWNlKChhY2MsIGxpbmUpID0+IHtcbiAgICAgIC8vIHN0YXRlIGlzIFwiZGV2aWNlXCIsIGFmYWljXG4gICAgICBjb25zdCBbdWRpZCwgc3RhdGVdID0gbGluZS5zcGxpdCgvXFxzKy8pO1xuICAgICAgYWNjLnB1c2goe3VkaWQsIHN0YXRlfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgaWYgKF8uaXNFbXB0eShkZXZpY2VzKSkge1xuICAgIGxvZy5kZWJ1ZygnTm8gY29ubmVjdGVkIGRldmljZXMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBDb25uZWN0ZWQgZGV2aWNlczogJHtKU09OLnN0cmluZ2lmeShkZXZpY2VzKX1gKTtcbiAgfVxuICByZXR1cm4gZGV2aWNlcztcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGxpc3Qgb2YgZGV2aWNlcyB2aXNpYmxlIHRvIGFkYiB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRNcyAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZ2V0IGF0IGxlYXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIGxpc3QgaXRlbS5cbiAqIEByZXR1cm4ge0FycmF5LjxEZXZpY2U+fSBUaGUgbGlzdCBvZiBjb25uZWN0ZWQgZGV2aWNlcy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBjb25uZWN0ZWQgZGV2aWNlcyBjYW4gYmUgZGV0ZWN0ZWQgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXREZXZpY2VzV2l0aFJldHJ5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlc1dpdGhSZXRyeSAodGltZW91dE1zID0gMjAwMDApIHtcbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgbG9nLmRlYnVnKCdUcnlpbmcgdG8gZmluZCBhIGNvbm5lY3RlZCBhbmRyb2lkIGRldmljZScpO1xuICBjb25zdCBnZXREZXZpY2VzID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzID4gdGltZW91dE1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgY29ubmVjdGVkIEFuZHJvaWQgZGV2aWNlIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zLmApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IHRoaXMuZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgaWYgKGRldmljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZGV2aWNlcztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBsb2cuZGVidWcoJ0NvdWxkIG5vdCBmaW5kIG9ubGluZSBkZXZpY2VzJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVjb25uZWN0KCk7XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBZGIoKTtcbiAgICB9XG4gICAgLy8gY29vbCBkb3duXG4gICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0RGV2aWNlcygpO1xuICB9O1xuICByZXR1cm4gYXdhaXQgZ2V0RGV2aWNlcygpO1xufTtcblxuLyoqXG4gKiBLaWNrIGN1cnJlbnQgY29ubmVjdGlvbiBmcm9tIGhvc3QvZGV2aWNlIHNpZGUgYW5kIG1ha2UgaXQgcmVjb25uZWN0XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSB0YXJnZXQgW29mZmxpbmVdIE9uZSBvZiBwb3NzaWJsZSB0YXJnZXRzIHRvIHJlY29ubmVjdDpcbiAqIG9mZmxpbmUsIGRldmljZSBvciBudWxsXG4gKiBQcm92aWRpbmcgYG51bGxgIHdpbGwgY2F1c2UgcmVjb25uZWN0aW9uIHRvIGhhcHBlbiBmcm9tIHRoZSBob3N0IHNpZGUuXG4gKlxuICogQHRocm93cyB7RXJyb3J9IElmIGVpdGhlciBBREIgdmVyc2lvbiBpcyB0b28gb2xkIGFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoaXNcbiAqIGNvbW1hbmQgb3IgdGhlcmUgd2FzIGEgZmFpbHVyZSBkdXJpbmcgcmVjb25uZWN0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5yZWNvbm5lY3QgPSBhc3luYyBmdW5jdGlvbiByZWNvbm5lY3QgKHRhcmdldCA9ICdvZmZsaW5lJykge1xuICBsb2cuZGVidWcoYFJlY29ubmVjdGluZyBhZGIgKHRhcmdldCAke3RhcmdldH0pYCk7XG5cbiAgY29uc3QgYXJncyA9IFsncmVjb25uZWN0J107XG4gIGlmICh0YXJnZXQpIHtcbiAgICBhcmdzLnB1c2godGFyZ2V0KTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlY29ubmVjdCBhZGIuIE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXN0YXJ0IGFkYiBzZXJ2ZXIsIHVubGVzcyBfdGhpcy5zdXBwcmVzc0tpbGxTZXJ2ZXJfIHByb3BlcnR5IGlzIHRydWUuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLnJlc3RhcnRBZGIgPSBhc3luYyBmdW5jdGlvbiByZXN0YXJ0QWRiICgpIHtcbiAgaWYgKHRoaXMuc3VwcHJlc3NLaWxsU2VydmVyKSB7XG4gICAgbG9nLmRlYnVnKGBOb3QgcmVzdGFydGluZyBhYmQgc2luY2UgJ3N1cHByZXNzS2lsbFNlcnZlcicgaXMgb25gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2cuZGVidWcoJ1Jlc3RhcnRpbmcgYWRiJyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5raWxsU2VydmVyKCk7XG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnc3RhcnQtc2VydmVyJ10pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKGBFcnJvciBraWxsaW5nIEFEQiBzZXJ2ZXIsIGdvaW5nIHRvIHNlZSBpZiBpdCdzIG9ubGluZSBhbnl3YXlgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBLaWxsIGFkYiBzZXJ2ZXIuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmtpbGxTZXJ2ZXIgPSBhc3luYyBmdW5jdGlvbiBraWxsU2VydmVyICgpIHtcbiAgbG9nLmRlYnVnKGBLaWxsaW5nIGFkYiBzZXJ2ZXIgb24gcG9ydCAnJHt0aGlzLmFkYlBvcnR9J2ApO1xuICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydraWxsLXNlcnZlciddLCB7XG4gICAgZXhjbHVzaXZlOiB0cnVlLFxuICB9KTtcbn07XG5cbi8qKlxuICogUmVzZXQgVGVsbmV0IGF1dGhlbnRpY2F0aW9uIHRva2VuLlxuICogQHNlZSB7QGxpbmsgaHR0cDovL3Rvb2xzLmFuZHJvaWQuY29tL3JlY2VudC9lbXVsYXRvcjI1MTZyZWxlYXNlbm90ZXN9IGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IElmIHRva2VuIHJlc2V0IHdhcyBzdWNjZXNzZnVsLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5yZXNldFRlbG5ldEF1dGhUb2tlbiA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiByZXNldFRlbG5ldEF1dGhUb2tlbiAoKSB7XG4gIC8vIFRoZSBtZXRob2RzIGlzIHVzZWQgdG8gcmVtb3ZlIHRlbG5ldCBhdXRoIHRva2VuXG4gIC8vXG4gIGNvbnN0IGhvbWVGb2xkZXJQYXRoID0gcHJvY2Vzcy5lbnZbKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpID8gJ1VTRVJQUk9GSUxFJyA6ICdIT01FJ107XG4gIGlmICghaG9tZUZvbGRlclBhdGgpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IGZpbmQgdGhlIHBhdGggdG8gdXNlciBob21lIGZvbGRlci4gSWdub3JpbmcgcmVzZXR0aW5nIG9mIGVtdWxhdG9yJ3MgdGVsbmV0IGF1dGhlbnRpY2F0aW9uIHRva2VuYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlclBhdGgsICcuZW11bGF0b3JfY29uc29sZV9hdXRoX3Rva2VuJyk7XG4gIGxvZy5kZWJ1ZyhgT3ZlcnJpZGluZyAke2RzdFBhdGh9IHdpdGggYW4gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHRlbG5ldCBhdXRoZW50aWNhdGlvbiBmb3IgZW11bGF0b3IgY29tbWFuZHNgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZHN0UGF0aCwgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oYEVycm9yICR7ZS5tZXNzYWdlfSB3aGlsZSByZXNldHRpbmcgdGhlIGNvbnRlbnQgb2YgJHtkc3RQYXRofS4gSWdub3JpbmcgcmVzZXR0aW5nIG9mIGVtdWxhdG9yJ3MgdGVsbmV0IGF1dGhlbnRpY2F0aW9uIHRva2VuYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufSk7XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgZ2l2ZW4gZW11bGF0b3IgY29tbWFuZCB1c2luZyBfYWRiIGVtdV8gdG9vbC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBjbWQgLSBUaGUgYXJyYXkgb2YgcmVzdCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuYWRiRXhlY0VtdSA9IGFzeW5jIGZ1bmN0aW9uIGFkYkV4ZWNFbXUgKGNtZCkge1xuICBhd2FpdCB0aGlzLnZlcmlmeUVtdWxhdG9yQ29ubmVjdGVkKCk7XG4gIGF3YWl0IHRoaXMucmVzZXRUZWxuZXRBdXRoVG9rZW4oKTtcbiAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgLi4uY21kXSk7XG59O1xuXG5sZXQgaXNFeGVjTG9ja2VkID0gZmFsc2U7XG5cbnN5c3RlbUNhbGxNZXRob2RzLkVYRUNfT1VUUFVUX0ZPUk1BVCA9IE9iamVjdC5mcmVlemUoe1xuICBTVERPVVQ6ICdzdGRvdXQnLFxuICBGVUxMOiAnZnVsbCcsXG59KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFeGVjUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IFRoZSBzdGRvdXQgcmVjZWl2ZWQgZnJvbSBleGVjXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIFRoZSBzdGRlcnIgcmVjZWl2ZWQgZnJvbSBleGVjXG4gKi9cblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBnaXZlbiBhZGIgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBjbWQgLSBUaGUgYXJyYXkgb2YgcmVzdCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyc1xuICogICAgICAgICAgICAgICAgICAgICAgb3IgYSBzaW5nbGUgc3RyaW5nIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zIG1hcHBpbmcuIFNlZVxuICogICAgICAgICAgICAgICAgICAgICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9ub2RlLXRlZW5fcHJvY2Vzc31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgZGV0YWlscy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNldCB0aGUgYWRkaXRpb25hbCBgZXhjbHVzaXZlYCBwYXJhbVxuICogICAgICAgICAgICAgICAgICAgICAgICB0byBgdHJ1ZWAgdGhhdCBhc3N1cmVzIG5vIG90aGVyIHBhcmFsbGVsIGFkYiBjb21tYW5kc1xuICogICAgICAgICAgICAgICAgICAgICAgICBhcmUgZ29pbmcgdG8gYmUgZXhlY3V0ZWQgd2hpbGUgdGhlIGN1cnJlbnQgb25lIGlzIHJ1bm5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhlIGBvdXRwdXRGb3JtYXRgIHBhcmFtIHRvIGBzdGRvdXRgIHRvIHJlY2VpdmUganVzdCB0aGUgc3Rkb3V0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAoZGVmYXVsdCkgb3IgYGZ1bGxgIHRvIHJlY2VpdmUgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHJlc3BvbnNlIGZyb20gYVxuICogICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHdpdGggYSB6ZXJvIGV4aXQgY29kZVxuICogQHJldHVybiB7c3RyaW5nfEV4ZWNSZXN1bHR9IC0gQ29tbWFuZCdzIHN0ZG91dCBvciBhbiBvYmplY3QgY29udGFpbmluZyBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY29tbWFuZCByZXR1cm5lZCBub24temVybyBleGl0IGNvZGUuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmFkYkV4ZWMgPSBhc3luYyBmdW5jdGlvbiBhZGJFeGVjIChjbWQsIG9wdHMgPSB7fSkge1xuICBpZiAoIWNtZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gcGFzcyBpbiBhIGNvbW1hbmQgdG8gYWRiRXhlYygpJyk7XG4gIH1cblxuICBvcHRzID0gXy5jbG9uZURlZXAob3B0cyk7XG4gIC8vIHNldHRpbmcgZGVmYXVsdCB0aW1lb3V0IGZvciBlYWNoIGNvbW1hbmQgdG8gcHJldmVudCBpbmZpbml0ZSB3YWl0LlxuICBvcHRzLnRpbWVvdXQgPSBvcHRzLnRpbWVvdXQgfHwgdGhpcy5hZGJFeGVjVGltZW91dCB8fCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQ7XG4gIG9wdHMudGltZW91dENhcE5hbWUgPSBvcHRzLnRpbWVvdXRDYXBOYW1lIHx8ICdhZGJFeGVjVGltZW91dCc7IC8vIEZvciBlcnJvciBtZXNzYWdlXG5cbiAgY29uc3Qge291dHB1dEZvcm1hdCA9IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULlNURE9VVH0gPSBvcHRzO1xuXG4gIGNtZCA9IF8uaXNBcnJheShjbWQpID8gY21kIDogW2NtZF07XG4gIGxldCBhZGJSZXRyaWVkID0gZmFsc2U7XG4gIGNvbnN0IGV4ZWNGdW5jID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLnRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncywgLi4uY21kXTtcbiAgICAgIGxvZy5kZWJ1ZyhgUnVubmluZyAnJHt0aGlzLmV4ZWN1dGFibGUucGF0aH0gYCArXG4gICAgICAgIChhcmdzLmZpbmQoKGFyZykgPT4gL1xccysvLnRlc3QoYXJnKSkgPyB1dGlsLnF1b3RlKGFyZ3MpIDogYXJncy5qb2luKCcgJykpICsgYCdgKTtcbiAgICAgIGxldCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgZXhlYyh0aGlzLmV4ZWN1dGFibGUucGF0aCwgYXJncywgb3B0cyk7XG4gICAgICAvLyBzb21ldGltZXMgQURCIHByaW50cyBvdXQgd2VpcmQgc3Rkb3V0IHdhcm5pbmdzIHRoYXQgd2UgZG9uJ3Qgd2FudFxuICAgICAgLy8gdG8gaW5jbHVkZSBpbiBhbnkgb2YgdGhlIHJlc3BvbnNlIGRhdGEsIHNvIGxldCdzIHN0cmlwIGl0IG91dFxuICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJlcGxhY2UoTElOS0VSX1dBUk5JTkdfUkVHRVhQLCAnJykudHJpbSgpO1xuICAgICAgcmV0dXJuIG91dHB1dEZvcm1hdCA9PT0gdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTCA/IHtzdGRvdXQsIHN0ZGVycn0gOiBzdGRvdXQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyVGV4dCA9IGAke2UubWVzc2FnZX0sICR7ZS5zdGRvdXR9LCAke2Uuc3RkZXJyfWA7XG4gICAgICBpZiAoQURCX1JFVFJZX0VSUk9SX1BBVFRFUk5TLnNvbWUoKHApID0+IHAudGVzdChlcnJUZXh0KSkpIHtcbiAgICAgICAgbG9nLmluZm8oYEVycm9yIHNlbmRpbmcgY29tbWFuZCwgcmVjb25uZWN0aW5nIGRldmljZSBhbmQgcmV0cnlpbmc6ICR7Y21kfWApO1xuICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXREZXZpY2VzV2l0aFJldHJ5KCk7XG5cbiAgICAgICAgLy8gdHJ5IGFnYWluIG9uZSB0aW1lXG4gICAgICAgIGlmIChhZGJSZXRyaWVkKSB7XG4gICAgICAgICAgYWRiUmV0cmllZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGV4ZWNGdW5jKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUuY29kZSA9PT0gMCAmJiBlLnN0ZG91dCkge1xuICAgICAgICByZXR1cm4gZS5zdGRvdXQucmVwbGFjZShMSU5LRVJfV0FSTklOR19SRUdFWFAsICcnKS50cmltKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzTnVsbChlLmNvZGUpKSB7XG4gICAgICAgIGUubWVzc2FnZSA9IGBFcnJvciBleGVjdXRpbmcgYWRiRXhlYy4gT3JpZ2luYWwgZXJyb3I6ICcke2UubWVzc2FnZX0nLiBgICtcbiAgICAgICAgICBgVHJ5IHRvIGluY3JlYXNlIHRoZSAke29wdHMudGltZW91dH1tcyBhZGIgZXhlY3V0aW9uIHRpbWVvdXQgcmVwcmVzZW50ZWQgYnkgJyR7b3B0cy50aW1lb3V0Q2FwTmFtZX0nIGNhcGFiaWxpdHlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZS5tZXNzYWdlID0gYEVycm9yIGV4ZWN1dGluZyBhZGJFeGVjLiBPcmlnaW5hbCBlcnJvcjogJyR7ZS5tZXNzYWdlfSc7IGAgK1xuICAgICAgICAgIGBDb21tYW5kIG91dHB1dDogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCAnPGVtcHR5Pid9YDtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuXG4gIGlmIChpc0V4ZWNMb2NrZWQpIHtcbiAgICBsb2cuZGVidWcoJ1dhaXRpbmcgdW50aWwgdGhlIG90aGVyIGV4Y2x1c2l2ZSBBREIgY29tbWFuZCBpcyBjb21wbGV0ZWQnKTtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFpc0V4ZWNMb2NrZWQsIHtcbiAgICAgIHdhaXRNczogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICBpbnRlcnZhbE1zOiAxMCxcbiAgICB9KTtcbiAgICBsb2cuZGVidWcoJ0NvbnRpbnVpbmcgd2l0aCB0aGUgY3VycmVudCBBREIgY29tbWFuZCcpO1xuICB9XG4gIGlmIChvcHRzLmV4Y2x1c2l2ZSkge1xuICAgIGlzRXhlY0xvY2tlZCA9IHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZXhlY0Z1bmMoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob3B0cy5leGNsdXNpdmUpIHtcbiAgICAgIGlzRXhlY0xvY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaGVsbEV4ZWNPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthZGJFeGVjVGltZW91dF0gLSB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBBcHBpdW0ncyB0aW1lb3V0IGNhcGFiaWxpdHlcbiAqICh1c2VkIGluIHRoZSBlcnJvciBtZXNzYWdlcykuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRpbWVvdXQgW2FkYkV4ZWNUaW1lb3V0XSAtIGNvbW1hbmQgZXhlY3V0aW9uIHRpbWVvdXQuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBwcml2aWxlZ2VkIFtmYWxzeV0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgZ2l2ZW4gY29tbWFuZCBhcyByb290LlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBvdXRwdXRGb3JtYXQgW3N0ZG91dF0gLSBXaGV0aGVyIHJlc3BvbnNlIHNob3VsZCBpbmNsdWRlIGZ1bGwgZXhlYyBvdXRwdXQgb3IganVzdCBzdGRvdXQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvdGVudGlhbCB2YWx1ZXMgYXJlIGZ1bGwgb3Igc3Rkb3V0LlxuICpcbiAqIEFsbCBvdGhlciBwcm9wZXJ0aWVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYGV4ZWNgIGNhbGwgZnJvbSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9ub2RlLXRlZW5fcHJvY2Vzc31cbiAqIG1vZHVsZVxuICovXG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgZ2l2ZW4gY29tbWFuZCB1c2luZyBfYWRiIHNoZWxsXyBwcmVmaXguXG4gKlxuICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz58c3RyaW5nfSBjbWQgLSBUaGUgYXJyYXkgb2YgcmVzdCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBvciBhIHNpbmdsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gez9TaGVsbEV4ZWNPcHRpb25zfSBvcHRzIFt7fV0gLSBBZGRpdGlvbmFsIG9wdGlvbnMgbWFwcGluZy5cbiAqIEByZXR1cm4ge3N0cmluZ30gLSBDb21tYW5kJ3Mgc3Rkb3V0LlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgY29kZS5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuc2hlbGwgPSBhc3luYyBmdW5jdGlvbiBzaGVsbCAoY21kLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHByaXZpbGVnZWQsXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IGNtZEFyciA9IF8uaXNBcnJheShjbWQpID8gY21kIDogW2NtZF07XG4gIGNvbnN0IGZ1bGxDbWQgPSBbJ3NoZWxsJ107XG4gIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgbG9nLmluZm8oYCdhZGIgc2hlbGwgJHt1dGlsLnF1b3RlKGNtZEFycil9JyByZXF1aXJlcyByb290IGFjY2Vzc2ApO1xuICAgIGlmIChhd2FpdCB0aGlzLmlzUm9vdCgpKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGRldmljZSBhbHJlYWR5IGhhZCByb290IGFjY2VzcycpO1xuICAgICAgZnVsbENtZC5wdXNoKC4uLmNtZEFycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bGxDbWQucHVzaCgnc3UnLCAncm9vdCcsIHV0aWwucXVvdGUoY21kQXJyKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZ1bGxDbWQucHVzaCguLi5jbWRBcnIpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYkV4ZWMoZnVsbENtZCwgb3B0cyk7XG59O1xuXG5zeXN0ZW1DYWxsTWV0aG9kcy5jcmVhdGVTdWJQcm9jZXNzID0gZnVuY3Rpb24gY3JlYXRlU3ViUHJvY2VzcyAoYXJncyA9IFtdKSB7XG4gIC8vIGFkZCB0aGUgZGVmYXVsdCBhcmd1bWVudHNcbiAgYXJncyA9IFsuLi50aGlzLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MsIC4uLmFyZ3NdO1xuICBsb2cuZGVidWcoYENyZWF0aW5nIEFEQiBzdWJwcm9jZXNzIHdpdGggYXJnczogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgcmV0dXJuIG5ldyBTdWJQcm9jZXNzKHRoaXMuZ2V0QWRiUGF0aCgpLCBhcmdzKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1cnJlbnQgYWRiIHBvcnQuXG4gKiBAdG9kbyBjYW4gcHJvYmFibHkgZGVwcmVjYXRlIHRoaXMgbm93IHRoYXQgdGhlIGxvZ2ljIGlzIGp1c3QgdG8gcmVhZCB0aGlzLmFkYlBvcnRcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGN1cnJlbnQgYWRiIHBvcnQgbnVtYmVyLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRBZGJTZXJ2ZXJQb3J0ID0gZnVuY3Rpb24gZ2V0QWRiU2VydmVyUG9ydCAoKSB7XG4gIHJldHVybiB0aGlzLmFkYlBvcnQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGVtdWxhdG9yIHBvcnQgZnJvbSBfYWRiIGRldml2ZXNfIG91dHB1dC5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjdXJyZW50IGVtdWxhdG9yIHBvcnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgYXJlIG5vIGNvbm5lY3RlZCBkZXZpY2VzLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRFbXVsYXRvclBvcnQgPSBhc3luYyBmdW5jdGlvbiBnZXRFbXVsYXRvclBvcnQgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgcnVubmluZyBlbXVsYXRvciBwb3J0Jyk7XG4gIGlmICh0aGlzLmVtdWxhdG9yUG9ydCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVtdWxhdG9yUG9ydDtcbiAgfVxuICB0cnkge1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgdGhpcy5nZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgbGV0IHBvcnQgPSB0aGlzLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcoZGV2aWNlc1swXS51ZGlkKTtcbiAgICBpZiAocG9ydCkge1xuICAgICAgcmV0dXJuIHBvcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW11bGF0b3IgcG9ydCBub3QgZm91bmRgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRldmljZXMgY29ubmVjdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZW11bGF0b3IgcG9ydCBieSBwYXJzaW5nIGVtdWxhdG9yIG5hbWUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbVN0ciAtIEVtdWxhdG9yIG5hbWUgc3RyaW5nLlxuICogQHJldHVybiB7bnVtYmVyfGJvb2xlYW59IEVpdGhlciB0aGUgY3VycmVudCBlbXVsYXRvciBwb3J0IG9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZhbHNlXyBpZiBwb3J0IG51bWJlciBjYW5ub3QgYmUgcGFyc2VkLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nID0gZnVuY3Rpb24gZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyAoZW1TdHIpIHtcbiAgbGV0IHBvcnRQYXR0ZXJuID0gL2VtdWxhdG9yLShcXGQrKS87XG4gIGlmIChwb3J0UGF0dGVybi50ZXN0KGVtU3RyKSkge1xuICAgIHJldHVybiBwYXJzZUludChwb3J0UGF0dGVybi5leGVjKGVtU3RyKVsxXSwgMTApO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGNvbm5lY3RlZCBlbXVsYXRvcnMuXG4gKlxuICogQHJldHVybiB7QXJyYXkuPERldmljZT59IFRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRDb25uZWN0ZWRFbXVsYXRvcnMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb25uZWN0ZWRFbXVsYXRvcnMgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgY29ubmVjdGVkIGVtdWxhdG9ycycpO1xuICB0cnkge1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgdGhpcy5nZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgbGV0IGVtdWxhdG9ycyA9IFtdO1xuICAgIGZvciAobGV0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICBsZXQgcG9ydCA9IHRoaXMuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyhkZXZpY2UudWRpZCk7XG4gICAgICBpZiAocG9ydCkge1xuICAgICAgICBkZXZpY2UucG9ydCA9IHBvcnQ7XG4gICAgICAgIGVtdWxhdG9ycy5wdXNoKGRldmljZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgJHt1dGlsLnBsdXJhbGl6ZSgnZW11bGF0b3InLCBlbXVsYXRvcnMubGVuZ3RoLCB0cnVlKX0gY29ubmVjdGVkYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9ycztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZ2V0dGluZyBlbXVsYXRvcnMuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTZXQgX2VtdWxhdG9yUG9ydF8gcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQgY2xhc3MuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGVtUG9ydCAtIFRoZSBlbXVsYXRvciBwb3J0IHRvIGJlIHNldC5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuc2V0RW11bGF0b3JQb3J0ID0gZnVuY3Rpb24gc2V0RW11bGF0b3JQb3J0IChlbVBvcnQpIHtcbiAgdGhpcy5lbXVsYXRvclBvcnQgPSBlbVBvcnQ7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaWRlbnRpZmllciBvZiB0aGUgY3VycmVudCBkZXZpY2UgKF90aGlzLmN1ckRldmljZUlkXykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IC0gVGhlIGRldmljZSBpZGVudGlmaWVyLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5zZXREZXZpY2VJZCA9IGZ1bmN0aW9uIHNldERldmljZUlkIChkZXZpY2VJZCkge1xuICBsb2cuZGVidWcoYFNldHRpbmcgZGV2aWNlIGlkIHRvICR7ZGV2aWNlSWR9YCk7XG4gIHRoaXMuY3VyRGV2aWNlSWQgPSBkZXZpY2VJZDtcbiAgbGV0IGFyZ3NIYXNEZXZpY2UgPSB0aGlzLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuaW5kZXhPZignLXMnKTtcbiAgaWYgKGFyZ3NIYXNEZXZpY2UgIT09IC0xKSB7XG4gICAgLy8gcmVtb3ZlIHRoZSBvbGQgZGV2aWNlIGlkIGZyb20gdGhlIGFyZ3VtZW50c1xuICAgIHRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5zcGxpY2UoYXJnc0hhc0RldmljZSwgMik7XG4gIH1cbiAgdGhpcy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLnB1c2goJy1zJywgZGV2aWNlSWQpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHRoZSBjdXJyZW50IGRldmljZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtEZXZpY2V9IGRldmljZU9iaiAtIFRoZSBkZXZpY2Ugb2JqZWN0IHRvIGJlIHNldC5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuc2V0RGV2aWNlID0gZnVuY3Rpb24gc2V0RGV2aWNlIChkZXZpY2VPYmopIHtcbiAgbGV0IGRldmljZUlkID0gZGV2aWNlT2JqLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSB0aGlzLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcoZGV2aWNlSWQpO1xuICB0aGlzLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB0aGlzLnNldERldmljZUlkKGRldmljZUlkKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyBlbXVsYXRvci5cbiAqICEhISBUaGlzIG1ldGhvZCBoYXMgYSBzaWRlIGVmZmVjdCAtIGl0IGltcGxpY2l0bHkgY2hhbmdlcyB0aGVcbiAqIGBkZXZpY2VJZGAgKG9ubHkgaWYgQVZEIHdpdGggYSBtYXRjaGluZyBuYW1lIGlzIGZvdW5kKVxuICogYW5kIGBlbXVsYXRvclBvcnRgIGluc3RhbmNlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgLSBFbXVsYXRvciBuYW1lLlxuICogQHJldHVybiB7P0RldmljZX0gQ3VycmVudGx5IHJ1bm5pbmcgZW11bGF0b3Igb3IgX251bGxfLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRSdW5uaW5nQVZEID0gYXN5bmMgZnVuY3Rpb24gZ2V0UnVubmluZ0FWRCAoYXZkTmFtZSkge1xuICBsb2cuZGVidWcoYFRyeWluZyB0byBmaW5kICcke2F2ZE5hbWV9JyBlbXVsYXRvcmApO1xuICB0cnkge1xuICAgIGNvbnN0IGVtdWxhdG9ycyA9IGF3YWl0IHRoaXMuZ2V0Q29ubmVjdGVkRW11bGF0b3JzKCk7XG4gICAgZm9yIChjb25zdCBlbXVsYXRvciBvZiBlbXVsYXRvcnMpIHtcbiAgICAgIHRoaXMuc2V0RW11bGF0b3JQb3J0KGVtdWxhdG9yLnBvcnQpO1xuICAgICAgY29uc3QgcnVubmluZ0FWRE5hbWUgPSBhd2FpdCB0aGlzLmV4ZWNFbXVDb25zb2xlQ29tbWFuZChbJ2F2ZCcsICduYW1lJ10sIHtcbiAgICAgICAgcG9ydDogZW11bGF0b3IucG9ydCxcbiAgICAgICAgZXhlY1RpbWVvdXQ6IDUwMDAsXG4gICAgICAgIGNvbm5UaW1lb3V0OiAxMDAwLFxuICAgICAgfSk7XG4gICAgICBpZiAoXy50b0xvd2VyKGF2ZE5hbWUpID09PSBfLnRvTG93ZXIocnVubmluZ0FWRE5hbWUudHJpbSgpKSkge1xuICAgICAgICBsb2cuZGVidWcoYEZvdW5kIGVtdWxhdG9yICcke2F2ZE5hbWV9JyBvbiBwb3J0ICR7ZW11bGF0b3IucG9ydH1gKTtcbiAgICAgICAgdGhpcy5zZXREZXZpY2VJZChlbXVsYXRvci51ZGlkKTtcbiAgICAgICAgcmV0dXJuIGVtdWxhdG9yO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYEVtdWxhdG9yICcke2F2ZE5hbWV9JyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBudWxsO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZXR0aW5nIEFWRC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgb2JqZWN0IGZvciB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgLSBFbXVsYXRvciBuYW1lLlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRNcyBbMjAwMDBdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgcnVubmluZyBBVkQgb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBkZXRlY3RlZC5cbiAqIEByZXR1cm4gez9EZXZpY2V9IEN1cnJlbnRseSBydW5uaW5nIGVtdWxhdG9yIG9yIF9udWxsXy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIHRoZSB0aW1lb3V0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5nZXRSdW5uaW5nQVZEV2l0aFJldHJ5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0UnVubmluZ0FWRFdpdGhSZXRyeSAoYXZkTmFtZSwgdGltZW91dE1zID0gMjAwMDApIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRSdW5uaW5nQVZEKGF2ZE5hbWUucmVwbGFjZSgnQCcsICcnKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhlLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0TXMsXG4gICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZXR0aW5nIEFWRCB3aXRoIHJldHJ5LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogU2h1dGRvd24gYWxsIHJ1bm5pbmcgZW11bGF0b3JzIGJ5IGtpbGxpbmcgdGhlaXIgcHJvY2Vzc2VzLlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBraWxsaW5nIHRvb2wgcmV0dXJuZWQgbm9uLXplcm8gcmV0dXJuIGNvZGUuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmtpbGxBbGxFbXVsYXRvcnMgPSBhc3luYyBmdW5jdGlvbiBraWxsQWxsRW11bGF0b3JzICgpIHtcbiAgbGV0IGNtZCwgYXJncztcbiAgaWYgKHN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIGNtZCA9ICdUQVNLS0lMTCc7XG4gICAgYXJncyA9IFsnVEFTS0tJTEwnLCAnL0lNJywgJ2VtdWxhdG9yLmV4ZSddO1xuICB9IGVsc2Uge1xuICAgIGNtZCA9ICcvdXNyL2Jpbi9raWxsYWxsJztcbiAgICBhcmdzID0gWyctbScsICdlbXVsYXRvcionXTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoY21kLCBhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Iga2lsbGluZyBlbXVsYXRvcnMuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBLaWxsIGVtdWxhdG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuIE5vIGVycm9yXG4gKiBpcyB0aHJvd24gaXMgZ2l2ZW4gYXZkIGRvZXMgbm90IGV4aXN0L2lzIG5vdCBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gYXZkTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBlbXVsYXRvciB0byBiZSBraWxsZWQuIElmIGVtcHR5LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZW11bGF0b3Igd2lsbCBiZSBraWxsZWQuXG4gKiBAcGFyYW0gez9udW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSB0aHJvd2luZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGNlcHRpb24gYWJvdXQgdW5zdWNjZXNzZnVsIGtpbGxpbmdcbiAqIEByZXR1cm4ge2Jvb2xlYW59IC0gVHJ1ZSBpZiB0aGUgZW11bGF0b3Igd2FzIGtpbGxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgYnkga2lsbGluZyB0aGUgZW11bGF0b3JcbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMua2lsbEVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24ga2lsbEVtdWxhdG9yIChhdmROYW1lID0gbnVsbCwgdGltZW91dCA9IDYwMDAwKSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKGF2ZE5hbWUpKSB7XG4gICAgbG9nLmRlYnVnKGBLaWxsaW5nIGF2ZCAnJHthdmROYW1lfSdgKTtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmdldFJ1bm5pbmdBVkQoYXZkTmFtZSk7XG4gICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgIGxvZy5pbmZvKGBObyBhdmQgd2l0aCBuYW1lICcke2F2ZE5hbWV9JyBydW5uaW5nLiBTa2lwcGluZyBraWxsIHN0ZXAuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGtpbGxpbmcgdGhlIGN1cnJlbnQgYXZkXG4gICAgbG9nLmRlYnVnKGBLaWxsaW5nIGF2ZCB3aXRoIGlkICcke3RoaXMuY3VyRGV2aWNlSWR9J2ApO1xuICAgIGlmICghYXdhaXQgdGhpcy5pc0VtdWxhdG9yQ29ubmVjdGVkKCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgRW11bGF0b3Igd2l0aCBpZCAnJHt0aGlzLmN1ckRldmljZUlkfScgbm90IGNvbm5lY3RlZC4gU2tpcHBpbmcga2lsbCBzdGVwYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdraWxsJ10pO1xuICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIHVudGlsIHRoZSBlbXVsYXRvciAnJHthdmROYW1lID8gYXZkTmFtZSA6IHRoaXMuY3VyRGV2aWNlSWR9JyBpcyBraWxsZWRgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1dGlsLmhhc1ZhbHVlKGF2ZE5hbWUpXG4gICAgICAgICAgPyAhYXdhaXQgdGhpcy5nZXRSdW5uaW5nQVZEKGF2ZE5hbWUpXG4gICAgICAgICAgOiAhYXdhaXQgdGhpcy5pc0VtdWxhdG9yQ29ubmVjdGVkKCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgaW50ZXJ2YWxNczogMjAwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGVtdWxhdG9yICcke2F2ZE5hbWUgPyBhdmROYW1lIDogdGhpcy5jdXJEZXZpY2VJZH0nIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgYmVpbmcga2lsbGVkICR7dGltZW91dH1tcyBhZ29gKTtcbiAgfVxuICBsb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IGtpbGxlZCB0aGUgJyR7YXZkTmFtZSA/IGF2ZE5hbWUgOiB0aGlzLmN1ckRldmljZUlkfScgZW11bGF0b3JgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEF2ZExhdW5jaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGFyZ3MgQWRkaXRpb25hbCBlbXVsYXRvciBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZW52IEFkZGl0aW9uYWwgZW11bGF0b3IgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFuZ3VhZ2UgRW11bGF0b3Igc3lzdGVtIGxhbmd1YWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY291bnRyeSBFbXVsYXRvciBzeXN0ZW0gY291bnRyeVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxhdW5jaFRpbWVvdXQgWzYwMDAwXSBFbXVsYXRvciBzdGFydHVwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVhZHlUaW1lb3V0IFs2MDAwMF0gVGhlIG1heGltdW0gcGVyaW9kIG9mIHRpbWUgdG8gd2FpdCB1bnRpbCBFbXVsYXRvclxuICogaXMgcmVhZHkgZm9yIHVzYWdlIGluIG1pbGxpc2Vjb25kc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHJldHJ5VGltZXMgWzFdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFydHVwIHJldHJpZXNcbiAqL1xuXG4vKipcbiAqIFN0YXJ0IGFuIGVtdWxhdG9yIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgd2FpdCB1bnRpbCBpdCBpcyBmdWxseSBzdGFydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmROYW1lIC0gVGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZW11bGF0b3IuXG4gKiBAcGFyYW0gez9BdmRMYXVuY2hPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7U3ViUHJvY2Vzc30gRW11bGF0b3Igc3VicHJvY2VzcyBpbnN0YW5jZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBlbXVsYXRvciBmYWlscyB0byBzdGFydCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmxhdW5jaEFWRCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFWRCAoYXZkTmFtZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcmdzID0gW10sXG4gICAgZW52ID0ge30sXG4gICAgbGFuZ3VhZ2UsXG4gICAgY291bnRyeSxcbiAgICBsYXVuY2hUaW1lb3V0ID0gNjAwMDAsXG4gICAgcmVhZHlUaW1lb3V0ID0gNjAwMDAsXG4gICAgcmV0cnlUaW1lcyA9IDEsXG4gIH0gPSBvcHRzO1xuICBsb2cuZGVidWcoYExhdW5jaGluZyBFbXVsYXRvciB3aXRoIEFWRCAke2F2ZE5hbWV9LCBsYXVuY2hUaW1lb3V0IGAgK1xuICAgICAgICAgICAgYCR7bGF1bmNoVGltZW91dH1tcyBhbmQgcmVhZHlUaW1lb3V0ICR7cmVhZHlUaW1lb3V0fW1zYCk7XG4gIGNvbnN0IGVtdWxhdG9yQmluYXJ5UGF0aCA9IGF3YWl0IHRoaXMuZ2V0U2RrQmluYXJ5UGF0aCgnZW11bGF0b3InKTtcbiAgaWYgKGF2ZE5hbWVbMF0gPT09ICdAJykge1xuICAgIGF2ZE5hbWUgPSBhdmROYW1lLnN1YnN0cigxKTtcbiAgfVxuICBhd2FpdCB0aGlzLmNoZWNrQXZkRXhpc3QoYXZkTmFtZSk7XG5cbiAgY29uc3QgbGF1bmNoQXJncyA9IFsnLWF2ZCcsIGF2ZE5hbWVdO1xuICBsYXVuY2hBcmdzLnB1c2goLi4uKHRvQXZkTG9jYWxlQXJncyhsYW5ndWFnZSwgY291bnRyeSkpKTtcblxuICBsZXQgaXNEZWxheUFkYkZlYXR1cmVFbmFibGVkID0gZmFsc2U7XG4gIGlmICh0aGlzLmFsbG93RGVsYXlBZGIpIHtcbiAgICBjb25zdCB7cmV2aXNpb259ID0gYXdhaXQgdGhpcy5nZXRFbXVWZXJzaW9uSW5mbygpO1xuICAgIGlmIChyZXZpc2lvbiAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyhyZXZpc2lvbiwgJz49JywgJzI5LjAuNycpKSB7XG4gICAgICAvLyBodHRwczovL2FuZHJvaWRzdHVkaW8uZ29vZ2xlYmxvZy5jb20vMjAxOS8wNS9lbXVsYXRvci0yOTA3LWNhbmFyeS5odG1sXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7dGFyZ2V0fSA9IGF3YWl0IHRoaXMuZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzKGF2ZE5hbWUpO1xuICAgICAgICBjb25zdCBhcGlNYXRjaCA9IC9cXGQrLy5leGVjKHRhcmdldCk7XG4gICAgICAgIC8vIGh0dHBzOi8vaXNzdWV0cmFja2VyLmdvb2dsZS5jb20vaXNzdWVzLzE0MjUzMzM1NVxuICAgICAgICBpZiAoYXBpTWF0Y2ggJiYgcGFyc2VJbnQoYXBpTWF0Y2hbMF0sIDEwKSA+PSBNSU5fREVMQVlfQURCX0FQSV9MRVZFTCkge1xuICAgICAgICAgIGxhdW5jaEFyZ3MucHVzaCgnLWRlbGF5LWFkYicpO1xuICAgICAgICAgIGlzRGVsYXlBZGJGZWF0dXJlRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYWN0dWFsIGltYWdlIEFQSSB2ZXJzaW9uIGlzIGJlbG93ICR7TUlOX0RFTEFZX0FEQl9BUElfTEVWRUx9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmluZm8oYFRoZSAtZGVsYXktYWRiIGVtdWxhdG9yIHN0YXJ0dXAgZGV0ZWN0aW9uIGZlYXR1cmUgd2lsbCBub3QgYmUgZW5hYmxlZC4gYCArXG4gICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nLmluZm8oJ1RoZSAtZGVsYXktYWRiIGVtdWxhdG9yIHN0YXJ0dXAgZGV0ZWN0aW9uIGZlYXR1cmUgaGFzIGJlZW4gZXhwbGljaXRseSBkaXNhYmxlZCcpO1xuICB9XG5cbiAgaWYgKCFfLmlzRW1wdHkoYXJncykpIHtcbiAgICBsYXVuY2hBcmdzLnB1c2goLi4uKF8uaXNBcnJheShhcmdzKSA/IGFyZ3MgOiB1dGlsLnNoZWxsUGFyc2UoYCR7YXJnc31gKSkpO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBSdW5uaW5nICcke2VtdWxhdG9yQmluYXJ5UGF0aH0nIHdpdGggYXJnczogJHt1dGlsLnF1b3RlKGxhdW5jaEFyZ3MpfWApO1xuICBpZiAoIV8uaXNFbXB0eShlbnYpKSB7XG4gICAgbG9nLmRlYnVnKGBDdXN0b21pemVkIGVtdWxhdG9yIGVudmlyb25tZW50OiAke0pTT04uc3RyaW5naWZ5KGVudil9YCk7XG4gIH1cbiAgY29uc3QgcHJvYyA9IG5ldyBTdWJQcm9jZXNzKGVtdWxhdG9yQmluYXJ5UGF0aCwgbGF1bmNoQXJncywge1xuICAgIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudiksXG4gIH0pO1xuICBhd2FpdCBwcm9jLnN0YXJ0KDApO1xuICBwcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRvdXQgfHwgc3RkZXJyIHx8ICcnKS5zcGxpdCgnXFxuJykuZmlsdGVyKEJvb2xlYW4pKSB7XG4gICAgICBsb2cuaW5mbyhgW0FWRCBPVVRQVVRdICR7bGluZX1gKTtcbiAgICB9XG4gIH0pO1xuICBwcm9jLm9uKCdkaWUnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgbG9nLndhcm4oYEVtdWxhdG9yIGF2ZCAke2F2ZE5hbWV9IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSR7c2lnbmFsID8gYCwgc2lnbmFsICR7c2lnbmFsfWAgOiAnJ31gKTtcbiAgfSk7XG4gIGF3YWl0IHJldHJ5KHJldHJ5VGltZXMsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZ2V0UnVubmluZ0FWRFdpdGhSZXRyeShhdmROYW1lLCBsYXVuY2hUaW1lb3V0KSk7XG4gIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBkZXZpY2VJZCBhbHJlYWR5IGFzc2lnbmVkXG4gIGlmIChpc0RlbGF5QWRiRmVhdHVyZUVuYWJsZWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnd2FpdC1mb3ItZGV2aWNlJ10sIHt0aW1lb3V0OiByZWFkeVRpbWVvdXR9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2F2ZE5hbWV9JyBFbXVsYXRvciBoYXMgZmFpbGVkIHRvIGJvb3Q6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JFbXVsYXRvclJlYWR5KHJlYWR5VGltZW91dCk7XG4gIH1cbiAgcmV0dXJuIHByb2M7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJpbmFyeVZlcnNpb25cbiAqIEBwcm9wZXJ0eSB7U2VtVmVyfSB2ZXJzaW9uIC0gVGhlIEFEQiBiaW5hcnkgdmVyc2lvbiBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWlsZCAtIFRoZSBBREIgYmluYXJ5IGJ1aWxkIG51bWJlclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQnJpZGdlVmVyc2lvblxuICogQHByb3BlcnR5IHtTZW1WZXJ9IHZlcnNpb24gLSBUaGUgQW5kcm9pZCBEZWJ1ZyBCcmlkZ2UgdmVyc2lvbiBudW1iZXJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFZlcnNpb25cbiAqIEBwcm9wZXJ0eSB7P0JpbmFyeVZlcnNpb259IGJpbmFyeSBUaGlzIHZlcnNpb24gbnVtYmVyIG1pZ2h0IG5vdCBiZVxuICogYmUgcHJlc2VudCBmb3Igb2xkZXIgQURCIHJlbGVhc2VzLlxuICogQHByb3BlcnR5IHtCcmlkZ2VWZXJzaW9ufSBicmlkZ2VcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgYWRiIHZlcnNpb24uIFRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgaXMgY2FjaGVkLlxuICpcbiAqIEByZXR1cm4ge1ZlcnNpb259XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHBhcnNlIGFkYiBiaW5hcnkgdmVyc2lvbi5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuZ2V0VmVyc2lvbiA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRWZXJzaW9uICgpIHtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYkV4ZWMoJ3ZlcnNpb24nKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZ2V0dGluZyBhZGIgdmVyc2lvbjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYmluYXJ5VmVyc2lvbk1hdGNoID0gQklOQVJZX1ZFUlNJT05fUEFUVEVSTi5leGVjKHN0ZG91dCk7XG4gIGlmIChiaW5hcnlWZXJzaW9uTWF0Y2gpIHtcbiAgICByZXN1bHQuYmluYXJ5ID0ge1xuICAgICAgdmVyc2lvbjogc2VtdmVyLmNvZXJjZShiaW5hcnlWZXJzaW9uTWF0Y2hbMV0pLFxuICAgICAgYnVpbGQ6IHBhcnNlSW50KGJpbmFyeVZlcnNpb25NYXRjaFsyXSwgMTApLFxuICAgIH07XG4gIH1cbiAgY29uc3QgYnJpZGdlVmVyc2lvbk1hdGNoID0gQlJJREdFX1ZFUlNJT05fUEFUVEVSTi5leGVjKHN0ZG91dCk7XG4gIGlmIChicmlkZ2VWZXJzaW9uTWF0Y2gpIHtcbiAgICByZXN1bHQuYnJpZGdlID0ge1xuICAgICAgdmVyc2lvbjogc2VtdmVyLmNvZXJjZShicmlkZ2VWZXJzaW9uTWF0Y2hbMV0pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGVtdWxhdG9yIGlzIHJlYWR5IHRvIGFjY2VwdCBmdXJ0aGVyIGNvbW1hbmRzIChib290aW5nIGNvbXBsZXRlZCkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRNcyBbMjAwMDBdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBlbXVsYXRvciBpcyBub3QgcmVhZHkgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy53YWl0Rm9yRW11bGF0b3JSZWFkeSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JFbXVsYXRvclJlYWR5ICh0aW1lb3V0TXMgPSAyMDAwMCkge1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5zaGVsbChbJ2dldHByb3AnLCAnaW5pdC5zdmMuYm9vdGFuaW0nXSkpLmluY2x1ZGVzKCdzdG9wcGVkJykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgc2VydmljZSBtaWdodCBzdGlsbCBiZWluZyBpbml0aWFsaXplZFxuICAgICAgICAvLyBvbiBzbG93IHN5c3RlbXMgZXZlbiBhZnRlciBlbXVsYXRvciBib290aW5nIGlzIGNvbXBsZXRlZC5cbiAgICAgICAgLy8gVGhlIHVzdWFsIG91dHB1dCBvZiBgcG0gZ2V0LWluc3RhbGwtbG9jYXRpb25gIGNvbW1hbmQgbG9va3MgbGlrZSBgMFthdXRvXWBcbiAgICAgICAgcmV0dXJuIC9cXGQrXFxbXFx3K1xcXS8udGVzdChhd2FpdCB0aGlzLnNoZWxsKFsncG0nLCAnZ2V0LWluc3RhbGwtbG9jYXRpb24nXSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyBmb3IgZW11bGF0b3Igc3RhcnR1cC4gSW50ZXJtZWRpYXRlIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0TXMsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFbXVsYXRvciBpcyBub3QgcmVhZHkgd2l0aGluICR7dGltZW91dE1zfW1zYCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIHJlYWR5IHRvIGFjY2VwdCBmdXJ0aGVyIGNvbW1hbmRzIChib290aW5nIGNvbXBsZXRlZCkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFwcERldmljZVJlYWR5VGltZW91dCBbMzBdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZGV2aWNlIGlzIG5vdCByZWFkeSB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLndhaXRGb3JEZXZpY2UgPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRGV2aWNlIChhcHBEZXZpY2VSZWFkeVRpbWVvdXQgPSAzMCkge1xuICB0aGlzLmFwcERldmljZVJlYWR5VGltZW91dCA9IGFwcERldmljZVJlYWR5VGltZW91dDtcbiAgY29uc3QgcmV0cmllcyA9IDM7XG4gIGNvbnN0IHRpbWVvdXQgPSBwYXJzZUludCh0aGlzLmFwcERldmljZVJlYWR5VGltZW91dCwgMTApICogMTAwMCAvIHJldHJpZXM7XG4gIGF3YWl0IHJldHJ5KHJldHJpZXMsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGJFeGVjKCd3YWl0LWZvci1kZXZpY2UnLCB7dGltZW91dH0pO1xuICAgICAgYXdhaXQgdGhpcy5waW5nKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNvbm5lY3QoKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBZGIoKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3YWl0aW5nIGZvciB0aGUgZGV2aWNlIHRvIGJlIGF2YWlsYWJsZS4gT3JpZ2luYWwgZXJyb3I6ICcke2UubWVzc2FnZX0nYCk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVib290IHRoZSBjdXJyZW50IGRldmljZSBhbmQgd2FpdCB1bnRpbCBpdCBpcyBjb21wbGV0ZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJldHJpZXMgW0RFRkFVTFRfQURCX1JFQk9PVF9SRVRSSUVTXSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWJvb3QgcmV0cmllcy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZGV2aWNlIGZhaWxlZCB0byByZWJvb3QgYW5kIG51bWJlciBvZiByZXRyaWVzIGlzIGV4Y2VlZGVkLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5yZWJvb3QgPSBhc3luYyBmdW5jdGlvbiByZWJvb3QgKHJldHJpZXMgPSBERUZBVUxUX0FEQl9SRUJPT1RfUkVUUklFUykge1xuICAvLyBHZXQgcm9vdCBhY2Nlc3Mgc28gd2UgY2FuIHJ1biB0aGUgbmV4dCBzaGVsbCBjb21tYW5kcyB3aGljaCByZXF1aXJlIHJvb3QgYWNjZXNzXG4gIGNvbnN0IHsgd2FzQWxyZWFkeVJvb3RlZCB9ID0gYXdhaXQgdGhpcy5yb290KCk7XG4gIHRyeSB7XG4gICAgLy8gU3RvcCBhbmQgcmUtc3RhcnQgdGhlIGRldmljZVxuICAgIGF3YWl0IHRoaXMuc2hlbGwoWydzdG9wJ10pO1xuICAgIGF3YWl0IEIuZGVsYXkoMjAwMCk7IC8vIGxldCB0aGUgZW11IGZpbmlzaCBzdG9wcGluZztcbiAgICBhd2FpdCB0aGlzLnNldERldmljZVByb3BlcnR5KCdzeXMuYm9vdF9jb21wbGV0ZWQnLCAwLCB7XG4gICAgICBwcml2aWxlZ2VkOiBmYWxzZSAvLyBubyBuZWVkIHRvIHNldCBwcml2aWxlZ2VkIHRydWUgYmVjYXVzZSBkZXZpY2UgYWxyZWFkeSByb290ZWRcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3RhcnQnXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7bWVzc2FnZX0gPSBlO1xuXG4gICAgLy8gcHJvdmlkZSBhIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSBpZiB0aGUgcmVhc29uIHJlYm9vdCBmYWlsZWQgd2FzIGJlY2F1c2UgQURCIGNvdWxkbid0IGdhaW4gcm9vdCBhY2Nlc3NcbiAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnbXVzdCBiZSByb290JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlYm9vdCBkZXZpY2UuIFJlYm9vdGluZyByZXF1aXJlcyByb290IGFjY2VzcyBhbmQgYCArXG4gICAgICAgIGBhdHRlbXB0IHRvIGdldCByb290IGFjY2VzcyBvbiBkZXZpY2UgZmFpbGVkIHdpdGggZXJyb3I6ICcke21lc3NhZ2V9J2ApO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIFJldHVybiByb290IHN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZVxuICAgIGlmICghd2FzQWxyZWFkeVJvb3RlZCkge1xuICAgICAgYXdhaXQgdGhpcy51bnJvb3QoKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldERldmljZVByb3BlcnR5KCdzeXMuYm9vdF9jb21wbGV0ZWQnKSkgPT09ICcxJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB3ZSBkb24ndCB3YW50IHRoZSBzdGFjayB0cmFjZSwgc28gbm8gbG9nLmVycm9yQW5kVGhyb3dcbiAgICBjb25zdCBtc2cgPSBgUmVib290IGlzIG5vdCBjb21wbGV0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgO1xuICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gcm9vdFJlc3VsdFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1N1Y2Nlc3NmdWwgVHJ1ZSBpZiB0aGUgY2FsbCB0byByb290L3Vucm9vdCB3YXMgc3VjY2Vzc2Z1bFxuICogQHByb3BlcnR5IHtib29sZWFufSB3YXNBbHJlYWR5Um9vdGVkIFRydWUgaWYgdGhlIGRldmljZSB3YXMgYWxyZWFkeSByb290ZWRcbiAqL1xuXG4vKipcbiAqIFN3aXRjaCBhZGIgc2VydmVyIHJvb3QgcHJpdmlsZWdlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbGV2YXRlZCAtIFNob3VsZCB3ZSBlbGV2YXRlIHRvIHRvIHJvb3Qgb3IgdW5yb290PyAoZGVmYXVsdCB0cnVlKVxuICogQHJldHVybiB7cm9vdFJlc3VsdH1cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuY2hhbmdlVXNlclByaXZpbGVnZXMgPSBhc3luYyBmdW5jdGlvbiBjaGFuZ2VVc2VyUHJpdmlsZWdlcyAoaXNFbGV2YXRlZCkge1xuICBjb25zdCBjbWQgPSBpc0VsZXZhdGVkID8gJ3Jvb3QnIDogJ3Vucm9vdCc7XG5cbiAgY29uc3QgcmV0cnlJZk9mZmxpbmUgPSBhc3luYyAoY21kRnVuYykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY21kRnVuYygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gQ2hlY2sgdGhlIG91dHB1dCBvZiB0aGUgc3RkRXJyIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjbHVlcyB0aGF0IHNob3cgdGhhdCB0aGUgZGV2aWNlIHdlbnQgb2ZmbGluZVxuICAgICAgLy8gYW5kIGlmIGl0IGRpZCBnbyBvZmZsaW5lLCByZXN0YXJ0IEFEQlxuICAgICAgaWYgKFsnY2xvc2VkJywgJ2RldmljZSBvZmZsaW5lJywgJ3RpbWVvdXQgZXhwaXJlZCddXG4gICAgICAgICAgLnNvbWUoKHgpID0+IChlcnIuc3RkZXJyIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHgpKSkge1xuICAgICAgICBsb2cud2FybihgQXR0ZW1wdCB0byAke2NtZH0gY2F1c2VkIEFEQiB0byB0aGluayB0aGUgZGV2aWNlIHdlbnQgb2ZmbGluZWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVjb25uZWN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVzdGFydEFkYigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBjbWRGdW5jKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIElmIGl0J3MgYWxyZWFkeSByb290ZWQsIG91ciBqb2IgaXMgZG9uZS4gTm8gbmVlZCB0byByb290IGl0IGFnYWluLlxuICBjb25zdCBpc1Jvb3QgPSBhd2FpdCByZXRyeUlmT2ZmbGluZShhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlzUm9vdCgpKTtcbiAgaWYgKChpc1Jvb3QgJiYgaXNFbGV2YXRlZCkgfHwgKCFpc1Jvb3QgJiYgIWlzRWxldmF0ZWQpKSB7XG4gICAgcmV0dXJuIHtpc1N1Y2Nlc3NmdWw6IHRydWUsIHdhc0FscmVhZHlSb290ZWQ6IGlzUm9vdH07XG4gIH1cblxuICBsZXQgd2FzQWxyZWFkeVJvb3RlZCA9IGlzUm9vdDtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJldHJ5SWZPZmZsaW5lKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiRXhlYyhbY21kXSkpO1xuICAgIGxvZy5kZWJ1ZyhzdGRvdXQpO1xuXG4gICAgLy8gb24gcmVhbCBkZXZpY2VzIGluIHNvbWUgc2l0dWF0aW9ucyB3ZSBnZXQgYW4gZXJyb3IgaW4gdGhlIHN0ZG91dFxuICAgIGlmIChzdGRvdXQpIHtcbiAgICAgIGlmIChzdGRvdXQuaW5jbHVkZXMoJ2FkYmQgY2Fubm90IHJ1biBhcyByb290JykpIHtcbiAgICAgICAgcmV0dXJuIHtpc1N1Y2Nlc3NmdWw6IGZhbHNlLCB3YXNBbHJlYWR5Um9vdGVkfTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBkZXZpY2Ugd2FzIGFscmVhZHkgcm9vdGVkLCByZXR1cm4gdGhhdCBpbiB0aGUgcmVzdWx0XG4gICAgICBpZiAoc3Rkb3V0LmluY2x1ZGVzKCdhbHJlYWR5IHJ1bm5pbmcgYXMgcm9vdCcpKSB7XG4gICAgICAgIHdhc0FscmVhZHlSb290ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge2lzU3VjY2Vzc2Z1bDogdHJ1ZSwgd2FzQWxyZWFkeVJvb3RlZH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHtzdGRlcnIgPSAnJywgbWVzc2FnZX0gPSBlcnI7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byAke2NtZH0gYWRiIGRhZW1vbi4gT3JpZ2luYWwgZXJyb3I6ICcke21lc3NhZ2V9Jy4gU3RkZXJyOiAnJHtzdGRlcnJ9Jy4gQ29udGludWluZy5gKTtcbiAgICByZXR1cm4ge2lzU3VjY2Vzc2Z1bDogZmFsc2UsIHdhc0FscmVhZHlSb290ZWR9O1xuICB9XG59O1xuXG4vKipcbiAqIFN3aXRjaCBhZGIgc2VydmVyIHRvIHJvb3QgbW9kZVxuICogQHJldHVybiB7cm9vdFJlc3VsdH1cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMucm9vdCA9IGFzeW5jIGZ1bmN0aW9uIHJvb3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5jaGFuZ2VVc2VyUHJpdmlsZWdlcyh0cnVlKTtcbn07XG5cbi8qKlxuICogU3dpdGNoIGFkYiBzZXJ2ZXIgdG8gbm9uLXJvb3QgbW9kZS5cbiAqXG4gKiBAcmV0dXJuIHtyb290UmVzdWx0fVxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy51bnJvb3QgPSBhc3luYyBmdW5jdGlvbiB1bnJvb3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5jaGFuZ2VVc2VyUHJpdmlsZWdlcyhmYWxzZSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHVzZXIgaXMgcm9vdFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHVzZXIgaXMgcm9vdFxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBpZGVudGlmeWluZ1xuICogdGhlIHVzZXIuXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmlzUm9vdCA9IGFzeW5jIGZ1bmN0aW9uIGlzUm9vdCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5zaGVsbChbJ3dob2FtaSddKSkudHJpbSgpID09PSAncm9vdCc7XG59O1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIGEgcmVtb3RlIHBhdGggZXhpc3RzIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCAtIFRoZSByZW1vdGUgcGF0aCB0byB2ZXJpZnkuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBnaXZlbiBwYXRoIGV4aXN0cyBvbiB0aGUgZGV2aWNlLlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5maWxlRXhpc3RzID0gYXN5bmMgZnVuY3Rpb24gZmlsZUV4aXN0cyAocmVtb3RlUGF0aCkge1xuICBjb25zdCBwYXNzRmxhZyA9ICdfX1BBU1NfXyc7XG4gIGNvbnN0IGNoZWNrQ21kID0gYFsgLWUgJyR7cmVtb3RlUGF0aC5yZXBsYWNlKC8nL2csIGBcXFxcJ2ApfScgXSAmJiBlY2hvICR7cGFzc0ZsYWd9YDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gXy5pbmNsdWRlcyhhd2FpdCB0aGlzLnNoZWxsKFtjaGVja0NtZF0pLCBwYXNzRmxhZyk7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIG91dHB1dCBvZiBfbHNfIGNvbW1hbmQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHJlbW90ZSBwYXRoICh0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIF9sc18gY29tbWFuZCkuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBvcHRzIFtbXV0gLSBBZGRpdGlvbmFsIF9sc18gb3B0aW9ucy5cbiAqIEByZXR1cm4ge0FycmF5LjxTdHJpbmc+fSBUaGUgX2xzXyBvdXRwdXQgYXMgYW4gYXJyYXkgb2Ygc3BsaXQgbGluZXMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWQgb2YgdGhlIGdpdmVuIF9yZW1vdGVQYXRoX1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGV4aXN0LlxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5scyA9IGFzeW5jIGZ1bmN0aW9uIGxzIChyZW1vdGVQYXRoLCBvcHRzID0gW10pIHtcbiAgdHJ5IHtcbiAgICBsZXQgYXJncyA9IFsnbHMnLCAuLi5vcHRzLCByZW1vdGVQYXRoXTtcbiAgICBsZXQgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgICBsZXQgbGluZXMgPSBzdGRvdXQuc3BsaXQoJ1xcbicpO1xuICAgIHJldHVybiBsaW5lcy5tYXAoKGwpID0+IGwudHJpbSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmZpbHRlcigobCkgPT4gbC5pbmRleE9mKCdObyBzdWNoIGZpbGUnKSA9PT0gLTEpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZignTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpID09PSAtMSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBzaXplIG9mIHRoZSBwYXJ0aWN1bGFyIGZpbGUgbG9jYXRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggLSBUaGUgcmVtb3RlIHBhdGggdG8gdGhlIGZpbGUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gZmlsZS5cbiAqL1xuc3lzdGVtQ2FsbE1ldGhvZHMuZmlsZVNpemUgPSBhc3luYyBmdW5jdGlvbiBmaWxlU2l6ZSAocmVtb3RlUGF0aCkge1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5scyhyZW1vdGVQYXRoLCBbJy1sYSddKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlbW90ZSBwYXRoIGlzIG5vdCBhIGZpbGVgKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci9mT3M0UDQvOFxuICAgIGNvbnN0IG1hdGNoID0gL1tyd3hzU3RUXFwtK117MTB9W1xcc1xcZF0qXFxzW15cXHNdK1xccytbXlxcc10rXFxzKyhcXGQrKS8uZXhlYyhmaWxlc1swXSk7XG4gICAgaWYgKCFtYXRjaCB8fCBfLmlzTmFOKHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBzaXplIGZyb20gbGlzdCBvdXRwdXQ6ICcke2ZpbGVzWzBdfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBmaWxlIHNpemUgZm9yICcke3JlbW90ZVBhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgb24gYSByb290ZWQgcmVhbCBkZXZpY2Ugb3JcbiAqIGFuIGVtdWxhdG9yLiBUaGUgZW11bGF0b3IgbXVzdCBiZSBleGVjdXRlZCB3aXRoIGAtd3JpdGFibGUtc3lzdGVtYFxuICogY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgYWRiIGRhZW1vbiBzaG91bGQgYmUgcnVubmluZyBpbiByb290XG4gKiBtb2RlIGZvciB0aGlzIG1ldGhvZCB0byB3b3JrIHByb3Blcmx5LiBUaGUgbWV0aG9kIGFsc28gcmVxdWlyZXNcbiAqIG9wZW5zc2wgdG9vbCB0byBiZSBhdmFpbGFibGUgb24gdGhlIGRlc3RpbmF0aW9uIHN5c3RlbS5cbiAqIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzEwOTY0XG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgdG9waWNcbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGNlcnQgLSBiYXNlNjQtZGVjb2RlZCBjb250ZW50IG9mIHRoZSBhY3R1YWwgY2VydGlmaWNhdGVcbiAqIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9yIGEgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlbnNzbCB0b29sIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGRlc3RpbmF0aW9uIHN5c3RlbVxuICogb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGluc3RhbGxpbmcgdGhlIGNlcnRpZmljYXRlXG4gKi9cbnN5c3RlbUNhbGxNZXRob2RzLmluc3RhbGxNaXRtQ2VydGlmaWNhdGUgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsTWl0bUNlcnRpZmljYXRlIChjZXJ0KSB7XG4gIGNvbnN0IG9wZW5Tc2wgPSBhd2FpdCBnZXRPcGVuU3NsRm9yT3MoKTtcblxuICBpZiAoIV8uaXNCdWZmZXIoY2VydCkpIHtcbiAgICBjZXJ0ID0gQnVmZmVyLmZyb20oY2VydCwgJ2Jhc2U2NCcpO1xuICB9XG5cbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICB0cnkge1xuICAgIGNvbnN0IHNyY0NlcnQgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ3NvdXJjZS5jZXInKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoc3JjQ2VydCwgY2VydCk7XG4gICAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhvcGVuU3NsLCBbJ3g1MDknLCAnLW5vb3V0JywgJy1oYXNoJywgJy1pbicsIHNyY0NlcnRdKTtcbiAgICBjb25zdCBjZXJ0SGFzaCA9IHN0ZG91dC50cmltKCk7XG4gICAgbG9nLmRlYnVnKGBHb3QgY2VydGlmaWNhdGUgaGFzaDogJHtjZXJ0SGFzaH1gKTtcbiAgICBsb2cuZGVidWcoJ1ByZXBhcmluZyBjZXJ0aWZpY2F0ZSBjb250ZW50Jyk7XG4gICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhvcGVuU3NsLCBbJ3g1MDknLCAnLWluJywgc3JjQ2VydF0sIHtpc0J1ZmZlcjogdHJ1ZX0pKTtcbiAgICBsZXQgZHN0Q2VydENvbnRlbnQgPSBzdGRvdXQ7XG4gICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhvcGVuU3NsLCBbJ3g1MDknLFxuICAgICAgJy1pbicsIHNyY0NlcnQsXG4gICAgICAnLXRleHQnLFxuICAgICAgJy1maW5nZXJwcmludCcsXG4gICAgICAnLW5vb3V0J10sIHtpc0J1ZmZlcjogdHJ1ZX0pKTtcbiAgICBkc3RDZXJ0Q29udGVudCA9IEJ1ZmZlci5jb25jYXQoW2RzdENlcnRDb250ZW50LCBzdGRvdXRdKTtcbiAgICBjb25zdCBkc3RDZXJ0ID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIGAke2NlcnRIYXNofS4wYCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGRzdENlcnQsIGRzdENlcnRDb250ZW50KTtcbiAgICBsb2cuZGVidWcoJ1JlbW91bnRpbmcgL3N5c3RlbSBpbiBydyBtb2RlJyk7XG4gICAgLy8gU29tZXRpbWVzIGVtdWxhdG9yIHJlYm9vdCBpcyBzdGlsbCBub3QgZnVsbHkgZmluaXNoZWQgb24gdGhpcyBzdGFnZSwgc28gcmV0cnlcbiAgICBhd2FpdCByZXRyeUludGVydmFsKDUsIDIwMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiRXhlYyhbJ3JlbW91bnQnXSkpO1xuICAgIGxvZy5kZWJ1ZyhgVXBsb2FkaW5nIHRoZSBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgZnJvbSAnJHtkc3RDZXJ0fScgdG8gJyR7Q0VSVFNfUk9PVH0nYCk7XG4gICAgYXdhaXQgdGhpcy5wdXNoKGRzdENlcnQsIENFUlRTX1JPT1QpO1xuICAgIGxvZy5kZWJ1ZygnUmVtb3VudGluZyAvc3lzdGVtIHRvIGNvbmZpcm0gY2hhbmdlcycpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ3JlbW91bnQnXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluamVjdCB0aGUgY3VzdG9tIGNlcnRpZmljYXRlLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYElzIHRoZSBjZXJ0aWZpY2F0ZSBwcm9wZXJseSBlbmNvZGVkIGludG8gYmFzZTY0LXN0cmluZz8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBEbyB5b3UgaGF2ZSByb290IHBlcm1pc3Npb25zIG9uIHRoZSBkZXZpY2U/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG4vKipcbiAqIFZlcmlmaWVzIGlmIHRoZSBnaXZlbiByb290IGNlcnRpZmljYXRlIGlzIGFscmVhZHkgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBjZXJ0IC0gYmFzZTY0LWRlY29kZWQgY29udGVudCBvZiB0aGUgYWN0dWFsIGNlcnRpZmljYXRlXG4gKiByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvciBhIGJ1ZmZlclxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZW5zc2wgdG9vbCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBkZXN0aW5hdGlvbiBzeXN0ZW1cbiAqIG9yIGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBjaGVja2luZyB0aGUgY2VydGlmaWNhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBpcyBhbHJlYWR5IGluc3RhbGxlZFxuICovXG5zeXN0ZW1DYWxsTWV0aG9kcy5pc01pdG1DZXJ0aWZpY2F0ZUluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzTWl0bUNlcnRpZmljYXRlSW5zdGFsbGVkIChjZXJ0KSB7XG4gIGNvbnN0IG9wZW5Tc2wgPSBhd2FpdCBnZXRPcGVuU3NsRm9yT3MoKTtcblxuICBpZiAoIV8uaXNCdWZmZXIoY2VydCkpIHtcbiAgICBjZXJ0ID0gQnVmZmVyLmZyb20oY2VydCwgJ2Jhc2U2NCcpO1xuICB9XG5cbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBsZXQgY2VydEhhc2g7XG4gIHRyeSB7XG4gICAgY29uc3QgdG1wQ2VydCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnc291cmNlLmNlcicpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0bXBDZXJ0LCBjZXJ0KTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMob3BlblNzbCwgWyd4NTA5JywgJy1ub291dCcsICctaGFzaCcsICctaW4nLCB0bXBDZXJ0XSk7XG4gICAgY2VydEhhc2ggPSBzdGRvdXQudHJpbSgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgaGFzaC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgY2VydGlmaWNhdGUgcHJvcGVybHkgZW5jb2RlZCBpbnRvIGJhc2U2NC1zdHJpbmc/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLnBvc2l4LnJlc29sdmUoQ0VSVFNfUk9PVCwgYCR7Y2VydEhhc2h9LjBgKTtcbiAgbG9nLmRlYnVnKGBDaGVja2luZyBpZiB0aGUgY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQgYXQgJyR7ZHN0UGF0aH0nYCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmZpbGVFeGlzdHMoZHN0UGF0aCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzeXN0ZW1DYWxsTWV0aG9kcztcbmV4cG9ydCB7IERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgZ2V0QW5kcm9pZEJpbmFyeVBhdGggfTtcbiJdLCJt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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-adb",
|
|
3
|
-
"version": "9.2.
|
|
3
|
+
"version": "9.2.2",
|
|
4
4
|
"description": "Android Debug Bridge interface",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"chai": "^4.1.0",
|
|
72
72
|
"chai-as-promised": "^7.1.1",
|
|
73
73
|
"gulp": "^4.0.0",
|
|
74
|
-
"mocha": "^
|
|
74
|
+
"mocha": "^10.0.0",
|
|
75
75
|
"mocha-junit-reporter": "^2.0.0",
|
|
76
76
|
"mocha-multi-reporters": "^1.1.7",
|
|
77
77
|
"pre-commit": "^1.1.3",
|