appium-adb 9.2.3 → 9.4.0

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.
@@ -216,4 +216,4 @@ var _default = apksUtilsMethods;
216
216
  exports.default = _default;require('source-map-support').install();
217
217
 
218
218
 
219
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiLCJuYW1lcyI6WyJCQVNFX0FQSyIsIkxBTkdVQUdFX0FQSyIsImxhbmciLCJBUEtTX0NBQ0hFIiwiTFJVIiwibWF4IiwiZGlzcG9zZSIsImFwa3NIYXNoIiwiZXh0cmFjdGVkRmlsZXNSb290IiwiZnMiLCJyaW1yYWYiLCJBUEtTX0NBQ0hFX0dVQVJEIiwiQXN5bmNMb2NrIiwiQlVORExFVE9PTF9USU1FT1VUX01TIiwiYXBrc1V0aWxzTWV0aG9kcyIsInByb2Nlc3MiLCJvbiIsInNpemUiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiZXhlY0J1bmRsZXRvb2wiLCJhcmdzIiwiZXJyb3JNc2ciLCJpbml0QnVuZGxldG9vbCIsImJpbmFyaWVzIiwiYnVuZGxldG9vbCIsImVudiIsImFkYlBvcnQiLCJBTkRST0lEX0FEQl9TRVJWRVJfUE9SVCIsImFkYkhvc3QiLCJBTkRST0lEX0FEQl9TRVJWRVJfSE9TVCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGRvdXQiLCJ0aW1lb3V0IiwidHJ1bmNhdGUiLCJzdGRlcnIiLCJnZXREZXZpY2VTcGVjIiwic3BlY0xvY2F0aW9uIiwiZXhlY3V0YWJsZSIsImN1ckRldmljZUlkIiwiaW5zdGFsbE11bHRpcGxlQXBrcyIsImFwa1BhdGhzVG9JbnN0YWxsIiwib3B0aW9ucyIsImluc3RhbGxBcmdzIiwiZ2V0QXBpTGV2ZWwiLCJhZGJFeGVjIiwidGltZW91dENhcE5hbWUiLCJpbnN0YWxsQXBrcyIsImdyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsIkFQS1NfSU5TVEFMTF9USU1FT1VUIiwicHVzaCIsInRhc2tzIiwiYmFzZW5hbWUiLCJnZXRBcGtJbmZvIiwiYXBrSW5mbyIsIkIiLCJhbGwiLCJncmFudEFsbFBlcm1pc3Npb25zIiwibmFtZSIsImV4dHJhY3RCYXNlQXBrIiwiZXh0cmFjdExhbmd1YWdlQXBrIiwibGFuZ3VhZ2UiLCJpbmZvIiwiZGVmYXVsdExhbmd1YWdlcyIsImlnbiIsImlzVGVzdFBhY2thZ2VPbmx5RXJyb3IiLCJvdXRwdXQiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQge1xuICBnZXRKYXZhRm9yT3MsIHVuemlwRmlsZSwgYnVpbGRJbnN0YWxsQXJncywgQVBLU19JTlNUQUxMX1RJTUVPVVRcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBCQVNFX0FQSyA9ICdiYXNlLW1hc3Rlci5hcGsnO1xuY29uc3QgTEFOR1VBR0VfQVBLID0gKGxhbmcpID0+IGBiYXNlLSR7bGFuZ30uYXBrYDtcbmNvbnN0IEFQS1NfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMCxcbiAgZGlzcG9zZTogKGFwa3NIYXNoLCBleHRyYWN0ZWRGaWxlc1Jvb3QpID0+IGZzLnJpbXJhZihleHRyYWN0ZWRGaWxlc1Jvb3QpLFxufSk7XG5jb25zdCBBUEtTX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgQlVORExFVE9PTF9USU1FT1VUX01TID0gNCAqIDYwICogMTAwMDtcblxuY29uc3QgYXBrc1V0aWxzTWV0aG9kcyA9IHt9O1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoIUFQS1NfQ0FDSEUuc2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gWy4uLkFQS1NfQ0FDSEUudmFsdWVzKCldO1xuICBsb2cuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke3BhdGhzLmxlbmd0aH0gY2FjaGVkIC5hcGtzIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdwYWNrYWdlJywgcGF0aHMubGVuZ3RoKSk7XG4gIGZvciAoY29uc3QgYXBwUGF0aCBvZiBwYXRocykge1xuICAgIHRyeSB7XG4gICAgICAvLyBBc3luY2hyb25vdXMgY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gb25FeGl0IGhhbmRsZXJcbiAgICAgIGZzLnJpbXJhZlN5bmMoYXBwUGF0aCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBwYXJ0aWN1bGFyIGFwa3MgcGFja2FnZSBpbnRvIGEgdGVtcG9yYXJ5IGZvbGRlcixcbiAqIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmVkIGluIHRoaXMgYXBrLlxuICogVGhlIHJlc3VsdGluZyB0ZW1wb3JhcnkgcGF0aCwgd2hlcmUgdGhlIC5hcGtzIGZpbGUgaGFzIGJlZW4gZXh0cmFjdGVkLFxuICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgaW50ZXJuYWwgTFJVIGNhY2hlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxTdHJpbmc+fSBkc3RQYXRoIC0gVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBleHRyYWN0ZWQsIHdoZXJlIGVhY2ggcGF0aCBjb21wb25lbnQgaXMgYW4gYXJyYXkgaXRlbVxuICogQHJldHVybnMge3N0cmluZ30gRnVsbCBwYXRoIHRvIHRoZSBleHRyYWN0ZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSByZXF1ZXN0ZWQgaXRlbSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZXh0cmFjdGVkIGFyY2hpdmUgb3IgdGhlIHByb3ZpZGVzXG4gKiBhcGtzIGZpbGUgaXMgbm90IGEgdmFsaWQgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RGcm9tQXBrcyAoYXBrcywgZHN0UGF0aCkge1xuICBpZiAoIV8uaXNBcnJheShkc3RQYXRoKSkge1xuICAgIGRzdFBhdGggPSBbZHN0UGF0aF07XG4gIH1cblxuICByZXR1cm4gYXdhaXQgQVBLU19DQUNIRV9HVUFSRC5hY3F1aXJlKGFwa3MsIGFzeW5jICgpID0+IHtcbiAgICAvLyBJdCBtaWdodCBiZSB0aGF0IHRoZSBvcmlnaW5hbCBmaWxlIGhhcyBiZWVuIHJlcGxhY2VkLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgaGFzaCBzdW1zIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBmaWxlIHBhdGhzXG4gICAgLy8gYXMgY2FjaGluZyBrZXlzXG4gICAgY29uc3QgYXBrc0hhc2ggPSBhd2FpdCBmcy5oYXNoKGFwa3MpO1xuICAgIGxvZy5kZWJ1ZyhgQ2FsY3VsYXRlZCAnJHthcGtzfScgaGFzaDogJHthcGtzSGFzaH1gKTtcblxuICAgIGlmIChBUEtTX0NBQ0hFLmhhcyhhcGtzSGFzaCkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoQVBLU19DQUNIRS5nZXQoYXBrc0hhc2gpLCAuLi5kc3RQYXRoKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgICB9XG4gICAgICBBUEtTX0NBQ0hFLmRlbChhcGtzSGFzaCk7XG4gICAgfVxuXG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIGxvZy5kZWJ1ZyhgVW5wYWNraW5nIGFwcGxpY2F0aW9uIGJ1bmRsZSBhdCAnJHthcGtzfScgdG8gJyR7dG1wUm9vdH0nYCk7XG4gICAgYXdhaXQgdW56aXBGaWxlKGFwa3MsIHRtcFJvb3QpO1xuICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgLi4uZHN0UGF0aCk7XG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtkc3RQYXRoLmpvaW4ocGF0aC5zZXApfSBjYW5ub3QgYmUgZm91bmQgaW4gJyR7YXBrc30nIGJ1bmRsZS4gYCArXG4gICAgICAgIGBEb2VzIHRoZSBhcmNoaXZlIGNvbnRhaW4gYSB2YWxpZCBhcHBsaWNhdGlvbiBidW5kbGU/YCk7XG4gICAgfVxuICAgIEFQS1NfQ0FDSEUuc2V0KGFwa3NIYXNoLCB0bXBSb290KTtcbiAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYnVuZGxldG9vbCB1dGlsaXR5IHdpdGggZ2l2ZW4gYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBhY3R1YWwgc3Rkb3V0XG4gKlxuICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBhcmdzIC0gdGhlIGxpc3Qgb2YgYnVuZGxldG9vbCBhcmd1bWVudHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1zZyAtIFRoZSBjdXN0b21pemVkIGVycm9yIG1lc3NhZ2Ugc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgYWN0dWFsIGNvbW1hbmQgc3Rkb3V0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnVuZGxldG9vbCBqYXIgZG9lcyBub3QgZXhpc3QgaW4gUEFUSCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGV4ZWN1dGluZyBpdFxuICovXG5hcGtzVXRpbHNNZXRob2RzLmV4ZWNCdW5kbGV0b29sID0gYXN5bmMgZnVuY3Rpb24gZXhlY0J1bmRsZXRvb2wgKGFyZ3MsIGVycm9yTXNnKSB7XG4gIGF3YWl0IHRoaXMuaW5pdEJ1bmRsZXRvb2woKTtcbiAgYXJncyA9IFtcbiAgICAnLWphcicsIHRoaXMuYmluYXJpZXMuYnVuZGxldG9vbCxcbiAgICAuLi5hcmdzXG4gIF07XG4gIGNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuICBpZiAodGhpcy5hZGJQb3J0KSB7XG4gICAgZW52LkFORFJPSURfQURCX1NFUlZFUl9QT1JUID0gYCR7dGhpcy5hZGJQb3J0fWA7XG4gIH1cbiAgaWYgKHRoaXMuYWRiSG9zdCkge1xuICAgIGVudi5BTkRST0lEX0FEQl9TRVJWRVJfSE9TVCA9IHRoaXMuYWRiSG9zdDtcbiAgfVxuICBsb2cuZGVidWcoYEV4ZWN1dGluZyBidW5kbGV0b29sIHdpdGggYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoYXdhaXQgZ2V0SmF2YUZvck9zKCksIGFyZ3MsIHtcbiAgICAgIGVudixcbiAgICAgIHRpbWVvdXQ6IEJVTkRMRVRPT0xfVElNRU9VVF9NUyxcbiAgICB9KSk7XG4gICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtfLnRydW5jYXRlKHN0ZG91dCwge2xlbmd0aDogMzAwfSl9YCk7XG4gICAgcmV0dXJuIHN0ZG91dDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLnN0ZG91dCkge1xuICAgICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtlLnN0ZG91dH1gKTtcbiAgICB9XG4gICAgaWYgKGUuc3RkZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3RkZXJyOiAke2Uuc3RkZXJyfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JNc2d9LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWNMb2NhdGlvbiAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGdlbmVyYXRlZCBkZXZpY2Ugc3BlYyBsb2NhdGlvblxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHNhbWUgYHNwZWNMb2NhdGlvbmAgdmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlldmUgdGhlIHNwZWMgZm9yIHRoZSBjdXJyZW50IGRldmljZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmdldERldmljZVNwZWMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VTcGVjIChzcGVjTG9jYXRpb24pIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnZ2V0LWRldmljZS1zcGVjJyxcbiAgICAnLS1hZGInLCB0aGlzLmV4ZWN1dGFibGUucGF0aCxcbiAgICAnLS1kZXZpY2UtaWQnLCB0aGlzLmN1ckRldmljZUlkLFxuICAgICctLW91dHB1dCcsIHNwZWNMb2NhdGlvbixcbiAgXTtcbiAgbG9nLmRlYnVnKGBHZXR0aW5nIHRoZSBzcGVjIGZvciB0aGUgZGV2aWNlICcke3RoaXMuY3VyRGV2aWNlSWR9J2ApO1xuICBhd2FpdCB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsICdDYW5ub3QgcmV0cmlldmUgdGhlIGRldmljZSBzcGVjJyk7XG4gIHJldHVybiBzcGVjTG9jYXRpb247XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsXG4gKiB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthbmRyb2lkSW5zdGFsbFRpbWVvdXRdIC0gVGhlIHRpbWVvdXQgb3B0aW9uIG5hbWVcbiAqIHVzZXJzIGNhbiBpbmNyZWFzZSB0aGUgdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3QgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uXG4gKiBpcyBjb21wbGV0ZWQgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwa3MgaW50byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFwa1BhdGhzVG9JbnN0YWxsIC0gVGhlIGZ1bGwgcGF0aHMgdG8gaW5zdGFsbCBhcGtzXG4gKiBAcGFyYW0gez9pbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc30gb3B0aW9ucyAtIEluc3RhbGxhdGlvbiBvcHRpb25zXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuaW5zdGFsbE11bHRpcGxlQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxNdWx0aXBsZUFwa3MgKGFwa1BhdGhzVG9JbnN0YWxsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgaW5zdGFsbEFyZ3MgPSBidWlsZEluc3RhbGxBcmdzKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSwgb3B0aW9ucyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYkV4ZWMoWydpbnN0YWxsLW11bHRpcGxlJywgLi4uaW5zdGFsbEFyZ3MsIC4uLmFwa1BhdGhzVG9JbnN0YWxsXSwge1xuICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCxcbiAgICB0aW1lb3V0Q2FwTmFtZTogb3B0aW9ucy50aW1lb3V0Q2FwTmFtZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxBcGtzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gdGltZW91dCBbMTIwMDAwXSAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWxcbiAqIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FuZHJvaWRJbnN0YWxsVGltZW91dF0gLSBUaGUgdGltZW91dCBvcHRpb24gbmFtZVxuICogdXNlcnMgY2FuIGluY3JlYXNlIHRoZSB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3QgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uXG4gKiBpcyBjb21wbGV0ZWQgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiAuYXBrcyBwYWNrYWdlIGludG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0gez9JbnN0YWxsQXBrc09wdGlvbnN9IG9wdGlvbnMgLSBJbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSAuYXBrcyBidW5kbGUgY2Fubm90IGJlIGluc3RhbGxlZFxuICovXG5hcGtzVXRpbHNNZXRob2RzLmluc3RhbGxBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwa3MgKGFwa3MsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICB0aW1lb3V0LFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBhcmdzID0gW1xuICAgICdpbnN0YWxsLWFwa3MnLFxuICAgICctLWFkYicsIHRoaXMuZXhlY3V0YWJsZS5wYXRoLFxuICAgICctLWFwa3MnLCBhcGtzLFxuICAgICctLXRpbWVvdXQtbWlsbGlzJywgdGltZW91dCB8fCBBUEtTX0lOU1RBTExfVElNRU9VVCxcbiAgICAnLS1kZXZpY2UtaWQnLCB0aGlzLmN1ckRldmljZUlkLFxuICBdO1xuICBpZiAoYWxsb3dUZXN0UGFja2FnZXMpIHtcbiAgICBhcmdzLnB1c2goJy0tYWxsb3ctdGVzdC1vbmx5Jyk7XG4gIH1cbiAgY29uc3QgdGFza3MgPSBbXG4gICAgdGhpcy5leGVjQnVuZGxldG9vbChhcmdzLCBgQ2Fubm90IGluc3RhbGwgJyR7cGF0aC5iYXNlbmFtZShhcGtzKX0nIHRvIHRoZSBkZXZpY2UgJHt0aGlzLmN1ckRldmljZUlkfWApXG4gIF07XG4gIGlmIChncmFudFBlcm1pc3Npb25zKSB7XG4gICAgdGFza3MucHVzaCh0aGlzLmdldEFwa0luZm8oYXBrcykpO1xuICB9XG4gIGNvbnN0IFssIGFwa0luZm9dID0gYXdhaXQgQi5hbGwodGFza3MpO1xuICBpZiAoZ3JhbnRQZXJtaXNzaW9ucyAmJiBhcGtJbmZvKSB7XG4gICAgLy8gVE9ETzogU2ltcGxpZnkgaXQgYWZ0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9idW5kbGV0b29sL2lzc3Vlcy8yNDYgaXMgaW1wbGVtZW50ZWRcbiAgICBhd2FpdCB0aGlzLmdyYW50QWxsUGVybWlzc2lvbnMoYXBrSW5mby5uYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBtYXN0ZXIgLmFwayBmaWxlIGluc2lkZSB0aGUgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgbWFzdGVyIGJ1bmRsZSAuYXBrXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGV4dHJhY3RpbmcvZmluZGluZyB0aGUgZmlsZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmV4dHJhY3RCYXNlQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEJhc2VBcGsgKGFwa3MpIHtcbiAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIEJBU0VfQVBLXSk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGssIHdoaWNoIGNvbnRhaW5zIHRoZSBjb3JyZXNwb25kaW5nXG4gKiByZXNvdXJjZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpbiB0aGUgLmFwa3MgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIFRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uIFRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzXG4gKiBnb2luZyB0byBiZSBzZWxlY3RlZCBpZiBpdCBpcyBub3Qgc2V0LlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBsYW5ndWFnZSAuYXBrIG9yIHRoZSBtYXN0ZXIgLmFwa1xuICogaWYgbGFuZ3VhZ2Ugc3BsaXQgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSBidW5kbGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGV4dHJhY3RpbmcvZmluZGluZyB0aGUgZmlsZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmV4dHJhY3RMYW5ndWFnZUFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RMYW5ndWFnZUFwayAoYXBrcywgbGFuZ3VhZ2UgPSBudWxsKSB7XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgTEFOR1VBR0VfQVBLKGxhbmd1YWdlKV0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlLm1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEFzc3VtaW5nIHRoYXQgc3BsaXR0aW5nIGJ5IGxhbmd1YWdlIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgJyR7YXBrc30nIGJ1bmRsZSBgICtcbiAgICAgICAgYGFuZCByZXR1cm5pbmcgdGhlIG1haW4gYXBrIGluc3RlYWRgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwa3MpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRMYW5ndWFnZXMgPSBbJ2VuJywgJ2VuX3VzJ107XG4gIGZvciAoY29uc3QgbGFuZyBvZiBkZWZhdWx0TGFuZ3VhZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBMQU5HVUFHRV9BUEsobGFuZyldKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBsb2cuaW5mbyhgQ2Fubm90IGZpbmQgYW55IHNwbGl0IGFwayBmb3IgdGhlIGRlZmF1bHQgbGFuZ3VhZ2VzICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdExhbmd1YWdlcyl9LiBgICtcbiAgICBgUmV0dXJuaW5nIHRoZSBtYWluIGFwayBpbnN0ZWFkLmApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcGtzKTtcbn07XG5cbmFwa3NVdGlsc01ldGhvZHMuaXNUZXN0UGFja2FnZU9ubHlFcnJvciA9IGZ1bmN0aW9uIGlzVGVzdFBhY2thZ2VPbmx5RXJyb3IgKG91dHB1dCkge1xuICByZXR1cm4gL1xcW0lOU1RBTExfRkFJTEVEX1RFU1RfT05MWVxcXS8udGVzdChvdXRwdXQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBrc1V0aWxzTWV0aG9kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7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
219
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiLCJuYW1lcyI6WyJCQVNFX0FQSyIsIkxBTkdVQUdFX0FQSyIsImxhbmciLCJBUEtTX0NBQ0hFIiwiTFJVIiwibWF4IiwiZGlzcG9zZSIsImFwa3NIYXNoIiwiZXh0cmFjdGVkRmlsZXNSb290IiwiZnMiLCJyaW1yYWYiLCJBUEtTX0NBQ0hFX0dVQVJEIiwiQXN5bmNMb2NrIiwiQlVORExFVE9PTF9USU1FT1VUX01TIiwiYXBrc1V0aWxzTWV0aG9kcyIsInByb2Nlc3MiLCJvbiIsInNpemUiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwidW56aXBGaWxlIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiZXhlY0J1bmRsZXRvb2wiLCJhcmdzIiwiZXJyb3JNc2ciLCJpbml0QnVuZGxldG9vbCIsImJpbmFyaWVzIiwiYnVuZGxldG9vbCIsImVudiIsImFkYlBvcnQiLCJBTkRST0lEX0FEQl9TRVJWRVJfUE9SVCIsImFkYkhvc3QiLCJBTkRST0lEX0FEQl9TRVJWRVJfSE9TVCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGRvdXQiLCJleGVjIiwiZ2V0SmF2YUZvck9zIiwidGltZW91dCIsInRydW5jYXRlIiwic3RkZXJyIiwiZ2V0RGV2aWNlU3BlYyIsInNwZWNMb2NhdGlvbiIsImV4ZWN1dGFibGUiLCJjdXJEZXZpY2VJZCIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJhcGtQYXRoc1RvSW5zdGFsbCIsIm9wdGlvbnMiLCJpbnN0YWxsQXJncyIsImJ1aWxkSW5zdGFsbEFyZ3MiLCJnZXRBcGlMZXZlbCIsImFkYkV4ZWMiLCJ0aW1lb3V0Q2FwTmFtZSIsImluc3RhbGxBcGtzIiwiZ3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJwdXNoIiwidGFza3MiLCJiYXNlbmFtZSIsImdldEFwa0luZm8iLCJhcGtJbmZvIiwiQiIsImFsbCIsImdyYW50QWxsUGVybWlzc2lvbnMiLCJuYW1lIiwiZXh0cmFjdEJhc2VBcGsiLCJleHRyYWN0TGFuZ3VhZ2VBcGsiLCJsYW5ndWFnZSIsImluZm8iLCJkZWZhdWx0TGFuZ3VhZ2VzIiwiaWduIiwiaXNUZXN0UGFja2FnZU9ubHlFcnJvciIsIm91dHB1dCIsInRlc3QiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvdG9vbHMvYXBrcy11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGdldEphdmFGb3JPcywgdW56aXBGaWxlLCBidWlsZEluc3RhbGxBcmdzLCBBUEtTX0lOU1RBTExfVElNRU9VVFxufSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEJBU0VfQVBLID0gJ2Jhc2UtbWFzdGVyLmFwayc7XG5jb25zdCBMQU5HVUFHRV9BUEsgPSAobGFuZykgPT4gYGJhc2UtJHtsYW5nfS5hcGtgO1xuY29uc3QgQVBLU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwLFxuICBkaXNwb3NlOiAoYXBrc0hhc2gsIGV4dHJhY3RlZEZpbGVzUm9vdCkgPT4gZnMucmltcmFmKGV4dHJhY3RlZEZpbGVzUm9vdCksXG59KTtcbmNvbnN0IEFQS1NfQ0FDSEVfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBCVU5ETEVUT09MX1RJTUVPVVRfTVMgPSA0ICogNjAgKiAxMDAwO1xuXG5jb25zdCBhcGtzVXRpbHNNZXRob2RzID0ge307XG5cbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gIGlmICghQVBLU19DQUNIRS5zaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGF0aHMgPSBbLi4uQVBLU19DQUNIRS52YWx1ZXMoKV07XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBjbGVhbnVwIG9mICR7cGF0aHMubGVuZ3RofSBjYWNoZWQgLmFwa3MgYCArXG4gICAgdXRpbC5wbHVyYWxpemUoJ3BhY2thZ2UnLCBwYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRpY3VsYXIgYXBrcyBwYWNrYWdlIGludG8gYSB0ZW1wb3JhcnkgZm9sZGVyLFxuICogZmluZHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gdGhpcyBhcGsuXG4gKiBUaGUgcmVzdWx0aW5nIHRlbXBvcmFyeSBwYXRoLCB3aGVyZSB0aGUgLmFwa3MgZmlsZSBoYXMgYmVlbiBleHRyYWN0ZWQsXG4gKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBpbnRlcm5hbCBMUlUgY2FjaGUgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PFN0cmluZz59IGRzdFBhdGggLSBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZmlsZSxcbiAqIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGV4dHJhY3RlZCwgd2hlcmUgZWFjaCBwYXRoIGNvbXBvbmVudCBpcyBhbiBhcnJheSBpdGVtXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGV4dHJhY3RlZCBmaWxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHJlcXVlc3RlZCBpdGVtIGRvZXMgbm90IGV4aXN0IGluIHRoZSBleHRyYWN0ZWQgYXJjaGl2ZSBvciB0aGUgcHJvdmlkZXNcbiAqIGFwa3MgZmlsZSBpcyBub3QgYSB2YWxpZCBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEZyb21BcGtzIChhcGtzLCBkc3RQYXRoKSB7XG4gIGlmICghXy5pc0FycmF5KGRzdFBhdGgpKSB7XG4gICAgZHN0UGF0aCA9IFtkc3RQYXRoXTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBBUEtTX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBrcywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgaGFzIGJlZW4gcmVwbGFjZWQsXG4gICAgLy8gc28gd2UgbmVlZCB0byBrZWVwIHRoZSBoYXNoIHN1bXMgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgcGF0aHNcbiAgICAvLyBhcyBjYWNoaW5nIGtleXNcbiAgICBjb25zdCBhcGtzSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBrcyk7XG4gICAgbG9nLmRlYnVnKGBDYWxjdWxhdGVkICcke2Fwa3N9JyBoYXNoOiAke2Fwa3NIYXNofWApO1xuXG4gICAgaWYgKEFQS1NfQ0FDSEUuaGFzKGFwa3NIYXNoKSkge1xuICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShBUEtTX0NBQ0hFLmdldChhcGtzSGFzaCksIC4uLmRzdFBhdGgpO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICAgIH1cbiAgICAgIEFQS1NfQ0FDSEUuZGVsKGFwa3NIYXNoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgbG9nLmRlYnVnKGBVbnBhY2tpbmcgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke2Fwa3N9JyB0byAnJHt0bXBSb290fSdgKTtcbiAgICBhd2FpdCB1bnppcEZpbGUoYXBrcywgdG1wUm9vdCk7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAuLi5kc3RQYXRoKTtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RzdFBhdGguam9pbihwYXRoLnNlcCl9IGNhbm5vdCBiZSBmb3VuZCBpbiAnJHthcGtzfScgYnVuZGxlLiBgICtcbiAgICAgICAgYERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBhIHZhbGlkIGFwcGxpY2F0aW9uIGJ1bmRsZT9gKTtcbiAgICB9XG4gICAgQVBLU19DQUNIRS5zZXQoYXBrc0hhc2gsIHRtcFJvb3QpO1xuICAgIHJldHVybiByZXN1bHRQYXRoO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBidW5kbGV0b29sIHV0aWxpdHkgd2l0aCBnaXZlbiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBzdGRvdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGFyZ3MgLSB0aGUgbGlzdCBvZiBidW5kbGV0b29sIGFyZ3VtZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIC0gVGhlIGN1c3RvbWl6ZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhY3R1YWwgY29tbWFuZCBzdGRvdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGV0b29sIGphciBkb2VzIG5vdCBleGlzdCBpbiBQQVRIIG9yIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZVxuICogZXhlY3V0aW5nIGl0XG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXhlY0J1bmRsZXRvb2wgPSBhc3luYyBmdW5jdGlvbiBleGVjQnVuZGxldG9vbCAoYXJncywgZXJyb3JNc2cpIHtcbiAgYXdhaXQgdGhpcy5pbml0QnVuZGxldG9vbCgpO1xuICBhcmdzID0gW1xuICAgICctamFyJywgdGhpcy5iaW5hcmllcy5idW5kbGV0b29sLFxuICAgIC4uLmFyZ3NcbiAgXTtcbiAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG4gIGlmICh0aGlzLmFkYlBvcnQpIHtcbiAgICBlbnYuQU5EUk9JRF9BREJfU0VSVkVSX1BPUlQgPSBgJHt0aGlzLmFkYlBvcnR9YDtcbiAgfVxuICBpZiAodGhpcy5hZGJIb3N0KSB7XG4gICAgZW52LkFORFJPSURfQURCX1NFUlZFUl9IT1NUID0gdGhpcy5hZGJIb3N0O1xuICB9XG4gIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGJ1bmRsZXRvb2wgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhhd2FpdCBnZXRKYXZhRm9yT3MoKSwgYXJncywge1xuICAgICAgZW52LFxuICAgICAgdGltZW91dDogQlVORExFVE9PTF9USU1FT1VUX01TLFxuICAgIH0pKTtcbiAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICByZXR1cm4gc3Rkb3V0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuc3Rkb3V0KSB7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke2Uuc3Rkb3V0fWApO1xuICAgIH1cbiAgICBpZiAoZS5zdGRlcnIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRlcnI6ICR7ZS5zdGRlcnJ9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1zZ30uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY0xvY2F0aW9uIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZ2VuZXJhdGVkIGRldmljZSBzcGVjIGxvY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2FtZSBgc3BlY0xvY2F0aW9uYCB2YWx1ZVxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSB0aGUgc3BlYyBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZ2V0RGV2aWNlU3BlYyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVNwZWMgKHNwZWNMb2NhdGlvbikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICdnZXQtZGV2aWNlLXNwZWMnLFxuICAgICctLWFkYicsIHRoaXMuZXhlY3V0YWJsZS5wYXRoLFxuICAgICctLWRldmljZS1pZCcsIHRoaXMuY3VyRGV2aWNlSWQsXG4gICAgJy0tb3V0cHV0Jywgc3BlY0xvY2F0aW9uLFxuICBdO1xuICBsb2cuZGVidWcoYEdldHRpbmcgdGhlIHNwZWMgZm9yIHRoZSBkZXZpY2UgJyR7dGhpcy5jdXJEZXZpY2VJZH0nYCk7XG4gIGF3YWl0IHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGV2aWNlIHNwZWMnKTtcbiAgcmV0dXJuIHNwZWNMb2NhdGlvbjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzIwMDAwXSAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWxcbiAqIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FuZHJvaWRJbnN0YWxsVGltZW91dF0gLSBUaGUgdGltZW91dCBvcHRpb24gbmFtZVxuICogdXNlcnMgY2FuIGluY3JlYXNlIHRoZSB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb25cbiAqIGlzIGNvbXBsZXRlZCB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBrcyBpbnRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBrUGF0aHNUb0luc3RhbGwgLSBUaGUgZnVsbCBwYXRocyB0byBpbnN0YWxsIGFwa3NcbiAqIEBwYXJhbSB7P2luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRpb25zIC0gSW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5pbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE11bHRpcGxlQXBrcyAoYXBrUGF0aHNUb0luc3RhbGwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbnN0YWxsQXJncyA9IGJ1aWxkSW5zdGFsbEFyZ3MoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpLCBvcHRpb25zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2luc3RhbGwtbXVsdGlwbGUnLCAuLi5pbnN0YWxsQXJncywgLi4uYXBrUGF0aHNUb0luc3RhbGxdLCB7XG4gICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0LFxuICAgIHRpbWVvdXRDYXBOYW1lOiBvcHRpb25zLnRpbWVvdXRDYXBOYW1lLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbEFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFsxMjAwMDBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbFxuICogdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lb3V0Q2FwTmFtZSBbYW5kcm9pZEluc3RhbGxUaW1lb3V0XSAtIFRoZSB0aW1lb3V0IG9wdGlvbiBuYW1lXG4gKiB1c2VycyBjYW4gaW5jcmVhc2UgdGhlIHRpbWVvdXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb25cbiAqIGlzIGNvbXBsZXRlZCB1bmRlciBBbmRyb2lkIDYrLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIC5hcGtzIHBhY2thZ2UgaW50byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7P0luc3RhbGxBcGtzT3B0aW9uc30gb3B0aW9ucyAtIEluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIC5hcGtzIGJ1bmRsZSBjYW5ub3QgYmUgaW5zdGFsbGVkXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuaW5zdGFsbEFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrcyAoYXBrcywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBncmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIHRpbWVvdXQsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2luc3RhbGwtYXBrcycsXG4gICAgJy0tYWRiJywgdGhpcy5leGVjdXRhYmxlLnBhdGgsXG4gICAgJy0tYXBrcycsIGFwa3MsXG4gICAgJy0tdGltZW91dC1taWxsaXMnLCB0aW1lb3V0IHx8IEFQS1NfSU5TVEFMTF9USU1FT1VULFxuICAgICctLWRldmljZS1pZCcsIHRoaXMuY3VyRGV2aWNlSWQsXG4gIF07XG4gIGlmIChhbGxvd1Rlc3RQYWNrYWdlcykge1xuICAgIGFyZ3MucHVzaCgnLS1hbGxvdy10ZXN0LW9ubHknKTtcbiAgfVxuICBjb25zdCB0YXNrcyA9IFtcbiAgICB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsIGBDYW5ub3QgaW5zdGFsbCAnJHtwYXRoLmJhc2VuYW1lKGFwa3MpfScgdG8gdGhlIGRldmljZSAke3RoaXMuY3VyRGV2aWNlSWR9YClcbiAgXTtcbiAgaWYgKGdyYW50UGVybWlzc2lvbnMpIHtcbiAgICB0YXNrcy5wdXNoKHRoaXMuZ2V0QXBrSW5mbyhhcGtzKSk7XG4gIH1cbiAgY29uc3QgWywgYXBrSW5mb10gPSBhd2FpdCBCLmFsbCh0YXNrcyk7XG4gIGlmIChncmFudFBlcm1pc3Npb25zICYmIGFwa0luZm8pIHtcbiAgICAvLyBUT0RPOiBTaW1wbGlmeSBpdCBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2J1bmRsZXRvb2wvaXNzdWVzLzI0NiBpcyBpbXBsZW1lbnRlZFxuICAgIGF3YWl0IHRoaXMuZ3JhbnRBbGxQZXJtaXNzaW9ucyhhcGtJbmZvLm5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIG1hc3RlciAuYXBrIGZpbGUgaW5zaWRlIHRoZSBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBtYXN0ZXIgYnVuZGxlIC5hcGtcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdEJhc2VBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0QmFzZUFwayAoYXBrcykge1xuICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgQkFTRV9BUEtdKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwaywgd2hpY2ggY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGluIHRoZSAuYXBrcyBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIGFiYnJldmlhdGlvbi4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXNcbiAqIGdvaW5nIHRvIGJlIHNlbGVjdGVkIGlmIGl0IGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxhbmd1YWdlIC5hcGsgb3IgdGhlIG1hc3RlciAuYXBrXG4gKiBpZiBsYW5ndWFnZSBzcGxpdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhlIGJ1bmRsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdExhbmd1YWdlQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdExhbmd1YWdlQXBrIChhcGtzLCBsYW5ndWFnZSA9IG51bGwpIHtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBMQU5HVUFHRV9BUEsobGFuZ3VhZ2UpXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBsb2cuaW5mbyhgQXNzdW1pbmcgdGhhdCBzcGxpdHRpbmcgYnkgbGFuZ3VhZ2UgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSAnJHthcGtzfScgYnVuZGxlIGAgK1xuICAgICAgICBgYW5kIHJldHVybmluZyB0aGUgbWFpbiBhcGsgaW5zdGVhZGApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBrcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmYXVsdExhbmd1YWdlcyA9IFsnZW4nLCAnZW5fdXMnXTtcbiAgZm9yIChjb25zdCBsYW5nIG9mIGRlZmF1bHRMYW5ndWFnZXMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIExBTkdVQUdFX0FQSyhsYW5nKV0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGxvZy5pbmZvKGBDYW5ub3QgZmluZCBhbnkgc3BsaXQgYXBrIGZvciB0aGUgZGVmYXVsdCBsYW5ndWFnZXMgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0TGFuZ3VhZ2VzKX0uIGAgK1xuICAgIGBSZXR1cm5pbmcgdGhlIG1haW4gYXBrIGluc3RlYWQuYCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwa3MpO1xufTtcblxuYXBrc1V0aWxzTWV0aG9kcy5pc1Rlc3RQYWNrYWdlT25seUVycm9yID0gZnVuY3Rpb24gaXNUZXN0UGFja2FnZU9ubHlFcnJvciAob3V0cHV0KSB7XG4gIHJldHVybiAvXFxbSU5TVEFMTF9GQUlMRURfVEVTVF9PTkxZXFxdLy50ZXN0KG91dHB1dCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBhcGtzVXRpbHNN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
@@ -68,4 +68,4 @@ var _default = keyboardCommands;
68
68
  exports.default = _default;require('source-map-support').install();
69
69
 
70
70
 
71
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2tleWJvYXJkLWNvbW1hbmRzLmpzIiwibmFtZXMiOlsiS0VZQ09ERV9FU0MiLCJLRVlDT0RFX0JBQ0siLCJrZXlib2FyZENvbW1hbmRzIiwiaGlkZUtleWJvYXJkIiwidGltZW91dE1zIiwiaXNLZXlib2FyZFNob3duIiwiY2FuQ2xvc2VLZXlib2FyZCIsImlzU29mdEtleWJvYXJkUHJlc2VudCIsImxvZyIsImluZm8iLCJrZXlDb2RlIiwia2V5ZXZlbnQiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaWduIiwiRXJyb3IiLCJzdGRvdXQiLCJzaGVsbCIsImlucHV0U2hvd25NYXRjaCIsImV4ZWMiLCJpbnB1dFZpZXdTaG93bk1hdGNoIiwiZSIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvdG9vbHMva2V5Ym9hcmQtY29tbWFuZHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgS0VZQ09ERV9FU0MgPSAxMTE7XG5jb25zdCBLRVlDT0RFX0JBQ0sgPSA0O1xuXG5jb25zdCBrZXlib2FyZENvbW1hbmRzID0ge307XG5cbi8qKlxuICogSGlkZXMgc29mdHdhcmUga2V5Ym9hcmQgaWYgaXQgaXMgdmlzaWJsZS5cbiAqIE5vb3AgaWYgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgaGlkZGVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0TXMgWzEwMDBdIEZvciBob3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpXG4gKiB1bnRpbCB0aGUga2V5Ym9hcmQgaXMgYWN0dWFsbHkgaGlkZGVuLlxuICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgdGhlIGtleWJvYXJkIHdhcyBhbHJlYWR5IGhpZGRlblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuLlxuICovXG5rZXlib2FyZENvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAodGltZW91dE1zID0gMTAwMCkge1xuICBsZXQge2lzS2V5Ym9hcmRTaG93biwgY2FuQ2xvc2VLZXlib2FyZH0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpO1xuICBpZiAoIWlzS2V5Ym9hcmRTaG93bikge1xuICAgIGxvZy5pbmZvKCdLZXlib2FyZCBoYXMgbm8gVUk7IG5vIGNsb3NpbmcgbmVjZXNzYXJ5Jyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRyeSBFU0MgdGhlbiBCQUNLIGlmIHRoZSBmaXJzdCBvbmUgZmFpbHNcbiAgZm9yIChjb25zdCBrZXlDb2RlIG9mIFtLRVlDT0RFX0VTQywgS0VZQ09ERV9CQUNLXSkge1xuICAgIGlmIChjYW5DbG9zZUtleWJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLmtleWV2ZW50KGtleUNvZGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAoe2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpKTtcbiAgICAgICAgcmV0dXJuICFpc0tleWJvYXJkU2hvd247XG4gICAgICB9LCB7d2FpdE1zOiB0aW1lb3V0TXMsIGludGVydmFsTXM6IDUwMH0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzb2Z0d2FyZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuYCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEtleWJvYXJkU3RhdGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNLZXlib2FyZFNob3duIC0gV2hldGhlciBzb2Z0IGtleWJvYXJkIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjYW5DbG9zZUtleWJvYXJkIC0gV2hldGhlciB0aGUga2V5Ym9hcmQgY2FuIGJlIGNsb3NlZC5cbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzdGF0ZSBvZiB0aGUgc29mdHdhcmUga2V5Ym9hcmQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge0tleWJvYXJkU3RhdGV9IFRoZSBrZXlib2FyZCBzdGF0ZS5cbiAqL1xua2V5Ym9hcmRDb21tYW5kcy5pc1NvZnRLZXlib2FyZFByZXNlbnQgPSBhc3luYyBmdW5jdGlvbiBpc1NvZnRLZXlib2FyZFByZXNlbnQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ2lucHV0X21ldGhvZCddKTtcbiAgICBjb25zdCBpbnB1dFNob3duTWF0Y2ggPSAvbUlucHV0U2hvd249KFxcdyspLy5leGVjKHN0ZG91dCk7XG4gICAgY29uc3QgaW5wdXRWaWV3U2hvd25NYXRjaCA9IC9tSXNJbnB1dFZpZXdTaG93bj0oXFx3KykvLmV4ZWMoc3Rkb3V0KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNLZXlib2FyZFNob3duOiAhIShpbnB1dFNob3duTWF0Y2ggJiYgaW5wdXRTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgICAgY2FuQ2xvc2VLZXlib2FyZDogISEoaW5wdXRWaWV3U2hvd25NYXRjaCAmJiBpbnB1dFZpZXdTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpbmRpbmcgc29mdGtleWJvYXJkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleWJvYXJkQ29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUEsTUFBTUEsV0FBVyxHQUFHLEdBQXBCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQXJCO0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsRUFBekI7O0FBV0FBLGdCQUFnQixDQUFDQyxZQUFqQixHQUFnQyxlQUFlQSxZQUFmLENBQTZCQyxTQUFTLEdBQUcsSUFBekMsRUFBK0M7RUFDN0UsSUFBSTtJQUFDQyxlQUFEO0lBQWtCQztFQUFsQixJQUFzQyxNQUFNLEtBQUtDLHFCQUFMLEVBQWhEOztFQUNBLElBQUksQ0FBQ0YsZUFBTCxFQUFzQjtJQUNwQkcsZ0JBQUlDLElBQUosQ0FBUywwQ0FBVDs7SUFDQSxPQUFPLEtBQVA7RUFDRDs7RUFFRCxLQUFLLE1BQU1DLE9BQVgsSUFBc0IsQ0FBQ1YsV0FBRCxFQUFjQyxZQUFkLENBQXRCLEVBQW1EO0lBQ2pELElBQUlLLGdCQUFKLEVBQXNCO01BQ3BCLE1BQU0sS0FBS0ssUUFBTCxDQUFjRCxPQUFkLENBQU47SUFDRDs7SUFDRCxJQUFJO01BQ0YsT0FBTyxNQUFNLGdDQUFpQixZQUFZO1FBQ3hDLENBQUM7VUFBQ0w7UUFBRCxJQUFvQixNQUFNLEtBQUtFLHFCQUFMLEVBQTNCO1FBQ0EsT0FBTyxDQUFDRixlQUFSO01BQ0QsQ0FIWSxFQUdWO1FBQUNPLE1BQU0sRUFBRVIsU0FBVDtRQUFvQlMsVUFBVSxFQUFFO01BQWhDLENBSFUsQ0FBYjtJQUlELENBTEQsQ0FLRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtFQUNqQjs7RUFDRCxNQUFNLElBQUlDLEtBQUosQ0FBVyx3Q0FBWCxDQUFOO0FBQ0QsQ0FuQkQ7O0FBZ0NBYixnQkFBZ0IsQ0FBQ0sscUJBQWpCLEdBQXlDLGVBQWVBLHFCQUFmLEdBQXdDO0VBQy9FLElBQUk7SUFDRixNQUFNUyxNQUFNLEdBQUcsTUFBTSxLQUFLQyxLQUFMLENBQVcsQ0FBQyxTQUFELEVBQVksY0FBWixDQUFYLENBQXJCO0lBQ0EsTUFBTUMsZUFBZSxHQUFHLG9CQUFvQkMsSUFBcEIsQ0FBeUJILE1BQXpCLENBQXhCO0lBQ0EsTUFBTUksbUJBQW1CLEdBQUcsMEJBQTBCRCxJQUExQixDQUErQkgsTUFBL0IsQ0FBNUI7SUFDQSxPQUFPO01BQ0xYLGVBQWUsRUFBRSxDQUFDLEVBQUVhLGVBQWUsSUFBSUEsZUFBZSxDQUFDLENBQUQsQ0FBZixLQUF1QixNQUE1QyxDQURiO01BRUxaLGdCQUFnQixFQUFFLENBQUMsRUFBRWMsbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDLENBQUQsQ0FBbkIsS0FBMkIsTUFBcEQ7SUFGZCxDQUFQO0VBSUQsQ0FSRCxDQVFFLE9BQU9DLENBQVAsRUFBVTtJQUNWLE1BQU0sSUFBSU4sS0FBSixDQUFXLCtDQUE4Q00sQ0FBQyxDQUFDQyxPQUFRLEVBQW5FLENBQU47RUFDRDtBQUNGLENBWkQ7O2VBY2VwQixnQiJ9
71
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2tleWJvYXJkLWNvbW1hbmRzLmpzIiwibmFtZXMiOlsiS0VZQ09ERV9FU0MiLCJLRVlDT0RFX0JBQ0siLCJrZXlib2FyZENvbW1hbmRzIiwiaGlkZUtleWJvYXJkIiwidGltZW91dE1zIiwiaXNLZXlib2FyZFNob3duIiwiY2FuQ2xvc2VLZXlib2FyZCIsImlzU29mdEtleWJvYXJkUHJlc2VudCIsImxvZyIsImluZm8iLCJrZXlDb2RlIiwia2V5ZXZlbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlnbiIsIkVycm9yIiwic3Rkb3V0Iiwic2hlbGwiLCJpbnB1dFNob3duTWF0Y2giLCJleGVjIiwiaW5wdXRWaWV3U2hvd25NYXRjaCIsImUiLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL2tleWJvYXJkLWNvbW1hbmRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IEtFWUNPREVfRVNDID0gMTExO1xuY29uc3QgS0VZQ09ERV9CQUNLID0gNDtcblxuY29uc3Qga2V5Ym9hcmRDb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEhpZGVzIHNvZnR3YXJlIGtleWJvYXJkIGlmIGl0IGlzIHZpc2libGUuXG4gKiBOb29wIGlmIHRoZSBrZXlib2FyZCBpcyBhbHJlYWR5IGhpZGRlbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dE1zIFsxMDAwXSBGb3IgaG93IGxvbmcgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKVxuICogdW50aWwgdGhlIGtleWJvYXJkIGlzIGFjdHVhbGx5IGhpZGRlbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgZmFsc2VgIGlmIHRoZSBrZXlib2FyZCB3YXMgYWxyZWFkeSBoaWRkZW5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUga2V5Ym9hcmQgY2Fubm90IGJlIGhpZGRlbi5cbiAqL1xua2V5Ym9hcmRDb21tYW5kcy5oaWRlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBoaWRlS2V5Ym9hcmQgKHRpbWVvdXRNcyA9IDEwMDApIHtcbiAgbGV0IHtpc0tleWJvYXJkU2hvd24sIGNhbkNsb3NlS2V5Ym9hcmR9ID0gYXdhaXQgdGhpcy5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgaWYgKCFpc0tleWJvYXJkU2hvd24pIHtcbiAgICBsb2cuaW5mbygnS2V5Ym9hcmQgaGFzIG5vIFVJOyBubyBjbG9zaW5nIG5lY2Vzc2FyeScpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUcnkgRVNDIHRoZW4gQkFDSyBpZiB0aGUgZmlyc3Qgb25lIGZhaWxzXG4gIGZvciAoY29uc3Qga2V5Q29kZSBvZiBbS0VZQ09ERV9FU0MsIEtFWUNPREVfQkFDS10pIHtcbiAgICBpZiAoY2FuQ2xvc2VLZXlib2FyZCkge1xuICAgICAgYXdhaXQgdGhpcy5rZXlldmVudChrZXlDb2RlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgKHtpc0tleWJvYXJkU2hvd259ID0gYXdhaXQgdGhpcy5pc1NvZnRLZXlib2FyZFByZXNlbnQoKSk7XG4gICAgICAgIHJldHVybiAhaXNLZXlib2FyZFNob3duO1xuICAgICAgfSwge3dhaXRNczogdGltZW91dE1zLCBpbnRlcnZhbE1zOiA1MDB9KTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc29mdHdhcmUga2V5Ym9hcmQgY2Fubm90IGJlIGhpZGRlbmApO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBLZXlib2FyZFN0YXRlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzS2V5Ym9hcmRTaG93biAtIFdoZXRoZXIgc29mdCBrZXlib2FyZCBpcyBjdXJyZW50bHkgdmlzaWJsZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2FuQ2xvc2VLZXlib2FyZCAtIFdoZXRoZXIgdGhlIGtleWJvYXJkIGNhbiBiZSBjbG9zZWQuXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgc3RhdGUgb2YgdGhlIHNvZnR3YXJlIGtleWJvYXJkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcmV0dXJuIHtLZXlib2FyZFN0YXRlfSBUaGUga2V5Ym9hcmQgc3RhdGUuXG4gKi9cbmtleWJvYXJkQ29tbWFuZHMuaXNTb2Z0S2V5Ym9hcmRQcmVzZW50ID0gYXN5bmMgZnVuY3Rpb24gaXNTb2Z0S2V5Ym9hcmRQcmVzZW50ICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFsnZHVtcHN5cycsICdpbnB1dF9tZXRob2QnXSk7XG4gICAgY29uc3QgaW5wdXRTaG93bk1hdGNoID0gL21JbnB1dFNob3duPShcXHcrKS8uZXhlYyhzdGRvdXQpO1xuICAgIGNvbnN0IGlucHV0Vmlld1Nob3duTWF0Y2ggPSAvbUlzSW5wdXRWaWV3U2hvd249KFxcdyspLy5leGVjKHN0ZG91dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzS2V5Ym9hcmRTaG93bjogISEoaW5wdXRTaG93bk1hdGNoICYmIGlucHV0U2hvd25NYXRjaFsxXSA9PT0gJ3RydWUnKSxcbiAgICAgIGNhbkNsb3NlS2V5Ym9hcmQ6ICEhKGlucHV0Vmlld1Nob3duTWF0Y2ggJiYgaW5wdXRWaWV3U2hvd25NYXRjaFsxXSA9PT0gJ3RydWUnKSxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmaW5kaW5nIHNvZnRrZXlib2FyZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBrZXlib2FyZENvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFdBQVcsR0FBRyxHQUFwQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxDQUFyQjtBQUVBLE1BQU1DLGdCQUFnQixHQUFHLEVBQXpCOztBQVdBQSxnQkFBZ0IsQ0FBQ0MsWUFBakIsR0FBZ0MsZUFBZUEsWUFBZixDQUE2QkMsU0FBUyxHQUFHLElBQXpDLEVBQStDO0VBQzdFLElBQUk7SUFBQ0MsZUFBRDtJQUFrQkM7RUFBbEIsSUFBc0MsTUFBTSxLQUFLQyxxQkFBTCxFQUFoRDs7RUFDQSxJQUFJLENBQUNGLGVBQUwsRUFBc0I7SUFDcEJHLGVBQUEsQ0FBSUMsSUFBSixDQUFTLDBDQUFUOztJQUNBLE9BQU8sS0FBUDtFQUNEOztFQUVELEtBQUssTUFBTUMsT0FBWCxJQUFzQixDQUFDVixXQUFELEVBQWNDLFlBQWQsQ0FBdEIsRUFBbUQ7SUFDakQsSUFBSUssZ0JBQUosRUFBc0I7TUFDcEIsTUFBTSxLQUFLSyxRQUFMLENBQWNELE9BQWQsQ0FBTjtJQUNEOztJQUNELElBQUk7TUFDRixPQUFPLE1BQU0sSUFBQUUsMEJBQUEsRUFBaUIsWUFBWTtRQUN4QyxDQUFDO1VBQUNQO1FBQUQsSUFBb0IsTUFBTSxLQUFLRSxxQkFBTCxFQUEzQjtRQUNBLE9BQU8sQ0FBQ0YsZUFBUjtNQUNELENBSFksRUFHVjtRQUFDUSxNQUFNLEVBQUVULFNBQVQ7UUFBb0JVLFVBQVUsRUFBRTtNQUFoQyxDQUhVLENBQWI7SUFJRCxDQUxELENBS0UsT0FBT0MsR0FBUCxFQUFZLENBQUU7RUFDakI7O0VBQ0QsTUFBTSxJQUFJQyxLQUFKLENBQVcsd0NBQVgsQ0FBTjtBQUNELENBbkJEOztBQWdDQWQsZ0JBQWdCLENBQUNLLHFCQUFqQixHQUF5QyxlQUFlQSxxQkFBZixHQUF3QztFQUMvRSxJQUFJO0lBQ0YsTUFBTVUsTUFBTSxHQUFHLE1BQU0sS0FBS0MsS0FBTCxDQUFXLENBQUMsU0FBRCxFQUFZLGNBQVosQ0FBWCxDQUFyQjtJQUNBLE1BQU1DLGVBQWUsR0FBRyxvQkFBb0JDLElBQXBCLENBQXlCSCxNQUF6QixDQUF4QjtJQUNBLE1BQU1JLG1CQUFtQixHQUFHLDBCQUEwQkQsSUFBMUIsQ0FBK0JILE1BQS9CLENBQTVCO0lBQ0EsT0FBTztNQUNMWixlQUFlLEVBQUUsQ0FBQyxFQUFFYyxlQUFlLElBQUlBLGVBQWUsQ0FBQyxDQUFELENBQWYsS0FBdUIsTUFBNUMsQ0FEYjtNQUVMYixnQkFBZ0IsRUFBRSxDQUFDLEVBQUVlLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQyxDQUFELENBQW5CLEtBQTJCLE1BQXBEO0lBRmQsQ0FBUDtFQUlELENBUkQsQ0FRRSxPQUFPQyxDQUFQLEVBQVU7SUFDVixNQUFNLElBQUlOLEtBQUosQ0FBVywrQ0FBOENNLENBQUMsQ0FBQ0MsT0FBUSxFQUFuRSxDQUFOO0VBQ0Q7QUFDRixDQVpEOztlQWNlckIsZ0IifQ==
@@ -221,4 +221,4 @@ var _default = lockManagementMethods;
221
221
  exports.default = _default;require('source-map-support').install();
222
222
 
223
223
 
224
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2xvY2ttZ210LmpzIiwibmFtZXMiOlsibG9ja01hbmFnZW1lbnRNZXRob2RzIiwiQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUiIsIkNSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiIsIlNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMiLCJLRVlDT0RFX1BPV0VSIiwiS0VZQ09ERV9XQUtFVVAiLCJISURFX0tFWUJPQVJEX1dBSVRfVElNRSIsImJ1aWxkQ29tbWFuZCIsInZlcmIiLCJvbGRDcmVkZW50aWFsIiwiYXJncyIsImNtZCIsIl8iLCJpc0VtcHR5IiwicHVzaCIsInN3aXBlVXAiLCJhZGIiLCJvdXRwdXQiLCJzaGVsbCIsImRpbWVuc2lvbnNNYXRjaCIsImV4ZWMiLCJFcnJvciIsImRpc3BsYXlXaWR0aCIsInBhcnNlSW50IiwiZGlzcGxheUhlaWdodCIsIngwIiwieTAiLCJ4MSIsInkxIiwibWFwIiwiYyIsIk1hdGgiLCJ0cnVuYyIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJpc0Jvb2xlYW4iLCJfaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsInBhc3NGbGFnIiwiaWduIiwiaW5jbHVkZXMiLCJsb2ciLCJkZWJ1ZyIsInZlcmlmeUxvY2tDcmVkZW50aWFsIiwiY3JlZGVudGlhbCIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dEZvcm1hdCIsIkVYRUNfT1VUUFVUX0ZPUk1BVCIsIkZVTEwiLCJzb21lIiwieCIsImUiLCJtZXNzYWdlIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImlzTG9ja0VuYWJsZWQiLCJ0ZXN0Iiwic2V0TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsImlzSW50ZWdlciIsImlzU2NyZWVuTG9ja2VkIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9MT0dfRFVNUFNZUyIsImR1bXBzeXNGaWxlIiwicGF0aCIsInJlc29sdmUiLCJjd2QiLCJmcyIsIndyaXRlRmlsZSIsImRpc21pc3NLZXlndWFyZCIsImluZm8iLCJjeWNsZVdha2VVcCIsImdldEFwaUxldmVsIiwiaGlkZUtleWJvYXJkIiwiQiIsImRlbGF5IiwiYmFjayIsImtleWV2ZW50Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL2xvY2ttZ210LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7XG4gIGlzU2hvd2luZ0xvY2tzY3JlZW4sIGlzQ3VycmVudEZvY3VzT25LZXlndWFyZCwgaXNTY3JlZW5PbkZ1bGx5LFxufSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgbG9ja01hbmFnZW1lbnRNZXRob2RzID0ge307XG5cbmNvbnN0IENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1IgPSBgQ3JlZGVudGlhbCBjYW4ndCBiZSBudWxsIG9yIGVtcHR5YDtcbmNvbnN0IENSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiA9IGBkaWRuJ3QgbWF0Y2hgO1xuY29uc3QgU1VQUE9SVEVEX0xPQ0tfQ1JFREVOVElBTF9UWVBFUyA9IFsncGFzc3dvcmQnLCAncGluJywgJ3BhdHRlcm4nXTtcbmNvbnN0IEtFWUNPREVfUE9XRVIgPSAyNjtcbmNvbnN0IEtFWUNPREVfV0FLRVVQID0gMjI0OyAvLyB3b3JrcyBvdmVyIEFQSSBMZXZlbCAyMFxuY29uc3QgSElERV9LRVlCT0FSRF9XQUlUX1RJTUUgPSAxMDA7XG5cbmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZCAodmVyYiwgb2xkQ3JlZGVudGlhbCA9IG51bGwsIC4uLmFyZ3MpIHtcbiAgY29uc3QgY21kID0gWydsb2Nrc2V0dGluZ3MnLCB2ZXJiXTtcbiAgaWYgKCFfLmlzRW1wdHkob2xkQ3JlZGVudGlhbCkpIHtcbiAgICBjbWQucHVzaCgnLS1vbGQnLCBvbGRDcmVkZW50aWFsKTtcbiAgfVxuICBpZiAoIV8uaXNFbXB0eShhcmdzKSkge1xuICAgIGNtZC5wdXNoKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBjbWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN3aXBlVXAgKGFkYikge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBhZGIuc2hlbGwoWydkdW1wc3lzJywgJ3dpbmRvdyddKTtcbiAgY29uc3QgZGltZW5zaW9uc01hdGNoID0gL2luaXQ9KFxcZCspeChcXGQrKS8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIWRpbWVuc2lvbnNNYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJldHJpZXZlIHRoZSBkaXNwbGF5IHNpemUnKTtcbiAgfVxuICBjb25zdCBkaXNwbGF5V2lkdGggPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMV0sIDEwKTtcbiAgY29uc3QgZGlzcGxheUhlaWdodCA9IHBhcnNlSW50KGRpbWVuc2lvbnNNYXRjaFsyXSwgMTApO1xuICBjb25zdCB4MCA9IGRpc3BsYXlXaWR0aCAvIDI7XG4gIGNvbnN0IHkwID0gZGlzcGxheUhlaWdodCAvIDUgKiA0O1xuICBjb25zdCB4MSA9IHgwO1xuICBjb25zdCB5MSA9IGRpc3BsYXlIZWlnaHQgLyA1O1xuICBhd2FpdCBhZGIuc2hlbGwoW1xuICAgICdpbnB1dCcsICd0b3VjaHNjcmVlbicsICdzd2lwZScsXG4gICAgLi4uKFt4MCwgeTAsIHgxLCB5MV0ubWFwKChjKSA9PiBNYXRoLnRydW5jKGMpKSlcbiAgXSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCB3aXRoIGBsb2Nrc2V0dGluZ3NgXG4gKiBjb21tYW5kIGxpbmUgdG9vbC4gVGhpcyB0b29sIGhhcyBiZWVuIGFkZGVkIHRvIEFuZHJvaWQgdG9vbHNldCBzaW5jZSAgQVBJIDI3IE9yZW9cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBtYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4gVGhlIHJlc3VsdCBpcyBjYWNoZWQgcGVyIEFEQiBpbnN0YW5jZVxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgKCkge1xuICBpZiAoIV8uaXNCb29sZWFuKHRoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQpKSB7XG4gICAgY29uc3QgcGFzc0ZsYWcgPSAnX19QQVNTX18nO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbYGxvY2tzZXR0aW5ncyBoZWxwICYmIGVjaG8gJHtwYXNzRmxhZ31gXSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIHRoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBfLmluY2x1ZGVzKG91dHB1dCwgcGFzc0ZsYWcpO1xuICAgIGxvZy5kZWJ1ZyhgRXh0ZW5kZWQgbG9jayBzZXR0aW5ncyBtYW5hZ2VtZW50IGlzIGAgK1xuICAgICAgYCR7dGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCA/ICcnIDogJ25vdCAnfXN1cHBvcnRlZGApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjcmVkZW50aWFsIGlzIG1hdGNoZXMgdG8gdGhlIGN1cnJlbnRseSBzZXQgb25lLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gY3JlZGVudGlhbCBbbnVsbF0gVGhlIGNyZWRlbnRpYWwgdmFsdWUuIEl0IGNvdWxkIGJlIGVpdGhlclxuICogcGluLCBwYXNzd29yZCBvciBhIHBhdHRlcm4uIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBudWxsL2VtcHR5IHZhbHVlIGFzc3VtZXMgdGhlIGRldmljZSBoYXMgbm8gbG9jayBjdXJyZW50bHkgc2V0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBtYXRjaGVzIHRvIHRoZSBkZXZpY2UncyBvbmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdmVyaWZpY2F0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnZlcmlmeUxvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TG9ja0NyZWRlbnRpYWwgKGNyZWRlbnRpYWwgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCd2ZXJpZnknLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKF8uaW5jbHVkZXMoc3Rkb3V0LCAndmVyaWZpZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoW2BkaWRuJ3QgbWF0Y2hgLCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SXVxuICAgICAgICAuc29tZSgoeCkgPT4gXy5pbmNsdWRlcyhzdGRlcnIgfHwgc3Rkb3V0LCB4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgbG9jayBjcmVkZW50aWFsIHZlcmlmaWNhdGlvbiBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgY3VycmVudCBsb2NrIGNyZWRlbnRpYWxzLiBVc3VhbGx5IGl0IHRha2VzIHNldmVyYWwgc2Vjb25kcyBmb3IgYSBkZXZpY2UgdG9cbiAqIHN5bmMgdGhlIGNyZWRlbnRpYWwgc3RhdGUgYWZ0ZXIgdGhpcyBtZXRob2QgcmV0dXJucy5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBvcGVyYXRpb24gZmFjZXMgYW4gdW5leHBlY3RlZCBlcnJvclxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuY2xlYXJMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIGNsZWFyTG9ja0NyZWRlbnRpYWwgKGNyZWRlbnRpYWwgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdjbGVhcicsIGNyZWRlbnRpYWwpLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIVsndXNlciBoYXMgbm8gcGFzc3dvcmQnLCAnTG9jayBjcmVkZW50aWFsIGNsZWFyZWQnXVxuICAgICAgICAuc29tZSgoeCkgPT4gXy5pbmNsdWRlcyhzdGRlcnIgfHwgc3Rkb3V0LCB4KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBkZXZpY2UgbG9jayBjcmVkZW50aWFsLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGRldmljZSBpcyBsb2NrZWQgd2l0aCBhIGNyZWRlbnRpYWwgKGVpdGhlciBwaW4gb3IgYSBwYXNzd29yZFxuICogb3IgYSBwYXR0ZXJuKS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBkZXZpY2UgaXMgbG9ja2VkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja0VuYWJsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tFbmFibGVkICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgdGhpcy5zaGVsbChidWlsZENvbW1hbmQoJ2dldC1kaXNhYmxlZCcpLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoL1xcYmZhbHNlXFxiLy50ZXN0KHN0ZG91dClcbiAgICAgICAgfHwgW0NSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl0uc29tZShcbiAgICAgICAgICAoeCkgPT4gXy5pbmNsdWRlcyhzdGRlcnIgfHwgc3Rkb3V0LCB4KSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoL1xcYnRydWVcXGIvLnRlc3Qoc3Rkb3V0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjaGVjayBpZiBkZXZpY2UgbG9jayBpcyBlbmFibGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogU2V0cyB0aGUgZGV2aWNlIGxvY2suXG4gKlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsVHlwZSBPbmUgb2Y6IHBhc3N3b3JkLCBwaW4sIHBhdHRlcm4uXG4gKiBAcGFyYW0geyFzdHJpbmd9IGNyZWRlbnRpYWwgQSBub24tZW1wdHkgY3JlZGVudGlhbCB2YWx1ZSB0byBiZSBzZXQuXG4gKiBNYWtlIHN1cmUgeW91ciBuZXcgY3JlZGVudGlhbCBtYXRjaGVzIHRvIHRoZSBhY3R1YWwgc3lzdGVtIHNlY3VyaXR5IHJlcXVpcmVtZW50cyxcbiAqIGUuZy4gYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aC4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIEBwYXJhbSB7P3N0cmluZ30gb2xkQ3JlZGVudGlhbCBbbnVsbF0gQW4gb2xkIGNyZWRlbnRpYWwgc3RyaW5nLlxuICogSXQgaXMgb25seSByZXF1aXJlZCB0byBiZSBzZXQgaW4gY2FzZSB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnRcbiAqIGNyZWRlbnRpYWwgcmF0aGVyIHRoYW4gdG8gc2V0IGEgbmV3IG9uZS4gU2V0dGluZyBpdCB0byBhIHdyb25nIHZhbHVlIHdpbGxcbiAqIG1ha2UgdGhpcyBtZXRob2QgdG8gZmFpbCBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgdmVyaWZ5aW5nIGlucHV0IGFyZ3VtZW50cyBvciBzZXR0aW5nXG4gKiB0aGUgY3JlZGVudGlhbFxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuc2V0TG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBzZXRMb2NrQ3JlZGVudGlhbCAoXG4gIGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsLCBvbGRDcmVkZW50aWFsID0gbnVsbCkge1xuICBpZiAoIVNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMuaW5jbHVkZXMoY3JlZGVudGlhbFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgbG9jayBjcmVkZW50aWFsIHR5cGUgJyR7Y3JlZGVudGlhbFR5cGV9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbCB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1NVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVN9YCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShjcmVkZW50aWFsKSAmJiAhXy5pc0ludGVnZXIoY3JlZGVudGlhbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldmljZSBsb2NrIGNyZWRlbnRpYWwgY2Fubm90IGJlIGVtcHR5Jyk7XG4gIH1cbiAgY29uc3QgY21kID0gYnVpbGRDb21tYW5kKGBzZXQtJHtjcmVkZW50aWFsVHlwZX1gLCBvbGRDcmVkZW50aWFsLCBjcmVkZW50aWFsKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgdGhpcy5zaGVsbChjbWQsIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmICghXy5pbmNsdWRlcyhzdGRvdXQsICdzZXQgdG8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2V0dGluZyBvZiBkZXZpY2UgbG9jayAke2NyZWRlbnRpYWxUeXBlfSBjcmVkZW50aWFsIGZhaWxlZC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzY3JlZW4gbG9jayBzdGF0ZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZC5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzU2NyZWVuTG9ja2VkID0gYXN5bmMgZnVuY3Rpb24gaXNTY3JlZW5Mb2NrZWQgKCkge1xuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fTE9HX0RVTVBTWVMpIHtcbiAgICAvLyBvcHRpb25hbCBkZWJ1Z2dpbmdcbiAgICAvLyBpZiB0aGUgbWV0aG9kIGlzIG5vdCB3b3JraW5nLCB0dXJuIGl0IG9uIGFuZCBzZW5kIHVzIHRoZSBvdXRwdXRcbiAgICBjb25zdCBkdW1wc3lzRmlsZSA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnZHVtcHN5cy5sb2cnKTtcbiAgICBsb2cuZGVidWcoYFdyaXRpbmcgZHVtcHN5cyBvdXRwdXQgdG8gJHtkdW1wc3lzRmlsZX1gKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZHVtcHN5c0ZpbGUsIHN0ZG91dCk7XG4gIH1cbiAgcmV0dXJuIGlzU2hvd2luZ0xvY2tzY3JlZW4oc3Rkb3V0KSB8fCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQoc3Rkb3V0KSB8fCAhaXNTY3JlZW5PbkZ1bGx5KHN0ZG91dCk7XG59O1xuXG4vKipcbiAqIERpc21pc3NlcyBrZXlndWFyZCBvdmVybGF5LlxuICovXG5sb2NrTWFuYWdlbWVudE1ldGhvZHMuZGlzbWlzc0tleWd1YXJkID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0tleWd1YXJkICgpIHtcbiAgbG9nLmluZm8oJ1dha2luZyB1cCB0aGUgZGV2aWNlIHRvIGRpc21pc3MgdGhlIGtleWd1YXJkJyk7XG4gIC8vIFNjcmVlbiBvZmYgb25jZSB0byBmb3JjZSBwcmUtaW5wdXR0ZWQgdGV4dCBmaWVsZCBjbGVhbiBhZnRlciB3YWtlLXVwXG4gIC8vIEp1c3Qgc2NyZWVuIG9uIGlmIHRoZSBzY3JlZW4gZGVmYXVsdHMgb2ZmXG4gIGF3YWl0IHRoaXMuY3ljbGVXYWtlVXAoKTtcblxuICBpZiAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID4gMjEpIHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnd20nLCAnZGlzbWlzcy1rZXlndWFyZCddKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddKTtcbiAgaWYgKCFpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQoc3Rkb3V0KSkge1xuICAgIGxvZy5kZWJ1ZygnVGhlIGtleWd1YXJkIHNlZW1zIHRvIGJlIGluYWN0aXZlJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTd2lwaW5nIHVwIHRvIGRpc21pc3MgdGhlIGtleWd1YXJkJyk7XG4gIGlmIChhd2FpdCB0aGlzLmhpZGVLZXlib2FyZCgpKSB7XG4gICAgYXdhaXQgQi5kZWxheShISURFX0tFWUJPQVJEX1dBSVRfVElNRSk7XG4gIH1cbiAgbG9nLmRlYnVnKCdEaXNtaXNzaW5nIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgdW5sb2NrIHZpZXcnKTtcbiAgYXdhaXQgdGhpcy5zaGVsbChbJ3NlcnZpY2UnLCAnY2FsbCcsICdub3RpZmljYXRpb24nLCAnMSddKTtcbiAgYXdhaXQgdGhpcy5iYWNrKCk7XG4gIGF3YWl0IHN3aXBlVXAodGhpcyk7XG59O1xuXG4vKipcbiAqIFByZXNzZXMgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGNvbWJpbmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlJ3Mgc2NyZWVuXG4gKiBpcyBub3QgdHVybmVkIG9mZiBhbmQgaXMgbG9ja2VkIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmN5Y2xlV2FrZVVwID0gYXN5bmMgZnVuY3Rpb24gY3ljbGVXYWtlVXAgKCkge1xuICBhd2FpdCB0aGlzLmtleWV2ZW50KEtFWUNPREVfUE9XRVIpO1xuICBhd2FpdCB0aGlzLmtleWV2ZW50KEtFWUNPREVfV0FLRVVQKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxxQkFBcUIsR0FBRyxFQUE5QjtBQUVBLE1BQU1DLHdDQUF3QyxHQUFJLG1DQUFsRDtBQUNBLE1BQU1DLDhCQUE4QixHQUFJLGNBQXhDO0FBQ0EsTUFBTUMsK0JBQStCLEdBQUcsQ0FBQyxVQUFELEVBQWEsS0FBYixFQUFvQixTQUFwQixDQUF4QztBQUNBLE1BQU1DLGFBQWEsR0FBRyxFQUF0QjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxHQUF2QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDOztBQUVBLFNBQVNDLFlBQVQsQ0FBdUJDLElBQXZCLEVBQTZCQyxhQUFhLEdBQUcsSUFBN0MsRUFBbUQsR0FBR0MsSUFBdEQsRUFBNEQ7RUFDMUQsTUFBTUMsR0FBRyxHQUFHLENBQUMsY0FBRCxFQUFpQkgsSUFBakIsQ0FBWjs7RUFDQSxJQUFJLENBQUNJLGdCQUFFQyxPQUFGLENBQVVKLGFBQVYsQ0FBTCxFQUErQjtJQUM3QkUsR0FBRyxDQUFDRyxJQUFKLENBQVMsT0FBVCxFQUFrQkwsYUFBbEI7RUFDRDs7RUFDRCxJQUFJLENBQUNHLGdCQUFFQyxPQUFGLENBQVVILElBQVYsQ0FBTCxFQUFzQjtJQUNwQkMsR0FBRyxDQUFDRyxJQUFKLENBQVMsR0FBR0osSUFBWjtFQUNEOztFQUNELE9BQU9DLEdBQVA7QUFDRDs7QUFFRCxlQUFlSSxPQUFmLENBQXdCQyxHQUF4QixFQUE2QjtFQUMzQixNQUFNQyxNQUFNLEdBQUcsTUFBTUQsR0FBRyxDQUFDRSxLQUFKLENBQVUsQ0FBQyxTQUFELEVBQVksUUFBWixDQUFWLENBQXJCO0VBQ0EsTUFBTUMsZUFBZSxHQUFHLG1CQUFtQkMsSUFBbkIsQ0FBd0JILE1BQXhCLENBQXhCOztFQUNBLElBQUksQ0FBQ0UsZUFBTCxFQUFz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
224
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2xvY2ttZ210LmpzIiwibmFtZXMiOlsibG9ja01hbmFnZW1lbnRNZXRob2RzIiwiQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUiIsIkNSRURFTlRJQUxfRElEX05PVF9NQVRDSF9FUlJPUiIsIlNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMiLCJLRVlDT0RFX1BPV0VSIiwiS0VZQ09ERV9XQUtFVVAiLCJISURFX0tFWUJPQVJEX1dBSVRfVElNRSIsImJ1aWxkQ29tbWFuZCIsInZlcmIiLCJvbGRDcmVkZW50aWFsIiwiYXJncyIsImNtZCIsIl8iLCJpc0VtcHR5IiwicHVzaCIsInN3aXBlVXAiLCJhZGIiLCJvdXRwdXQiLCJzaGVsbCIsImRpbWVuc2lvbnNNYXRjaCIsImV4ZWMiLCJFcnJvciIsImRpc3BsYXlXaWR0aCIsInBhcnNlSW50IiwiZGlzcGxheUhlaWdodCIsIngwIiwieTAiLCJ4MSIsInkxIiwibWFwIiwiYyIsIk1hdGgiLCJ0cnVuYyIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJpc0Jvb2xlYW4iLCJfaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsInBhc3NGbGFnIiwiaWduIiwiaW5jbHVkZXMiLCJsb2ciLCJkZWJ1ZyIsInZlcmlmeUxvY2tDcmVkZW50aWFsIiwiY3JlZGVudGlhbCIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dEZvcm1hdCIsIkVYRUNfT1VUUFVUX0ZPUk1BVCIsIkZVTEwiLCJzb21lIiwieCIsImUiLCJtZXNzYWdlIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImlzTG9ja0VuYWJsZWQiLCJ0ZXN0Iiwic2V0TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsImlzSW50ZWdlciIsImlzU2NyZWVuTG9ja2VkIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9MT0dfRFVNUFNZUyIsImR1bXBzeXNGaWxlIiwicGF0aCIsInJlc29sdmUiLCJjd2QiLCJmcyIsIndyaXRlRmlsZSIsImlzU2hvd2luZ0xvY2tzY3JlZW4iLCJpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQiLCJpc1NjcmVlbk9uRnVsbHkiLCJkaXNtaXNzS2V5Z3VhcmQiLCJpbmZvIiwiY3ljbGVXYWtlVXAiLCJnZXRBcGlMZXZlbCIsImhpZGVLZXlib2FyZCIsIkIiLCJkZWxheSIsImJhY2siLCJrZXlldmVudCJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi90b29scy9sb2NrbWdtdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge1xuICBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsIGlzU2NyZWVuT25GdWxseSxcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcyA9IHt9O1xuXG5jb25zdCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SID0gYENyZWRlbnRpYWwgY2FuJ3QgYmUgbnVsbCBvciBlbXB0eWA7XG5jb25zdCBDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IgPSBgZGlkbid0IG1hdGNoYDtcbmNvbnN0IFNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMgPSBbJ3Bhc3N3b3JkJywgJ3BpbicsICdwYXR0ZXJuJ107XG5jb25zdCBLRVlDT0RFX1BPV0VSID0gMjY7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDsgLy8gd29ya3Mgb3ZlciBBUEkgTGV2ZWwgMjBcbmNvbnN0IEhJREVfS0VZQk9BUkRfV0FJVF9USU1FID0gMTAwO1xuXG5mdW5jdGlvbiBidWlsZENvbW1hbmQgKHZlcmIsIG9sZENyZWRlbnRpYWwgPSBudWxsLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGNtZCA9IFsnbG9ja3NldHRpbmdzJywgdmVyYl07XG4gIGlmICghXy5pc0VtcHR5KG9sZENyZWRlbnRpYWwpKSB7XG4gICAgY21kLnB1c2goJy0tb2xkJywgb2xkQ3JlZGVudGlhbCk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncykpIHtcbiAgICBjbWQucHVzaCguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzd2lwZVVwIChhZGIpIHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGNvbnN0IGRpbWVuc2lvbnNNYXRjaCA9IC9pbml0PShcXGQrKXgoXFxkKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFkaW1lbnNpb25zTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGlzcGxheSBzaXplJyk7XG4gIH1cbiAgY29uc3QgZGlzcGxheVdpZHRoID0gcGFyc2VJbnQoZGltZW5zaW9uc01hdGNoWzFdLCAxMCk7XG4gIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMl0sIDEwKTtcbiAgY29uc3QgeDAgPSBkaXNwbGF5V2lkdGggLyAyO1xuICBjb25zdCB5MCA9IGRpc3BsYXlIZWlnaHQgLyA1ICogNDtcbiAgY29uc3QgeDEgPSB4MDtcbiAgY29uc3QgeTEgPSBkaXNwbGF5SGVpZ2h0IC8gNTtcbiAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAnaW5wdXQnLCAndG91Y2hzY3JlZW4nLCAnc3dpcGUnLFxuICAgIC4uLihbeDAsIHkwLCB4MSwgeTFdLm1hcCgoYykgPT4gTWF0aC50cnVuYyhjKSkpXG4gIF0pO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBsb2NrIHNldHRpbmdzIG1hbmFnZW1lbnQgd2l0aCBgbG9ja3NldHRpbmdzYFxuICogY29tbWFuZCBsaW5lIHRvb2wuIFRoaXMgdG9vbCBoYXMgYmVlbiBhZGRlZCB0byBBbmRyb2lkIHRvb2xzZXQgc2luY2UgIEFQSSAyNyBPcmVvXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuIFRoZSByZXN1bHQgaXMgY2FjaGVkIHBlciBBREIgaW5zdGFuY2VcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkICgpIHtcbiAgaWYgKCFfLmlzQm9vbGVhbih0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkKSkge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW2Bsb2Nrc2V0dGluZ3MgaGVscCAmJiBlY2hvICR7cGFzc0ZsYWd9YF0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkID0gXy5pbmNsdWRlcyhvdXRwdXQsIHBhc3NGbGFnKTtcbiAgICBsb2cuZGVidWcoYEV4dGVuZGVkIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCBpcyBgICtcbiAgICAgIGAke3RoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPyAnJyA6ICdub3QgJ31zdXBwb3J0ZWRgKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBpcyBtYXRjaGVzIHRvIHRoZSBjdXJyZW50bHkgc2V0IG9uZS5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgZGV2aWNlJ3Mgb25lXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHZlcmlmaWNhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy52ZXJpZnlMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgndmVyaWZ5JywgY3JlZGVudGlhbCksIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmIChfLmluY2x1ZGVzKHN0ZG91dCwgJ3ZlcmlmaWVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFtgZGlkbid0IG1hdGNoYCwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl1cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB2ZXJpZmljYXRpb24gZmFpbGVkLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIGN1cnJlbnQgbG9jayBjcmVkZW50aWFscy4gVXN1YWxseSBpdCB0YWtlcyBzZXZlcmFsIHNlY29uZHMgZm9yIGEgZGV2aWNlIHRvXG4gKiBzeW5jIHRoZSBjcmVkZW50aWFsIHN0YXRlIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMuXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBjcmVkZW50aWFsIFtudWxsXSBUaGUgY3JlZGVudGlhbCB2YWx1ZS4gSXQgY291bGQgYmUgZWl0aGVyXG4gKiBwaW4sIHBhc3N3b3JkIG9yIGEgcGF0dGVybi4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIG51bGwvZW1wdHkgdmFsdWUgYXNzdW1lcyB0aGUgZGV2aWNlIGhhcyBubyBsb2NrIGN1cnJlbnRseSBzZXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmNsZWFyTG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBjbGVhckxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgnY2xlYXInLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKCFbJ3VzZXIgaGFzIG5vIHBhc3N3b3JkJywgJ0xvY2sgY3JlZGVudGlhbCBjbGVhcmVkJ11cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgZGV2aWNlIGxvY2sgY3JlZGVudGlhbC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBjcmVkZW50aWFsIChlaXRoZXIgcGluIG9yIGEgcGFzc3dvcmRcbiAqIG9yIGEgcGF0dGVybikuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZFxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZXJhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc0xvY2tFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrRW5hYmxlZCAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdnZXQtZGlzYWJsZWQnKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKC9cXGJmYWxzZVxcYi8udGVzdChzdGRvdXQpXG4gICAgICAgIHx8IFtDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IsIENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1JdLnNvbWUoXG4gICAgICAgICAgKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKC9cXGJ0cnVlXFxiLy50ZXN0KHN0ZG91dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2hlY2sgaWYgZGV2aWNlIGxvY2sgaXMgZW5hYmxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGRldmljZSBsb2NrLlxuICpcbiAqIEBwYXJhbSB7IXN0cmluZ30gY3JlZGVudGlhbFR5cGUgT25lIG9mOiBwYXNzd29yZCwgcGluLCBwYXR0ZXJuLlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsIEEgbm9uLWVtcHR5IGNyZWRlbnRpYWwgdmFsdWUgdG8gYmUgc2V0LlxuICogTWFrZSBzdXJlIHlvdXIgbmV3IGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgYWN0dWFsIHN5c3RlbSBzZWN1cml0eSByZXF1aXJlbWVudHMsXG4gKiBlLmcuIGEgbWluaW11bSBwYXNzd29yZCBsZW5ndGguIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBAcGFyYW0gez9zdHJpbmd9IG9sZENyZWRlbnRpYWwgW251bGxdIEFuIG9sZCBjcmVkZW50aWFsIHN0cmluZy5cbiAqIEl0IGlzIG9ubHkgcmVxdWlyZWQgdG8gYmUgc2V0IGluIGNhc2UgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50XG4gKiBjcmVkZW50aWFsIHJhdGhlciB0aGFuIHRvIHNldCBhIG5ldyBvbmUuIFNldHRpbmcgaXQgdG8gYSB3cm9uZyB2YWx1ZSB3aWxsXG4gKiBtYWtlIHRoaXMgbWV0aG9kIHRvIGZhaWwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHZlcmlmeWluZyBpbnB1dCBhcmd1bWVudHMgb3Igc2V0dGluZ1xuICogdGhlIGNyZWRlbnRpYWxcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnNldExvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9ja0NyZWRlbnRpYWwgKFxuICBjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCwgb2xkQ3JlZGVudGlhbCA9IG51bGwpIHtcbiAgaWYgKCFTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTLmluY2x1ZGVzKGNyZWRlbnRpYWxUeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB0eXBlICcke2NyZWRlbnRpYWxUeXBlfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWwgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTfWApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoY3JlZGVudGlhbCkgJiYgIV8uaXNJbnRlZ2VyKGNyZWRlbnRpYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgbG9jayBjcmVkZW50aWFsIGNhbm5vdCBiZSBlbXB0eScpO1xuICB9XG4gIGNvbnN0IGNtZCA9IGJ1aWxkQ29tbWFuZChgc2V0LSR7Y3JlZGVudGlhbFR5cGV9YCwgb2xkQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoY21kLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoc3Rkb3V0LCAnc2V0IHRvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgb2YgZGV2aWNlIGxvY2sgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgc2NyZWVuIGxvY2sgc3RhdGUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRldmljZSBpcyBsb2NrZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc1NjcmVlbkxvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzU2NyZWVuTG9ja2VkICgpIHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93J10pO1xuICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX0xPR19EVU1QU1lTKSB7XG4gICAgLy8gb3B0aW9uYWwgZGVidWdnaW5nXG4gICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgd29ya2luZywgdHVybiBpdCBvbiBhbmQgc2VuZCB1cyB0aGUgb3V0cHV0XG4gICAgY29uc3QgZHVtcHN5c0ZpbGUgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2R1bXBzeXMubG9nJyk7XG4gICAgbG9nLmRlYnVnKGBXcml0aW5nIGR1bXBzeXMgb3V0cHV0IHRvICR7ZHVtcHN5c0ZpbGV9YCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bXBzeXNGaWxlLCBzdGRvdXQpO1xuICB9XG4gIHJldHVybiBpc1Nob3dpbmdMb2Nrc2NyZWVuKHN0ZG91dCkgfHwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkgfHwgIWlzU2NyZWVuT25GdWxseShzdGRvdXQpO1xufTtcblxuLyoqXG4gKiBEaXNtaXNzZXMga2V5Z3VhcmQgb3ZlcmxheS5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmRpc21pc3NLZXlndWFyZCA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NLZXlndWFyZCAoKSB7XG4gIGxvZy5pbmZvKCdXYWtpbmcgdXAgdGhlIGRldmljZSB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICAvLyBTY3JlZW4gb2ZmIG9uY2UgdG8gZm9yY2UgcHJlLWlucHV0dGVkIHRleHQgZmllbGQgY2xlYW4gYWZ0ZXIgd2FrZS11cFxuICAvLyBKdXN0IHNjcmVlbiBvbiBpZiB0aGUgc2NyZWVuIGRlZmF1bHRzIG9mZlxuICBhd2FpdCB0aGlzLmN5Y2xlV2FrZVVwKCk7XG5cbiAgaWYgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+IDIxKSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3dtJywgJ2Rpc21pc3Mta2V5Z3VhcmQnXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSk7XG4gIGlmICghaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkpIHtcbiAgICBsb2cuZGVidWcoJ1RoZSBrZXlndWFyZCBzZWVtcyB0byBiZSBpbmFjdGl2ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3dpcGluZyB1cCB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICBpZiAoYXdhaXQgdGhpcy5oaWRlS2V5Ym9hcmQoKSkge1xuICAgIGF3YWl0IEIuZGVsYXkoSElERV9LRVlCT0FSRF9XQUlUX1RJTUUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnRGlzbWlzc2luZyBub3RpZmljYXRpb25zIGZyb20gdGhlIHVubG9jayB2aWV3Jyk7XG4gIGF3YWl0IHRoaXMuc2hlbGwoWydzZXJ2aWNlJywgJ2NhbGwnLCAnbm90aWZpY2F0aW9uJywgJzEnXSk7XG4gIGF3YWl0IHRoaXMuYmFjaygpO1xuICBhd2FpdCBzd2lwZVVwKHRoaXMpO1xufTtcblxuLyoqXG4gKiBQcmVzc2VzIHRoZSBjb3JyZXNwb25kaW5nIGtleSBjb21iaW5hdGlvbiB0byBtYWtlIHN1cmUgdGhlIGRldmljZSdzIHNjcmVlblxuICogaXMgbm90IHR1cm5lZCBvZmYgYW5kIGlzIGxvY2tlZCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5jeWNsZVdha2VVcCA9IGFzeW5jIGZ1bmN0aW9uIGN5Y2xlV2FrZVVwICgpIHtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1BPV0VSKTtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1dBS0VVUCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2NrTWFuYWdlbWVudE1ldGhvZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBOUI7QUFFQSxNQUFNQyx3Q0FBd0MsR0FBSSxtQ0FBbEQ7QUFDQSxNQUFNQyw4QkFBOEIsR0FBSSxjQUF4QztBQUNBLE1BQU1DLCtCQUErQixHQUFHLENBQUMsVUFBRCxFQUFhLEtBQWIsRUFBb0IsU0FBcEIsQ0FBeEM7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsR0FBdkI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxHQUFoQzs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxJQUF2QixFQUE2QkMsYUFBYSxHQUFHLElBQTdDLEVBQW1ELEdBQUdDLElBQXRELEVBQTREO0VBQzFELE1BQU1DLEdBQUcsR0FBRyxDQUFDLGNBQUQsRUFBaUJILElBQWpCLENBQVo7O0VBQ0EsSUFBSSxDQUFDSSxlQUFBLENBQUVDLE9BQUYsQ0FBVUosYUFBVixDQUFMLEVBQStCO0lBQzdCRSxHQUFHLENBQUNHLElBQUosQ0FBUyxPQUFULEVBQWtCTCxhQUFsQjtFQUNEOztFQUNELElBQUksQ0FBQ0csZUFBQSxDQUFFQyxPQUFGLENBQVVILElBQVYsQ0FBTCxFQUFzQjtJQUNwQkMsR0FBRyxDQUFDRyxJQUFKLENBQVMsR0FBR0osSUFBWjtFQUNEOztFQUNELE9BQU9DLEdBQVA7QUFDRDs7QUFFRCxlQUFlSSxPQUFmLENBQXdCQyxHQUF4QixFQUE2QjtFQUMzQixNQUFNQyxNQUFNLEdBQUcsTUFBTUQsR0FBRyxDQUFDRSxLQUFKLENBQVUsQ0FBQyxTQUFELEVBQVksUUFBWixDQUFWLENBQXJCO0VBQ0Es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
@@ -359,4 +359,4 @@ var _default = commands;
359
359
  exports.default = _default;require('source-map-support').install();
360
360
 
361
361
 
362
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyIsIm5hbWVzIjpbIlNFVFRJTkdTX0hFTFBFUl9JRCIsIlNFVFRJTkdTX0hFTFBFUl9NQUlOX0FDVElWSVRZIiwiV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04iLCJEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OIiwiTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIiLCJMT0NBTEVfU0VUVElOR19BQ1RJT04iLCJMT0NBVElPTl9TRVJWSUNFIiwiTE9DQVRJT05fUkVDRUlWRVIiLCJMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OIiwiQ0xJUEJPQVJEX1JFQ0VJVkVSIiwiQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04iLCJOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04iLCJTTVNfTElTVF9SRUNFSVZFUiIsIlNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04iLCJNRURJQV9TQ0FOX1JFQ0VJVkVSIiwiTUVESUFfU0NBTl9BQ1RJT04iLCJBUFBJVU1fSU1FIiwiVU5JQ09ERV9JTUUiLCJERUZBVUxUX1NBVEVMTElURVNfQ09VTlQiLCJERUZBVUxUX0FMVElUVURFIiwiTE9DQVRJT05fVFJBQ0tFUl9UQUciLCJHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MiLCJHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiIsImNvbW1hbmRzIiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsIm9wdHMiLCJwcm9jZXNzRXhpc3RzIiwibG9nIiwiZGVidWciLCJ0aW1lb3V0Iiwic3RhcnRBcHAiLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsIndhaXRGb3JMYXVuY2giLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyIiwiRXJyb3IiLCJzZXRXaWZpU3RhdGUiLCJvbiIsImlzRW11bGF0b3IiLCJzaGVsbCIsInByaXZpbGVnZWQiLCJnZXRBcGlMZXZlbCIsInNldERhdGFTdGF0ZSIsInNldEFuaW1hdGlvblN0YXRlIiwic2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCIsImxhbmd1YWdlIiwiY291bnRyeSIsInNjcmlwdCIsInBhcmFtcyIsInRvTG93ZXJDYXNlIiwidG9VcHBlckNhc2UiLCJwdXNoIiwic2V0R2VvTG9jYXRpb24iLCJsb2NhdGlvbiIsImZvcm1hdExvY2F0aW9uVmFsdWUiLCJ2YWx1ZU5hbWUiLCJpc1JlcXVpcmVkIiwidXRpbCIsImhhc1ZhbHVlIiwiZmxvYXRWYWx1ZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsIl8iLCJjZWlsIiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJhbHRpdHVkZSIsInNwZWVkIiwiYXJncyIsImlzTmlsIiwic2F0ZWxsaXRlcyIsInBhcnNlSW50IiwiTnVtYmVyIiwibGVuZ3RoIiwicmVzZXRUZWxuZXRBdXRoVG9rZW4iLCJhZGJFeGVjIiwibWFwIiwiYXJnIiwicmVwbGFjZSIsImdldEdlb0xvY2F0aW9uIiwib3V0cHV0Iiwic3RkZXJyIiwic3Rkb3V0IiwibWVzc2FnZSIsIm1hdGNoIiwiZXhlYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWZyZXNoR2VvTG9jYXRpb25DYWNoZSIsInRpbWVvdXRNcyIsImxvZ2NhdE1vbml0b3IiLCJtb25pdG9yaW5nUHJvbWlzZSIsImNtZCIsImFkYiIsImRlZmF1bHRBcmdzIiwiU3ViUHJvY2VzcyIsInBhdGgiLCJ0aW1lb3V0RXJyb3JNc2ciLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJldnQiLCJsaW5lcyIsInNvbWUiLCJsaW5lIiwieCIsImluY2x1ZGVzIiwic3RhcnQiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiaXNSdW5uaW5nIiwic3RvcCIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJydW5JbkltZUNvbnRleHQiLCJnZXRDbGlwYm9hcmQiLCJyZXRyaWV2ZUNsaXBib2FyZCIsInRyaW0iLCJnZXROb3RpZmljYXRpb25zIiwiZ2V0U21zTGlzdCIsIm1heCIsInR5cGVVbmljb2RlIiwidGV4dCIsInBsdXJhbGl6ZSIsImlucHV0VGV4dCIsImltYXAiLCJlbmNvZGUiLCJzY2FuTWVkaWEiLCJkZXN0aW5hdGlvbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VKc29uRGF0YSB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgaW1hcCB9IGZyb20gJ3V0ZjcnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkgPSAnLlNldHRpbmdzJztcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLldpRmlDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ud2lmaWA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5EYXRhQ29ubmVjdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmRhdGFfY29ubmVjdGlvbmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5BbmltYXRpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5hbmltYXRpb25gO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYWxlU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IExPQ0FMRV9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYWxlYDtcbmNvbnN0IExPQ0FUSU9OX1NFUlZJQ0UgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Mb2NhdGlvblNlcnZpY2VgO1xuY29uc3QgTE9DQVRJT05fUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYXRpb25JbmZvUmVjZWl2ZXJgO1xuY29uc3QgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYXRpb25gO1xuY29uc3QgQ0xJUEJPQVJEX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkNsaXBib2FyZFJlY2VpdmVyYDtcbmNvbnN0IENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5jbGlwYm9hcmQuZ2V0YDtcbmNvbnN0IE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubm90aWZpY2F0aW9uc2A7XG5jb25zdCBTTVNfTElTVF9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5TbXNSZWFkZXJgO1xuY29uc3QgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc21zLnJlYWRgO1xuY29uc3QgTUVESUFfU0NBTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5NZWRpYVNjYW5uZXJSZWNlaXZlcmA7XG5jb25zdCBNRURJQV9TQ0FOX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc2Nhbl9tZWRpYWA7XG5jb25zdCBBUFBJVU1fSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8uQXBwaXVtSU1FYDtcbmNvbnN0IFVOSUNPREVfSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8uVW5pY29kZUlNRWA7XG5jb25zdCBERUZBVUxUX1NBVEVMTElURVNfQ09VTlQgPSAxMjtcbmNvbnN0IERFRkFVTFRfQUxUSVRVREUgPSAwLjA7XG5jb25zdCBMT0NBVElPTl9UUkFDS0VSX1RBRyA9ICdMb2NhdGlvblRyYWNrZXInO1xuY29uc3QgR1BTX0NBQ0hFX1JFRlJFU0hFRF9MT0dTID0gW1xuICAnVGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIFBsYXkgU2VydmljZXMnLFxuICAnVGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIExvY2F0aW9uIE1hbmFnZXInXG5dO1xuXG5jb25zdCBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiA9IC9kYXRhPVwiKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcIi87XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIGFwcCBoYXMgc3RhcnRlZFxuICovXG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgYXBwbGljYXRpb24gaXMgcnVubmluZ1xuICogYW5kIHN0YXJ0cyBpdCBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge1NldHRpbmdzQXBwU3RhcnR1cE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBBcHBpdW0gU2V0dGluZ3MgaGFzIGZhaWxlZCB0byBzdGFydFxuICogQHJldHVybnMge0FEQn0gc2VsZiBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAqL1xuY29tbWFuZHMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3RhcnRpbmcgQXBwaXVtIFNldHRpbmdzIGFwcCcpO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnN0YXJ0QXBwKHtcbiAgICBwa2c6IFNFVFRJTkdTX0hFTFBFUl9JRCxcbiAgICBhY3Rpdml0eTogU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFksXG4gICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgIHdhaXRGb3JMYXVuY2g6IGZhbHNlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfSUQpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIFNldHRpbmdzIGFwcCBpcyBub3QgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIFdpRmkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICd3aWZpJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIERhdGEgdHJhbnNmZXIgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldERhdGFTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldERhdGFTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICdkYXRhJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIGFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKiBBbmltYXRpb24gb24gdGhlIGRldmljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZ2xvYmFsIHByb3BlcnRpZXM6XG4gKiBbQU5JTUFUT1JfRFVSQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI0FOSU1BVE9SX0RVUkFUSU9OX1NDQUxFfSxcbiAqIFtUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEV9LFxuICogW1dJTkRPV19BTklNQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI1dJTkRPV19BTklNQVRJT05fU0NBTEV9LlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgdGhpcyBwcm9wZXJ0aWVzIHRvIDAuMCB0byBkaXNhYmxlICgxLjAgdG8gZW5hYmxlKSBhbmltYXRpb24uXG4gKlxuICogVHVybmluZyBvZmYgYW5pbWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCB0byBpbXByb3ZlIHN0YWJpbGl0eVxuICogYW5kIHJlZHVjZSB0ZXN0cyBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKi9cbmNvbW1hbmRzLnNldEFuaW1hdGlvblN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0QW5pbWF0aW9uU3RhdGUgKG9uKSB7XG4gIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIEFOSU1BVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gIF0pO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGxvY2FsZSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuIERvbid0IG5lZWQgdG8gcmVib290IHRoZSBkZXZpY2UgYWZ0ZXIgY2hhbmdpbmcgdGhlIGxvY2FsZS5cbiAqIFRoaXMgbWV0aG9kIHNldHMgYW4gYXJiaXRyYXJ5IGxvY2FsZSBmb2xsb3dpbmc6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCNMb2NhbGUoamF2YS5sYW5nLlN0cmluZywlMjBqYXZhLmxhbmcuU3RyaW5nKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBlLmcuIGVuLCBqYVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBlLmcuIFVTLCBKUFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIGUuZy4gSGFucyBpbiBgemgtSGFucy1DTmBcbiAqL1xuY29tbWFuZHMuc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLWEnLCBMT0NBTEVfU0VUVElOR19BQ1RJT04sXG4gICAgJy1uJywgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgJy0tZXMnLCAnbGFuZycsIGxhbmd1YWdlLnRvTG93ZXJDYXNlKCksXG4gICAgJy0tZXMnLCAnY291bnRyeScsIGNvdW50cnkudG9VcHBlckNhc2UoKVxuICBdO1xuXG4gIGlmIChzY3JpcHQpIHtcbiAgICBwYXJhbXMucHVzaCgnLS1lcycsICdzY3JpcHQnLCBzY3JpcHQpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zaGVsbChwYXJhbXMpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2F0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IGxvbmdpdHVkZSAtIFZhbGlkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbGF0aXR1ZGUgLSBWYWxpZCBsYXRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGFsdGl0dWRlIC0gVmFsaWQgYWx0aXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzYXRlbGxpdGVzIFsxMl0gLSBOdW1iZXIgb2Ygc2F0ZWxsaXRlcyBiZWluZyB0cmFja2VkICgxLTEyKS5cbiAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBvbiByZWFsIGRldmljZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzcGVlZCAtIFZhbGlkIHNwZWVkIHZhbHVlLlxuICogU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLjAgbWV0ZXJzL3NlY29uZCBmb3IgcmVhbCBkZXZpY2VzIG9yIDAuMCBrbm90c1xuICogZm9yIGVtdWxhdG9ycy5cbiAqL1xuXG4vKipcbiAqIEVtdWxhdGUgZ2VvbG9jYXRpb24gY29vcmRpbmF0ZXMgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7TG9jYXRpb259IGxvY2F0aW9uIC0gTG9jYXRpb24gb2JqZWN0LiBUaGUgYGFsdGl0dWRlYCB2YWx1ZSBpcyBpZ25vcmVkXG4gKiB3aGlsZSBtb2NraW5nIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgY29uc3QgZm9ybWF0TG9jYXRpb25WYWx1ZSA9ICh2YWx1ZU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKGxvY2F0aW9uW3ZhbHVlTmFtZV0pKSB7XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQobG9jYXRpb25bdmFsdWVOYW1lXSk7XG4gICAgaWYgKCFpc05hTihmbG9hdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke18uY2VpbChmbG9hdFZhbHVlLCA1KX1gO1xuICAgIH1cbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlTmFtZX0gaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBmbG9hdCBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7bG9jYXRpb25bdmFsdWVOYW1lXX0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGxvbmdpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xvbmdpdHVkZScpO1xuICBjb25zdCBsYXRpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xhdGl0dWRlJyk7XG4gIGNvbnN0IGFsdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnYWx0aXR1ZGUnLCBmYWxzZSk7XG4gIGNvbnN0IHNwZWVkID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnc3BlZWQnLCBmYWxzZSk7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgY29uc3QgYXJncyA9IFtsb25naXR1ZGUsIGxhdGl0dWRlXTtcbiAgICBpZiAoIV8uaXNOaWwoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBjb25zdCBzYXRlbGxpdGVzID0gcGFyc2VJbnQobG9jYXRpb24uc2F0ZWxsaXRlcywgMTApO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHNhdGVsbGl0ZXMpICYmIHNhdGVsbGl0ZXMgPiAwICYmIHNhdGVsbGl0ZXMgPD0gMTIpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfQUxUSVRVREV9YCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goYCR7c2F0ZWxsaXRlc31gKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzTmlsKHNwZWVkKSkge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfU0FURUxMSVRFU19DT1VOVH1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChzcGVlZCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVzZXRUZWxuZXRBdXRoVG9rZW4oKTtcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAnZ2VvJywgJ2ZpeCcsIC4uLmFyZ3NdKTtcbiAgICAvLyBBIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwNjE4MFxuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uKGFyZ3MubWFwKChhcmcpID0+IGFyZy5yZXBsYWNlKCcuJywgJywnKSkpXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydHNlcnZpY2UnLFxuICAgICAgJy1lJywgJ2xvbmdpdHVkZScsIGxvbmdpdHVkZSxcbiAgICAgICctZScsICdsYXRpdHVkZScsIGxhdGl0dWRlLFxuICAgIF07XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ2FsdGl0dWRlJywgYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShzcGVlZCkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnc3BlZWQnLCBzcGVlZCk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChMT0NBVElPTl9TRVJWSUNFKTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBjYWNoZWQgR1BTIGxvY2F0aW9uIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtMb2NhdGlvbn0gVGhlIGN1cnJlbnQgbG9jYXRpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBsb2NhdGlvbiBjYW5ub3QgYmUgcmV0cmlldmVkXG4gKi9cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLW4nLCBMT0NBVElPTl9SRUNFSVZFUixcbiAgICAgICctYScsIExPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGdlbyBjb29yZGluYXRlcyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUgYW5kIGhhcyBsb2NhdGlvbiBwZXJtaXNzaW9ucy4gQWxzbyB0aGUgbG9jYXRpb24gYCArXG4gICAgICBgc2VydmljZXMgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBkZXZpY2UuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5zdGRlcnIgfHwgZXJyLnN0ZG91dCB8fCBlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gR1BTX0NPT1JESU5BVEVTX1BBVFRFUk4uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBsb2NhdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0ge1xuICAgIGxhdGl0dWRlOiBtYXRjaFsxXSxcbiAgICBsb25naXR1ZGU6IG1hdGNoWzJdLFxuICAgIGFsdGl0dWRlOiBtYXRjaFszXSxcbiAgfTtcbiAgbG9nLmRlYnVnKGBHb3QgZ2VvIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhbiBhc3luYyByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIEdQUyBjYWNoZS5cbiAqIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXNcbiAqIEdvb2dsZSBQbGF5IFNlcnZpY2VzIGluc3RhbGxlZC4gSW4gY2FzZSB0aGUgdmFuaWxsYVxuICogTG9jYXRpb25NYW5hZ2VyIGlzIHVzZWQgdGhlIGRldmljZSBBUEkgbGV2ZWwgbXVzdCBiZSBhdFxuICogdmVyc2lvbiAzMCAoQW5kcm9pZCBSKSBvciBoaWdoZXIuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRNcyBbMjAwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIGJsb2NrIHVudGlsIEdQUyBjYWNoZSBpcyByZWZyZXNoZWQuIFByb3ZpZGluZyB6ZXJvIG9yIGEgbmVnYXRpdmVcbiAqIHZhbHVlIHRvIGl0IHNraXBzIHdhaXRpbmcgY29tcGxldGVseS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIEdQUyBjYWNoZSBjYW5ub3QgYmUgcmVmcmVzaGVkLlxuICovXG5jb21tYW5kcy5yZWZyZXNoR2VvTG9jYXRpb25DYWNoZSA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlICh0aW1lb3V0TXMgPSAyMDAwMCkge1xuICBsZXQgbG9nY2F0TW9uaXRvcjtcbiAgbGV0IG1vbml0b3JpbmdQcm9taXNlO1xuXG4gIGlmICh0aW1lb3V0TXMgPiAwKSB7XG4gICAgY29uc3QgY21kID0gW1xuICAgICAgLi4udGhpcy5hZGIuZGVmYXVsdEFyZ3MsXG4gICAgICAnbG9nY2F0JywgJy1zJywgTE9DQVRJT05fVFJBQ0tFUl9UQUcsXG4gICAgXTtcbiAgICBsb2djYXRNb25pdG9yID0gbmV3IFN1YlByb2Nlc3ModGhpcy5hZGIucGF0aCwgY21kKTtcbiAgICBjb25zdCB0aW1lb3V0RXJyb3JNc2cgPSBgVGhlIEdQUyBjYWNoZSBoYXMgbm90IGJlZW4gcmVmcmVzaGVkIHdpdGhpbiAke3RpbWVvdXRNc31tcyB0aW1lb3V0LiBgICtcbiAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXMgQXBwaXVtIFNldHRpbmdzIGFwcCBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuIGAgK1xuICAgICAgYEFsc28sIGl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGRldmljZSBoYXMgR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkIG9yIGlzIHJ1bm5pbmcgYCArXG4gICAgICBgQW5kcm9pZCAxMCsgb3RoZXJ3aXNlLmA7XG4gICAgbW9uaXRvcmluZ1Byb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSksIHRpbWVvdXRNcyk7XG5cbiAgICAgIGxvZ2NhdE1vbml0b3Iub24oJ2V4aXQnLCAoKSA9PiByZWplY3QobmV3IEVycm9yKHRpbWVvdXRFcnJvck1zZykpKTtcbiAgICAgIFsnbGluZXMtc3RkZXJyJywgJ2xpbmVzLXN0ZG91dCddLm1hcCgoZXZ0KSA9PiBsb2djYXRNb25pdG9yLm9uKGV2dCwgKGxpbmVzKSA9PiB7XG4gICAgICAgIGlmIChsaW5lcy5zb21lKChsaW5lKSA9PiBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1Muc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdGFydCgwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICAgICctLWV6JywgJ2ZvcmNlVXBkYXRlJywgJ3RydWUnLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWZyZXNoIHRoZSBHUFMgY2FjaGUgb24gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKGxvZ2NhdE1vbml0b3IgJiYgbW9uaXRvcmluZ1Byb21pc2UpIHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXRNc31tcyBmb3IgdGhlIEdQUyBjYWNoZSB0byBiZSByZWZyZXNoZWRgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbW9uaXRvcmluZ1Byb21pc2U7XG4gICAgICBsb2cuaW5mbyhgVGhlIEdQUyBjYWNoZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVmcmVzaGVkIGFmdGVyIGAgK1xuICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGxvZ2NhdE1vbml0b3IuaXNSdW5uaW5nKSB7XG4gICAgICAgIGF3YWl0IGxvZ2NhdE1vbml0b3Iuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuaW5mbygnVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlIGhhcyBiZWVuIHNlbnQuIFNraXBwaW5nIHdhaXRpbmcgZm9yIGl0cyByZXN1bHQuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUGVyZm9ybXMgdGhlIGdpdmVuIGVkaXRvciBhY3Rpb24gb24gdGhlIGZvY3VzZWQgaW5wdXQgZmllbGQuXG4gKiBUaGlzIG1ldGhvZCByZXF1aXJlcyBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLlxuICogTm8gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGFjdGlvbi5cbiAqIFlvdSBtdXN0IGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0IGlmIHNvbWV0aGluZyBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBhY3Rpb24gLSBFaXRoZXIgYWN0aW9uIGNvZGUgb3IgbmFtZS4gVGhlIGZvbGxvd2luZyBhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgYXJlIHN1cHBvcnRlZDogYG5vcm1hbCwgdW5zcGVjaWZpZWQsIG5vbmUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLCBzZWFyY2gsIHNlbmQsIG5leHQsIGRvbmUsIHByZXZpb3VzYFxuICovXG5jb21tYW5kcy5wZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUVkaXRvckFjdGlvbiAoYWN0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBlZGl0b3IgYWN0aW9uOiAke2FjdGlvbn1gKTtcbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSxcbiAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGAvJHthY3Rpb259L2BdKSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBkZXZpY2UncyBjbGlwYm9hcmQuXG4gKiBUaGUgbWV0aG9kIHdvcmtzIGZvciBBbmRyb2lkIGJlbG93IGFuZCBhYm92ZSAyOS5cbiAqIEl0IHRlbW9yYXJpbHkgZW5mb3JjZXMgdGhlIElNRSBzZXR0aW5nIGluIG9yZGVyIHRvIHdvcmthcm91bmRcbiAqIHNlY3VyaXR5IGxpbWl0YXRpb25zIGlmIG5lZWRlZC5cbiAqIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgaWYgQXBwaXVtIFNldHRpbmdzIHYuIDIuMTUrIGlzIGluc3RhbGxlZFxuICogb24gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBtYWluIGNsaXBib2FyZCBhc1xuICogYmFzZTY0LWVuY29kZWQgc3RyaW5nIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY2xpcGJvYXJkIGlzIGVtcHR5XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSBnZXR0aW5nIHRoZVxuICogY2xpcGJvYXJkIGNvbnRhbnRcbiAqL1xuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkICgpIHtcbiAgbG9nLmRlYnVnKCdHZXR0aW5nIHRoZSBjbGlwYm9hcmQgY29udGVudCcpO1xuICBjb25zdCByZXRyaWV2ZUNsaXBib2FyZCA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIENMSVBCT0FSRF9SRUNFSVZFUixcbiAgICAnLWEnLCBDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTixcbiAgXSk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+PSAyOSlcbiAgICAgID8gKGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KEFQUElVTV9JTUUsIHJldHJpZXZlQ2xpcGJvYXJkKSlcbiAgICAgIDogKGF3YWl0IHJldHJpZXZlQ2xpcGJvYXJkKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSB0aGUgY3VycmVudCBjbGlwYm9hcmQgY29udGVudCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSAvZGF0YT1cIihbXlwiXSopXCIvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBhY3R1YWwgY2xpYm9hcmQgY29udGVudCBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgcmV0dXJuIF8udHJpbShtYXRjaFsxXSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBBbmRyb2lkIG5vdGlmaWNhdGlvbnMgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBBcHBpdW0gU2V0dGluZ3MgYXBwIGl0c2VsZiBtdXN0IGJlICptYW51YWxseSogZ3JhbnRlZCB0byBhY2Nlc3Mgbm90aWZpY2F0aW9uc1xuICogdW5kZXIgZGV2aWNlIFNldHRpbmdzIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBmZWF0dXJlIHdvcmtpbmcuXG4gKiBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIGtlZXBzIGFsbCB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbnMgcGx1c1xuICogbm90aWZpY2F0aW9ucyB0aGF0IGFwcGVhcmVkIHdoaWxlIGl0IHdhcyBydW5uaW5nIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gKiBidXQgbm8gbW9yZSB0aGFuIDEwMCBpdGVtcyBhbHRvZ2V0aGVyLiBOZXdseSBhcHBlYXJlZCBub3RpZmljYXRpb25zXG4gKiBhcmUgYWx3YXlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBub3RpZmljYXRpb25zIGFycmF5LlxuICogVGhlIGBpc1JlbW92ZWRgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBmb3Igbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb25cbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmh0bWxcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF2YWlsYWJsZSBub3RpZmljYXRpb24gcHJvcGVydGllcyBhbmQgdGhlaXIgdmFsdWVzLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJzdGF0dXNCYXJOb3RpZmljYXRpb25zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaXNHcm91cFwiOmZhbHNlLFxuICogICAgICAgXCJwYWNrYWdlTmFtZVwiOlwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgICBcImlzQ2xlYXJhYmxlXCI6ZmFsc2UsXG4gKiAgICAgICBcImlzT25nb2luZ1wiOnRydWUsXG4gKiAgICAgICBcImlkXCI6MSxcbiAqICAgICAgIFwidGFnXCI6bnVsbCxcbiAqICAgICAgIFwibm90aWZpY2F0aW9uXCI6e1xuICogICAgICAgICBcInRpdGxlXCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUaXRsZVwiOlwiQXBwaXVtIFNldHRpbmdzXCIsXG4gKiAgICAgICAgIFwidGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGV4dFwiOlwiS2VlcCB0aGlzIHNlcnZpY2UgcnVubmluZywgc28gQXBwaXVtIGZvciBBbmRyb2lkIGNhbiBwcm9wZXJseSBpbnRlcmFjdCB3aXRoIHNldmVyYWwgc3lzdGVtIEFQSXNcIixcbiAqICAgICAgICAgXCJ0aWNrZXJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJzdWJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJpbmZvVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwidGVtcGxhdGVcIjpcImFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbiRCaWdUZXh0U3R5bGVcIlxuICogICAgICAgfSxcbiAqICAgICAgIFwidXNlckhhbmRsZVwiOjAsXG4gKiAgICAgICBcImdyb3VwS2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwib3ZlcnJpZGVHcm91cEtleVwiOm51bGwsXG4gKiAgICAgICBcInBvc3RUaW1lXCI6MTU3Njg1MzUxODg1MCxcbiAqICAgICAgIFwia2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwiaXNSZW1vdmVkXCI6ZmFsc2VcbiAqICAgICB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBub3RpZmljYXRpb25zIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbnMgKCkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgbm90aWZpY2F0aW9ucycpO1xuICAvLyBTb21laG93IHByb3ZpZGluZyB0aGUgYC1uYCBhcmcgdG8gdGhlIGBhbWAgdW5kZXJuZWF0aFxuICAvLyByZW5kZXJzIHRoZSBicm9hZGNhc3QgdG8gZmFpbCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZVxuICAvLyBBcHBpdW0gU2V0dGluZ3MgYXBwLiBUaGlzIG9ubHkgaGFwcGVucyB0byB0aGUgbm90aWZpY2F0aW9uc1xuICAvLyByZWNlaXZlclxuICBhd2FpdCB0aGlzLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1hJywgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBub3RpZmljYXRpb25zIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdub3RpZmljYXRpb25zJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHRoZSBtb3N0IHJlY2VudCBTTVNcbiAqIHByb3BlcnRpZXMgbGlzdCB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIE1lc3NhZ2VzIGFyZSBzb3J0ZWQgYnkgZGF0ZSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpdGVtc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIyXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjQyMjIwM1wiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZTJcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIxXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjM4Mjc0MFwiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZVxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwidG90YWxcIjoyXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgU01TIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0U21zTGlzdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNtc0xpc3QgKG9wdHMgPSB7fSkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgdGhlIHJlY2VudCBTTVMgbWVzc2FnZXMnKTtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBTTVNfTElTVF9SRUNFSVZFUixcbiAgICAnLWEnLCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdO1xuICBpZiAob3B0cy5tYXgpIHtcbiAgICBhcmdzLnB1c2goJy0tZXMnLCAnbWF4Jywgb3B0cy5tYXgpO1xuICB9XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgU01TIGxpc3QgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ1NNUyBsaXN0Jyk7XG59O1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgc3RyaW5nIHRvIHR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKi9cbmNvbW1hbmRzLnR5cGVVbmljb2RlID0gYXN5bmMgZnVuY3Rpb24gdHlwZVVuaWNvZGUgKHRleHQpIHtcbiAgaWYgKF8uaXNOaWwodGV4dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0ZXh0ID0gYCR7dGV4dH1gO1xuICBsb2cuZGVidWcoYFR5cGluZyAke3V0aWwucGx1cmFsaXplKCdjaGFyYWN0ZXInLCB0ZXh0Lmxlbmd0aCwgdHJ1ZSl9YCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChcbiAgICBVTklDT0RFX0lNRSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5pbnB1dFRleHQoaW1hcC5lbmNvZGUodGV4dCkpXG4gICk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyByZWN1cnNpdmUgbWVkaWEgc2NhbiBhdCB0aGUgZ2l2ZW4gZGVzdGluYXRpb24uXG4gKiBBbGwgc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgaXRlbXMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBkZXZpY2Unc1xuICogbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gRmlsZS9mb2xkZXIgcGF0aCBvbiB0aGUgcmVtb3RlIGRldmljZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBlcnJvciBieSBzY2FubmluZy5cbiAqL1xuY29tbWFuZHMuc2Nhbk1lZGlhID0gYXN5bmMgZnVuY3Rpb24gc2Nhbk1lZGlhIChkZXN0aW5hdGlvbikge1xuICBsb2cuZGVidWcoYFNjYW5uaW5nICcke2Rlc3RpbmF0aW9ufScgZm9yIG1lZGlhIGZpbGVzYCk7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIE1FRElBX1NDQU5fUkVDRUlWRVIsXG4gICAgJy1hJywgTUVESUFfU0NBTl9BQ1RJT04sXG4gICAgJy0tZXMnLCAncGF0aCcsIGRlc3RpbmF0aW9uXG4gIF0pO1xuICBpZiAoIV8uaW5jbHVkZXMob3V0cHV0LCAncmVzdWx0PS0xJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1lZGlhIGNvdWxkIGJlIHNjYW5uZWQgYXQgJyR7ZGVzdGluYXRpb259Jy4gYCArXG4gICAgICBgQ2hlY2sgdGhlIGRldmljZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMuYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLG9CQUEzQjtBQUNBLE1BQU1DLDZCQUE2QixHQUFHLFdBQXRDO0FBQ0EsTUFBTUMsZ0NBQWdDLEdBQUksR0FBRUYsa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1HLDhCQUE4QixHQUFJLEdBQUVILGtCQUFtQixPQUE3RDtBQUNBLE1BQU1JLGdDQUFnQyxHQUFJLEdBQUVKLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNSyw4QkFBOEIsR0FBSSxHQUFFTCxrQkFBbUIsa0JBQTdEO0FBQ0EsTUFBTU0sMEJBQTBCLEdBQUksR0FBRU4sa0JBQW1CLHNDQUF6RDtBQUNBLE1BQU1PLHdCQUF3QixHQUFJLEdBQUVQLGtCQUFtQixZQUF2RDtBQUNBLE1BQU1RLHVCQUF1QixHQUFJLEdBQUVSLGtCQUFtQixtQ0FBdEQ7QUFDQSxNQUFNUyxxQkFBcUIsR0FBSSxHQUFFVCxrQkFBbUIsU0FBcEQ7QUFDQSxNQUFNVSxnQkFBZ0IsR0FBSSxHQUFFVixrQkFBbUIsbUJBQS9DO0FBQ0EsTUFBTVcsaUJBQWlCLEdBQUksR0FBRVgsa0JBQW1CLGtDQUFoRDtBQUNBLE1BQU1ZLHlCQUF5QixHQUFJLEdBQUVaLGtCQUFt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
362
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyIsIm5hbWVzIjpbIlNFVFRJTkdTX0hFTFBFUl9JRCIsIlNFVFRJTkdTX0hFTFBFUl9NQUlOX0FDVElWSVRZIiwiV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04iLCJEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OIiwiTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIiLCJMT0NBTEVfU0VUVElOR19BQ1RJT04iLCJMT0NBVElPTl9TRVJWSUNFIiwiTE9DQVRJT05fUkVDRUlWRVIiLCJMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OIiwiQ0xJUEJPQVJEX1JFQ0VJVkVSIiwiQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04iLCJOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04iLCJTTVNfTElTVF9SRUNFSVZFUiIsIlNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04iLCJNRURJQV9TQ0FOX1JFQ0VJVkVSIiwiTUVESUFfU0NBTl9BQ1RJT04iLCJBUFBJVU1fSU1FIiwiVU5JQ09ERV9JTUUiLCJERUZBVUxUX1NBVEVMTElURVNfQ09VTlQiLCJERUZBVUxUX0FMVElUVURFIiwiTE9DQVRJT05fVFJBQ0tFUl9UQUciLCJHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MiLCJHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiIsImNvbW1hbmRzIiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsIm9wdHMiLCJwcm9jZXNzRXhpc3RzIiwibG9nIiwiZGVidWciLCJ0aW1lb3V0Iiwic3RhcnRBcHAiLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsIndhaXRGb3JMYXVuY2giLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsInN0ZGVyciIsInN0ZG91dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUiLCJ0aW1lb3V0TXMiLCJsb2djYXRNb25pdG9yIiwibW9uaXRvcmluZ1Byb21pc2UiLCJjbWQiLCJhZGIiLCJkZWZhdWx0QXJncyIsIlN1YlByb2Nlc3MiLCJwYXRoIiwidGltZW91dEVycm9yTXNnIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiZXZ0IiwibGluZXMiLCJzb21lIiwibGluZSIsIngiLCJpbmNsdWRlcyIsInN0YXJ0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImluZm8iLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImlzUnVubmluZyIsInN0b3AiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwicnVuSW5JbWVDb250ZXh0IiwiZ2V0Q2xpcGJvYXJkIiwicmV0cmlldmVDbGlwYm9hcmQiLCJ0cmltIiwiZ2V0Tm90aWZpY2F0aW9ucyIsInBhcnNlSnNvbkRhdGEiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcbmNvbnN0IExPQ0FUSU9OX1RSQUNLRVJfVEFHID0gJ0xvY2F0aW9uVHJhY2tlcic7XG5jb25zdCBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MgPSBbXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gUGxheSBTZXJ2aWNlcycsXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gTG9jYXRpb24gTWFuYWdlcidcbl07XG5cbmNvbnN0IEdQU19DT09SRElOQVRFU19QQVRURVJOID0gL2RhdGE9XCIoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVwiLztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgYXBwIGhhcyBzdGFydGVkXG4gKi9cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgQXBwaXVtIFNldHRpbmdzIGhlbHBlciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG4gKiBhbmQgc3RhcnRzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIEFwcGl1bSBTZXR0aW5ncyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QURCfSBzZWxmIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICovXG5jb21tYW5kcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCAob3B0cyA9IHt9KSB7XG4gIGlmIChhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdGFydGluZyBBcHBpdW0gU2V0dGluZ3MgYXBwJyk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgfSA9IG9wdHM7XG4gIGF3YWl0IHRoaXMuc3RhcnRBcHAoe1xuICAgIHBrZzogU0VUVElOR1NfSEVMUEVSX0lELFxuICAgIGFjdGl2aXR5OiBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSxcbiAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgc3RvcEFwcDogZmFsc2UsXG4gICAgd2FpdEZvckxhdW5jaDogZmFsc2UsXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCksIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcHBpdW0gU2V0dGluZ3MgYXBwIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgV2lGaSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ3dpZmknLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgRGF0YSB0cmFuc2ZlciBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0RGF0YVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGF0YVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ2RhdGEnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgYW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqIEFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBnbG9iYWwgcHJvcGVydGllczpcbiAqIFtBTklNQVRPUl9EVVJBVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjQU5JTUFUT1JfRFVSQVRJT05fU0NBTEV9LFxuICogW1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRX0sXG4gKiBbV0lORE9XX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjV0lORE9XX0FOSU1BVElPTl9TQ0FMRX0uXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCB0aGlzIHByb3BlcnRpZXMgdG8gMC4wIHRvIGRpc2FibGUgKDEuMCB0byBlbmFibGUpIGFuaW1hdGlvbi5cbiAqXG4gKiBUdXJuaW5nIG9mZiBhbmltYXRpb24gbWlnaHQgYmUgdXNlZnVsIHRvIGltcHJvdmUgc3RhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIHRlc3RzIGV4ZWN1dGlvbiB0aW1lLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqL1xuY29tbWFuZHMuc2V0QW5pbWF0aW9uU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRBbmltYXRpb25TdGF0ZSAob24pIHtcbiAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgbG9jYWxlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC4gRG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIGRldmljZSBhZnRlciBjaGFuZ2luZyB0aGUgbG9jYWxlLlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbiBhcmJpdHJhcnkgbG9jYWxlIGZvbGxvd2luZzpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sI0xvY2FsZShqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5TdHJpbmcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIGUuZy4gZW4sIGphXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIGUuZy4gVVMsIEpQXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gZS5nLiBIYW5zIGluIGB6aC1IYW5zLUNOYFxuICovXG5jb21tYW5kcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgcGFyYW1zID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIExPQ0FMRV9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdsYW5nJywgbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSxcbiAgICAnLS1lcycsICdjb3VudHJ5JywgY291bnRyeS50b1VwcGVyQ2FzZSgpXG4gIF07XG5cbiAgaWYgKHNjcmlwdCkge1xuICAgIHBhcmFtcy5wdXNoKCctLWVzJywgJ3NjcmlwdCcsIHNjcmlwdCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnNoZWxsKHBhcmFtcyk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbG9uZ2l0dWRlIC0gVmFsaWQgbG9uZ2l0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsYXRpdHVkZSAtIFZhbGlkIGxhdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWx0aXR1ZGUgLSBWYWxpZCBhbHRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNhdGVsbGl0ZXMgWzEyXSAtIE51bWJlciBvZiBzYXRlbGxpdGVzIGJlaW5nIHRyYWNrZWQgKDEtMTIpLlxuICogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIHJlYWwgZGV2aWNlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNwZWVkIC0gVmFsaWQgc3BlZWQgdmFsdWUuXG4gKiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuMCBtZXRlcnMvc2Vjb25kIGZvciByZWFsIGRldmljZXMgb3IgMC4wIGtub3RzXG4gKiBmb3IgZW11bGF0b3JzLlxuICovXG5cbi8qKlxuICogRW11bGF0ZSBnZW9sb2NhdGlvbiBjb29yZGluYXRlcyBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbiBvYmplY3QuIFRoZSBgYWx0aXR1ZGVgIHZhbHVlIGlzIGlnbm9yZWRcbiAqIHdoaWxlIG1vY2tpbmcgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBjb25zdCBmb3JtYXRMb2NhdGlvblZhbHVlID0gKHZhbHVlTmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUobG9jYXRpb25bdmFsdWVOYW1lXSkpIHtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChsb2NhdGlvblt2YWx1ZU5hbWVdKTtcbiAgICBpZiAoIWlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7Xy5jZWlsKGZsb2F0VmFsdWUsIDUpfWA7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGZsb2F0IG51bWJlci4gYCArXG4gICAgICAgIGAnJHtsb2NhdGlvblt2YWx1ZU5hbWVdfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgbG9uZ2l0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbG9uZ2l0dWRlJyk7XG4gIGNvbnN0IGxhdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbGF0aXR1ZGUnKTtcbiAgY29uc3QgYWx0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdhbHRpdHVkZScsIGZhbHNlKTtcbiAgY29uc3Qgc3BlZWQgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdzcGVlZCcsIGZhbHNlKTtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICBjb25zdCBhcmdzID0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdO1xuICAgIGlmICghXy5pc05pbChhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaChhbHRpdHVkZSk7XG4gICAgfVxuICAgIGNvbnN0IHNhdGVsbGl0ZXMgPSBwYXJzZUludChsb2NhdGlvbi5zYXRlbGxpdGVzLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oc2F0ZWxsaXRlcykgJiYgc2F0ZWxsaXRlcyA+IDAgJiYgc2F0ZWxsaXRlcyA8PSAxMikge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChgJHtzYXRlbGxpdGVzfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNOaWwoc3BlZWQpKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNCkge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9TQVRFTExJVEVTX0NPVU5UfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKHNwZWVkKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uYXJnc10pO1xuICAgIC8vIEEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MTgwXG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi4oYXJncy5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoJy4nLCAnLCcpKSldKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgJ3N0YXJ0c2VydmljZScsXG4gICAgICAnLWUnLCAnbG9uZ2l0dWRlJywgbG9uZ2l0dWRlLFxuICAgICAgJy1lJywgJ2xhdGl0dWRlJywgbGF0aXR1ZGUsXG4gICAgXTtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnYWx0aXR1ZGUnLCBhbHRpdHVkZSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNwZWVkKSkge1xuICAgICAgYXJncy5wdXNoKCctZScsICdzcGVlZCcsIHNwZWVkKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKExPQ0FUSU9OX1NFUlZJQ0UpO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGNhY2hlZCBHUFMgbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTi5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGxvY2F0aW9uIHZhbHVlcyBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgbGF0aXR1ZGU6IG1hdGNoWzFdLFxuICAgIGxvbmdpdHVkZTogbWF0Y2hbMl0sXG4gICAgYWx0aXR1ZGU6IG1hdGNoWzNdLFxuICB9O1xuICBsb2cuZGVidWcoYEdvdCBnZW8gY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobG9jYXRpb24pfWApO1xuICByZXR1cm4gbG9jYXRpb247XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGFzeW5jIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlLlxuICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhc1xuICogR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkLiBJbiBjYXNlIHRoZSB2YW5pbGxhXG4gKiBMb2NhdGlvbk1hbmFnZXIgaXMgdXNlZCB0aGUgZGV2aWNlIEFQSSBsZXZlbCBtdXN0IGJlIGF0XG4gKiB2ZXJzaW9uIDMwIChBbmRyb2lkIFIpIG9yIGhpZ2hlci5cbiAqXG4gKiBAcGFyYW0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgR1BTIGNhY2hlIGNhbm5vdCBiZSByZWZyZXNoZWQuXG4gKi9cbmNvbW1hbmRzLnJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUgKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gIGxldCBsb2djYXRNb25pdG9yO1xuICBsZXQgbW9uaXRvcmluZ1Byb21pc2U7XG5cbiAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICdsb2djYXQnLCAnLXMnLCBMT0NBVElPTl9UUkFDS0VSX1RBRyxcbiAgICBdO1xuICAgIGxvZ2NhdE1vbml0b3IgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmFkYi5wYXRoLCBjbWQpO1xuICAgIGNvbnN0IHRpbWVvdXRFcnJvck1zZyA9IGBUaGUgR1BTIGNhY2hlIGhhcyBub3QgYmVlbiByZWZyZXNoZWQgd2l0aGluICR7dGltZW91dE1zfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhcyBBcHBpdW0gU2V0dGluZ3MgYXBwIGluc3RhbGxlZCBhbmQgcnVubmluZy4gYCArXG4gICAgICBgQWxzbywgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZGV2aWNlIGhhcyBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQgb3IgaXMgcnVubmluZyBgICtcbiAgICAgIGBBbmRyb2lkIDEwKyBvdGhlcndpc2UuYDtcbiAgICBtb25pdG9yaW5nUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aW1lb3V0RXJyb3JNc2cpKSwgdGltZW91dE1zKTtcblxuICAgICAgbG9nY2F0TW9uaXRvci5vbignZXhpdCcsICgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSkpO1xuICAgICAgWydsaW5lcy1zdGRlcnInLCAnbGluZXMtc3Rkb3V0J10ubWFwKChldnQpID0+IGxvZ2NhdE1vbml0b3Iub24oZXZ0LCAobGluZXMpID0+IHtcbiAgICAgICAgaWYgKGxpbmVzLnNvbWUoKGxpbmUpID0+IEdQU19DQUNIRV9SRUZSRVNIRURfTE9HUy5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBhd2FpdCBsb2djYXRNb25pdG9yLnN0YXJ0KDApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1uJywgTE9DQVRJT05fUkVDRUlWRVIsXG4gICAgICAnLWEnLCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OLFxuICAgICAgJy0tZXonLCAnZm9yY2VVcGRhdGUnLCAndHJ1ZScsXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlZnJlc2ggdGhlIEdQUyBjYWNoZSBvbiB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlIGFuZCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbnMuIEFsc28gdGhlIGxvY2F0aW9uIGAgK1xuICAgICAgYHNlcnZpY2VzIG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAobG9nY2F0TW9uaXRvciAmJiBtb25pdG9yaW5nUHJvbWlzZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGltZW91dE1zfW1zIGZvciB0aGUgR1BTIGNhY2hlIHRvIGJlIHJlZnJlc2hlZGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtb25pdG9yaW5nUHJvbWlzZTtcbiAgICAgIGxvZy5pbmZvKGBUaGUgR1BTIGNhY2hlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAobG9nY2F0TW9uaXRvci5pc1J1bm5pbmcpIHtcbiAgICAgICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKCdUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUgaGFzIGJlZW4gc2VudC4gU2tpcHBpbmcgd2FpdGluZyBmb3IgaXRzIHJlc3VsdC4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGRldmljZSdzIGNsaXBib2FyZC5cbiAqIFRoZSBtZXRob2Qgd29ya3MgZm9yIEFuZHJvaWQgYmVsb3cgYW5kIGFib3ZlIDI5LlxuICogSXQgdGVtb3JhcmlseSBlbmZvcmNlcyB0aGUgSU1FIHNldHRpbmcgaW4gb3JkZXIgdG8gd29ya2Fyb3VuZFxuICogc2VjdXJpdHkgbGltaXRhdGlvbnMgaWYgbmVlZGVkLlxuICogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiBBcHBpdW0gU2V0dGluZ3Mgdi4gMi4xNSsgaXMgaW5zdGFsbGVkXG4gKiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIG1haW4gY2xpcGJvYXJkIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjbGlwYm9hcmQgaXMgZW1wdHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGdldHRpbmcgdGhlXG4gKiBjbGlwYm9hcmQgY29udGFudFxuICovXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiBnZXRDbGlwYm9hcmQgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgdGhlIGNsaXBib2FyZCBjb250ZW50Jyk7XG4gIGNvbnN0IHJldHJpZXZlQ2xpcGJvYXJkID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgQ0xJUEJPQVJEX1JFQ0VJVkVSLFxuICAgICctYScsIENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID49IDI5KVxuICAgICAgPyAoYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSwgcmV0cmlldmVDbGlwYm9hcmQpKVxuICAgICAgOiAoYXdhaXQgcmV0cmlldmVDbGlwYm9hcmQoKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGNsaXBib2FyZCBjb250ZW50IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKFteXCJdKilcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBjbGlib2FyZCBjb250ZW50IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0OiAke291dHB1dH1gKTtcbiAgfVxuICByZXR1cm4gXy50cmltKG1hdGNoWzFdKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIEFuZHJvaWQgbm90aWZpY2F0aW9ucyB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIEFwcGl1bSBTZXR0aW5ncyBhcHAgaXRzZWxmIG11c3QgYmUgKm1hbnVhbGx5KiBncmFudGVkIHRvIGFjY2VzcyBub3RpZmljYXRpb25zXG4gKiB1bmRlciBkZXZpY2UgU2V0dGluZ3MgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGZlYXR1cmUgd29ya2luZy5cbiAqIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIga2VlcHMgYWxsIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9ucyBwbHVzXG4gKiBub3RpZmljYXRpb25zIHRoYXQgYXBwZWFyZWQgd2hpbGUgaXQgd2FzIHJ1bm5pbmcgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAqIGJ1dCBubyBtb3JlIHRoYW4gMTAwIGl0ZW1zIGFsdG9nZXRoZXIuIE5ld2x5IGFwcGVhcmVkIG5vdGlmaWNhdGlvbnNcbiAqIGFyZSBhbHdheXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIG5vdGlmaWNhdGlvbnMgYXJyYXkuXG4gKiBUaGUgYGlzUmVtb3ZlZGAgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGZvciBub3RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvblxuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uaHRtbFxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCB0aGVpciB2YWx1ZXMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcInN0YXR1c0Jhck5vdGlmaWNhdGlvbnNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpc0dyb3VwXCI6ZmFsc2UsXG4gKiAgICAgICBcInBhY2thZ2VOYW1lXCI6XCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICAgIFwiaXNDbGVhcmFibGVcIjpmYWxzZSxcbiAqICAgICAgIFwiaXNPbmdvaW5nXCI6dHJ1ZSxcbiAqICAgICAgIFwiaWRcIjoxLFxuICogICAgICAgXCJ0YWdcIjpudWxsLFxuICogICAgICAgXCJub3RpZmljYXRpb25cIjp7XG4gKiAgICAgICAgIFwidGl0bGVcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RpdGxlXCI6XCJBcHBpdW0gU2V0dGluZ3NcIixcbiAqICAgICAgICAgXCJ0ZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUZXh0XCI6XCJLZWVwIHRoaXMgc2VydmljZSBydW5uaW5nLCBzbyBBcHBpdW0gZm9yIEFuZHJvaWQgY2FuIHByb3Blcmx5IGludGVyYWN0IHdpdGggc2V2ZXJhbCBzeXN0ZW0gQVBJc1wiLFxuICogICAgICAgICBcInRpY2tlclRleHRcIjpudWxsLFxuICogICAgICAgICBcInN1YlRleHRcIjpudWxsLFxuICogICAgICAgICBcImluZm9UZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJ0ZW1wbGF0ZVwiOlwiYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZVwiXG4gKiAgICAgICB9LFxuICogICAgICAgXCJ1c2VySGFuZGxlXCI6MCxcbiAqICAgICAgIFwiZ3JvdXBLZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJvdmVycmlkZUdyb3VwS2V5XCI6bnVsbCxcbiAqICAgICAgIFwicG9zdFRpbWVcIjoxNTc2ODUzNTE4ODUwLFxuICogICAgICAgXCJrZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJpc1JlbW92ZWRcIjpmYWxzZVxuICogICAgIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdFxuICovXG5jb21tYW5kcy5nZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBub3RpZmljYXRpb25zJyk7XG4gIC8vIFNvbWVob3cgcHJvdmlkaW5nIHRoZSBgLW5gIGFyZyB0byB0aGUgYGFtYCB1bmRlcm5lYXRoXG4gIC8vIHJlbmRlcnMgdGhlIGJyb2FkY2FzdCB0byBmYWlsIGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlXG4gIC8vIEFwcGl1bSBTZXR0aW5ncyBhcHAuIFRoaXMgb25seSBoYXBwZW5zIHRvIHRoZSBub3RpZmljYXRpb25zXG4gIC8vIHJlY2VpdmVyXG4gIGF3YWl0IHRoaXMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ25vdGlmaWNhdGlvbnMnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdGhlIG1vc3QgcmVjZW50IFNNU1xuICogcHJvcGVydGllcyBsaXN0IHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogTWVzc2FnZXMgYXJlIHNvcnRlZCBieSBkYXRlIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcIml0ZW1zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjJcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2NDIyMjAzXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlMlxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjFcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2MzgyNzQwXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ0b3RhbFwiOjJcbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBTTVMgbGlzdFxuICovXG5jb21tYW5kcy5nZXRTbXNMaXN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U21zTGlzdCAob3B0cyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVjZW50IFNNUyBtZXNzYWdlcycpO1xuICBjb25zdCBhcmdzID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIFNNU19MSVNUX1JFQ0VJVkVSLFxuICAgICctYScsIFNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF07XG4gIGlmIChvcHRzLm1heCkge1xuICAgIGFyZ3MucHVzaCgnLS1lcycsICdtYXgnLCBvcHRzLm1heCk7XG4gIH1cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBTTVMgbGlzdCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnU01TIGxpc3QnKTtcbn07XG5cbi8qKlxuICogVHlwZXMgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZm9jdXMgaXMgYWxyZWFkeSBwdXRcbiAqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBzdHJpbmcgdG8gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5wdXQgdGV4dCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCB0byBhZGJcbiAqL1xuY29tbWFuZHMudHlwZVVuaWNvZGUgPSBhc3luYyBmdW5jdGlvbiB0eXBlVW5pY29kZSAodGV4dCkge1xuICBpZiAoXy5pc05pbCh0ZXh0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRleHQgPSBgJHt0ZXh0fWA7XG4gIGxvZy5kZWJ1ZyhgVHlwaW5nICR7dXRpbC5wbHVyYWxpemUoJ2NoYXJhY3RlcicsIHRleHQubGVuZ3RoLCB0cnVlKX1gKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KFxuICAgIFVOSUNPREVfSU1FLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlucHV0VGV4dChpbWFwLmVuY29kZSh0ZXh0KSlcbiAgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIHJlY3Vyc2l2ZSBtZWRpYSBzY2FuIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEFsbCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCBpdGVtcyBhcmUgYmVpbmcgYWRkZWQgdG8gdGhlIGRldmljZSdzXG4gKiBtZWRpYSBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiBGaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGVycm9yIGJ5IHNjYW5uaW5nLlxuICovXG5jb21tYW5kcy5zY2FuTWVkaWEgPSBhc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGRlc3RpbmF0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgU2Nhbm5pbmcgJyR7ZGVzdGluYXRpb259JyBmb3IgbWVkaWEgZmlsZXNgKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgTUVESUFfU0NBTl9SRUNFSVZFUixcbiAgICAnLWEnLCBNRURJQV9TQ0FOX0FDVElPTixcbiAgICAnLS1lcycsICdwYXRoJywgZGVzdGluYXRpb25cbiAgXSk7XG4gIGlmICghXy5pbmNsdWRlcyhvdXRwdXQsICdyZXN1bHQ9LTEnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWVkaWEgY291bGQgYmUgc2Nhbm5lZCBhdCAnJHtkZXN0aW5hdGlvbn0nLiBgICtcbiAgICAgIGBDaGVjayB0aGUgZGV2aWNlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsb0JBQTNCO0FBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsV0FBdEM7QUFDQSxNQUFNQyxnQ0FBZ0MsR0FBSSxHQUFFRixrQkFBbUIsMkNBQS9EO0FBQ0EsTUFBTUcsOEJBQThCLEdBQUksR0FBRUgsa0JBQW1CLE9BQTdEO0FBQ0EsTUFBTUksZ0NBQWdDLEdBQUksR0FBRUosa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1LLDhCQUE4QixHQUFJLEdBQUVMLGtCQUFtQixrQkFBN0Q7QUFDQSxNQUFNTSwwQkFBMEIsR0FBSSxHQUFFTixrQkFBbUIsc0NBQXpEO0FBQ0EsTUFBTU8sd0JBQXdCLEdBQUksR0FBRVAsa0JBQW1CLFlBQXZEO0FBQ0EsTUFBTVEsdUJBQXVCLEdBQUksR0FBRVIsa0JBQW1CLG1DQUF0RDtBQUNBLE1BQU1TLHFCQUFxQixHQUFJLEdBQUVULGtCQUFtQixTQUFwRDtBQUNBLE1BQU1VLGdCQUFnQixHQUFJLEdBQUVWLGtCQUFtQixtQkFBL0M7QUFDQSxNQUFNVyxpQkFBaUIsR0FBSSxHQUFFWCxrQkFBbUIsa0NBQWhE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