tedious 16.1.0 → 16.2.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.
- package/lib/connection.js +8 -6
- package/lib/rpcrequest-payload.js +8 -2
- package/package.json +1 -1
package/lib/connection.js
CHANGED
|
@@ -65,6 +65,8 @@ var _dataType = require("./data-type");
|
|
|
65
65
|
|
|
66
66
|
var _bulkLoadPayload = require("./bulk-load-payload");
|
|
67
67
|
|
|
68
|
+
var _specialStoredProcedure = _interopRequireDefault(require("./special-stored-procedure"));
|
|
69
|
+
|
|
68
70
|
var _esAggregateError = _interopRequireDefault(require("es-aggregate-error"));
|
|
69
71
|
|
|
70
72
|
var _package = require("../package.json");
|
|
@@ -1740,7 +1742,7 @@ class Connection extends _events.EventEmitter {
|
|
|
1740
1742
|
parameters.push(...request.parameters);
|
|
1741
1743
|
}
|
|
1742
1744
|
|
|
1743
|
-
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(
|
|
1745
|
+
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(_specialStoredProcedure.default.Sp_ExecuteSql, parameters, this.currentTransactionDescriptor(), this.config.options, this.databaseCollation));
|
|
1744
1746
|
}
|
|
1745
1747
|
/**
|
|
1746
1748
|
* Creates a new BulkLoad instance.
|
|
@@ -1907,7 +1909,7 @@ class Connection extends _events.EventEmitter {
|
|
|
1907
1909
|
request.error = new _errors.RequestError(`Tedious > Unexpected output parameter ${name} from sp_prepare`);
|
|
1908
1910
|
}
|
|
1909
1911
|
});
|
|
1910
|
-
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(
|
|
1912
|
+
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(_specialStoredProcedure.default.Sp_Prepare, parameters, this.currentTransactionDescriptor(), this.config.options, this.databaseCollation));
|
|
1911
1913
|
}
|
|
1912
1914
|
/**
|
|
1913
1915
|
* Release the SQL Server resources associated with a previously prepared request.
|
|
@@ -1930,7 +1932,7 @@ class Connection extends _events.EventEmitter {
|
|
|
1930
1932
|
precision: undefined,
|
|
1931
1933
|
scale: undefined
|
|
1932
1934
|
});
|
|
1933
|
-
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(
|
|
1935
|
+
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(_specialStoredProcedure.default.Sp_Unprepare, parameters, this.currentTransactionDescriptor(), this.config.options, this.databaseCollation));
|
|
1934
1936
|
}
|
|
1935
1937
|
/**
|
|
1936
1938
|
* Execute previously prepared SQL, using the supplied parameters.
|
|
@@ -1947,7 +1949,7 @@ class Connection extends _events.EventEmitter {
|
|
|
1947
1949
|
const executeParameters = [];
|
|
1948
1950
|
executeParameters.push({
|
|
1949
1951
|
type: _dataType.TYPES.Int,
|
|
1950
|
-
name: '
|
|
1952
|
+
name: '',
|
|
1951
1953
|
// TODO: Abort if `request.handle` is not set
|
|
1952
1954
|
value: request.handle,
|
|
1953
1955
|
output: false,
|
|
@@ -1972,7 +1974,7 @@ class Connection extends _events.EventEmitter {
|
|
|
1972
1974
|
return;
|
|
1973
1975
|
}
|
|
1974
1976
|
|
|
1975
|
-
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(
|
|
1977
|
+
this.makeRequest(request, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(_specialStoredProcedure.default.Sp_Execute, executeParameters, this.currentTransactionDescriptor(), this.config.options, this.databaseCollation));
|
|
1976
1978
|
}
|
|
1977
1979
|
/**
|
|
1978
1980
|
* Call a stored procedure represented by [[Request]].
|
|
@@ -2907,4 +2909,4 @@ Connection.prototype.STATE = {
|
|
|
2907
2909
|
}
|
|
2908
2910
|
}
|
|
2909
2911
|
};
|
|
2910
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkiLCJERUZBVUxUX0NPTk5FQ1RfVElNRU9VVCIsIkRFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCIsIkRFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQiLCJERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwiLCJERUZBVUxUX1BBQ0tFVF9TSVpFIiwiREVGQVVMVF9URVhUU0laRSIsIkRFRkFVTFRfREFURUZJUlNUIiwiREVGQVVMVF9QT1JUIiwiREVGQVVMVF9URFNfVkVSU0lPTiIsIkRFRkFVTFRfTEFOR1VBR0UiLCJERUZBVUxUX0RBVEVGT1JNQVQiLCJDTEVBTlVQX1RZUEUiLCJOT1JNQUwiLCJSRURJUkVDVCIsIlJFVFJZIiwiQ29ubmVjdGlvbiIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiZmVkQXV0aFJlcXVpcmVkIiwic2VjdXJlQ29udGV4dE9wdGlvbnMiLCJpblRyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25EZXNjcmlwdG9ycyIsInRyYW5zYWN0aW9uRGVwdGgiLCJpc1NxbEJhdGNoIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsInRyYW5zaWVudEVycm9yTG9va3VwIiwiY2xvc2VkIiwibG9naW5FcnJvciIsImRlYnVnIiwibnRsbXBhY2tldCIsIm50bG1wYWNrZXRCdWZmZXIiLCJyb3V0aW5nRGF0YSIsIm1lc3NhZ2VJbyIsInN0YXRlIiwicmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCIsInJlcXVlc3QiLCJwcm9jUmV0dXJuU3RhdHVzVmFsdWUiLCJzb2NrZXQiLCJtZXNzYWdlQnVmZmVyIiwiY29ubmVjdFRpbWVyIiwiY2FuY2VsVGltZXIiLCJyZXF1ZXN0VGltZXIiLCJyZXRyeVRpbWVyIiwiX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIlR5cGVFcnJvciIsInNlcnZlciIsImF1dGhlbnRpY2F0aW9uIiwidW5kZWZpbmVkIiwidHlwZSIsIm9wdGlvbnMiLCJkb21haW4iLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwidG9VcHBlckNhc2UiLCJjbGllbnRJZCIsInRlbmFudElkIiwidG9rZW4iLCJjbGllbnRTZWNyZXQiLCJhYm9ydFRyYW5zYWN0aW9uT25FcnJvciIsImFwcE5hbWUiLCJjYW1lbENhc2VDb2x1bW5zIiwiY2FuY2VsVGltZW91dCIsImNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTCIsImNvbHVtbkVuY3J5cHRpb25TZXR0aW5nIiwiY29sdW1uTmFtZVJlcGxhY2VyIiwiY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwiLCJjb25uZWN0VGltZW91dCIsImNvbm5lY3RvciIsImNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCIsIklTT0xBVElPTl9MRVZFTCIsIlJFQURfQ09NTUlUVEVEIiwiY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzIiwiZGF0YWJhc2UiLCJkYXRlZmlyc3QiLCJkYXRlRm9ybWF0IiwiZGF0YSIsInBhY2tldCIsInBheWxvYWQiLCJlbmFibGVBbnNpTnVsbCIsImVuYWJsZUFuc2lOdWxsRGVmYXVsdCIsImVuYWJsZUFuc2lQYWRkaW5nIiwiZW5hYmxlQW5zaVdhcm5pbmdzIiwiZW5hYmxlQXJpdGhBYm9ydCIsImVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsIiwiZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCIsImVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zIiwiZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQiLCJlbmFibGVRdW90ZWRJZGVudGlmaWVyIiwiZW5jcnlwdCIsImZhbGxiYWNrVG9EZWZhdWx0RGIiLCJlbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnMiLCJpbnN0YW5jZU5hbWUiLCJpc29sYXRpb25MZXZlbCIsImxhbmd1YWdlIiwibG9jYWxBZGRyZXNzIiwibWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzIiwibXVsdGlTdWJuZXRGYWlsb3ZlciIsInBhY2tldFNpemUiLCJwb3J0IiwicmVhZE9ubHlJbnRlbnQiLCJyZXF1ZXN0VGltZW91dCIsInJvd0NvbGxlY3Rpb25PbkRvbmUiLCJyb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiIsInNlcnZlck5hbWUiLCJzZXJ2ZXJTdXBwb3J0c0NvbHVtbkVuY3J5cHRpb24iLCJ0ZHNWZXJzaW9uIiwidGV4dHNpemUiLCJ0cnVzdGVkU2VydmVyTmFtZUFFIiwidHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSIsInVzZUNvbHVtbk5hbWVzIiwidXNlVVRDIiwid29ya3N0YXRpb25JZCIsImxvd2VyQ2FzZUd1aWRzIiwiRXJyb3IiLCJSYW5nZUVycm9yIiwic2VjdXJlT3B0aW9ucyIsIk9iamVjdCIsImNyZWF0ZSIsInZhbHVlIiwiY29uc3RhbnRzIiwiU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyIsImNyZWF0ZURlYnVnIiwiQnVmZmVyIiwiZnJvbSIsImFsbG9jIiwiVHJhbnNpZW50RXJyb3JMb29rdXAiLCJTVEFURSIsIklOSVRJQUxJWkVEIiwic2VuZE1lc3NhZ2UiLCJUWVBFIiwiQVRURU5USU9OIiwiY3JlYXRlQ2FuY2VsVGltZXIiLCJjb25uZWN0IiwiY29ubmVjdExpc3RlbmVyIiwiQ29ubmVjdGlvbkVycm9yIiwibmFtZSIsIm9uQ29ubmVjdCIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwib25FcnJvciIsIm9uY2UiLCJ0cmFuc2l0aW9uVG8iLCJDT05ORUNUSU5HIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjbG9zZSIsIkZJTkFMIiwiaW5pdGlhbGlzZUNvbm5lY3Rpb24iLCJzaWduYWwiLCJjcmVhdGVDb25uZWN0VGltZXIiLCJjb25uZWN0T25Qb3J0IiwidGltZW91dCIsInRoZW4iLCJwcm9jZXNzIiwibmV4dFRpY2siLCJjbGVhckNvbm5lY3RUaW1lciIsIm1lc3NhZ2UiLCJjbGVhbnVwQ29ubmVjdGlvbiIsImNsZWFudXBUeXBlIiwiY2xlYXJSZXF1ZXN0VGltZXIiLCJjbGVhclJldHJ5VGltZXIiLCJjbG9zZUNvbm5lY3Rpb24iLCJSZXF1ZXN0RXJyb3IiLCJjYWxsYmFjayIsIkRlYnVnIiwiY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIiLCJoYW5kbGVyIiwiVG9rZW5TdHJlYW1QYXJzZXIiLCJjdXN0b21Db25uZWN0b3IiLCJjb25uZWN0T3B0cyIsImhvc3QiLCJjb25uZWN0SW5QYXJhbGxlbCIsImNvbm5lY3RJblNlcXVlbmNlIiwiZG5zIiwibG9va3VwIiwiZXJyb3IiLCJzb2NrZXRFcnJvciIsInNvY2tldENsb3NlIiwic29ja2V0RW5kIiwic2V0S2VlcEFsaXZlIiwiTWVzc2FnZUlPIiwiY2xlYXJ0ZXh0IiwibG9nIiwic2VuZFByZUxvZ2luIiwiU0VOVF9QUkVMT0dJTiIsImRlc3Ryb3kiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwic2V0VGltZW91dCIsImFib3J0IiwiY2xlYXJDYW5jZWxUaW1lciIsImNyZWF0ZVJlcXVlc3RUaW1lciIsImNyZWF0ZVJldHJ5VGltZXIiLCJyZXRyeVRpbWVvdXQiLCJkaXNwYXRjaEV2ZW50IiwiY2FuY2VsIiwiY2xlYXJUaW1lb3V0IiwibmV3U3RhdGUiLCJleGl0IiwiY2FsbCIsImVudGVyIiwiYXBwbHkiLCJnZXRFdmVudEhhbmRsZXIiLCJldmVudE5hbWUiLCJldmVudHMiLCJTRU5UX1RMU1NTTE5FR09USUFUSU9OIiwiY29kZSIsIlJFUk9VVElORyIsIlRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwiZXhlYyIsInZlcnNpb24iLCJQcmVsb2dpblBheWxvYWQiLCJOdW1iZXIiLCJzdWJidWlsZCIsIlBSRUxPR0lOIiwidG9TdHJpbmciLCJzZW5kTG9naW43UGFja2V0IiwiTG9naW43UGF5bG9hZCIsInZlcnNpb25zIiwiY2xpZW50UHJvZ1ZlciIsImNsaWVudFBpZCIsInBpZCIsImNvbm5lY3Rpb25JZCIsImNsaWVudFRpbWVab25lIiwiRGF0ZSIsImdldFRpbWV6b25lT2Zmc2V0IiwiY2xpZW50TGNpZCIsImZlZEF1dGgiLCJlY2hvIiwid29ya2Zsb3ciLCJmZWRBdXRoVG9rZW4iLCJzc3BpIiwiaG9zdG5hbWUiLCJvcyIsImxpYnJhcnlOYW1lIiwiaW5pdERiRmF0YWwiLCJMT0dJTjciLCJ0b0J1ZmZlciIsInNlbmRGZWRBdXRoVG9rZW5NZXNzYWdlIiwiYWNjZXNzVG9rZW5MZW4iLCJieXRlTGVuZ3RoIiwib2Zmc2V0Iiwid3JpdGVVSW50MzJMRSIsIndyaXRlIiwiRkVEQVVUSF9UT0tFTiIsIlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4iLCJzZW5kSW5pdGlhbFNxbCIsIlNxbEJhdGNoUGF5bG9hZCIsImdldEluaXRpYWxTcWwiLCJjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yIiwiTWVzc2FnZSIsIlNRTF9CQVRDSCIsIm91dGdvaW5nTWVzc2FnZVN0cmVhbSIsIlJlYWRhYmxlIiwicGlwZSIsInB1c2giLCJnZXRJc29sYXRpb25MZXZlbFRleHQiLCJqb2luIiwicHJvY2Vzc2VkSW5pdGlhbFNxbCIsImV4ZWNTcWxCYXRjaCIsIm1ha2VSZXF1ZXN0Iiwic3FsVGV4dE9yUHJvY2VkdXJlIiwiZXhlY1NxbCIsInZhbGlkYXRlUGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJUWVBFUyIsIk5WYXJDaGFyIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJtYWtlUGFyYW1zUGFyYW1ldGVyIiwiUlBDX1JFUVVFU1QiLCJScGNSZXF1ZXN0UGF5bG9hZCIsIm5ld0J1bGtMb2FkIiwidGFibGUiLCJjYWxsYmFja09yT3B0aW9ucyIsIkJ1bGtMb2FkIiwiZXhlY0J1bGtMb2FkIiwiYnVsa0xvYWQiLCJyb3dzIiwiZXhlY3V0aW9uU3RhcnRlZCIsInN0cmVhbWluZ01vZGUiLCJmaXJzdFJvd1dyaXR0ZW4iLCJyb3dTdHJlYW0iLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsImVuZCIsIm9uQ2FuY2VsIiwiQnVsa0xvYWRQYXlsb2FkIiwiUmVxdWVzdCIsImdldEJ1bGtJbnNlcnRTcWwiLCJCVUxLX0xPQUQiLCJwcmVwYXJlIiwiSW50IiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5wcmVwYXJlIiwiZXhlY3V0ZSIsImV4ZWN1dGVQYXJhbWV0ZXJzIiwiaSIsImxlbiIsInBhcmFtZXRlciIsInZhbGlkYXRlIiwiY2FsbFByb2NlZHVyZSIsImJlZ2luVHJhbnNhY3Rpb24iLCJ0cmFuc2FjdGlvbiIsIlRyYW5zYWN0aW9uIiwiaXNvbGF0aW9uTGV2ZWxUb1RTUUwiLCJUUkFOU0FDVElPTl9NQU5BR0VSIiwiYmVnaW5QYXlsb2FkIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJjb21taXRQYXlsb2FkIiwicm9sbGJhY2tUcmFuc2FjdGlvbiIsInJvbGxiYWNrUGF5bG9hZCIsInNhdmVUcmFuc2FjdGlvbiIsInNhdmVQYXlsb2FkIiwiY2IiLCJ1c2VTYXZlcG9pbnQiLCJjcnlwdG8iLCJyYW5kb21CeXRlcyIsInR4RG9uZSIsImRvbmUiLCJMT0dHRURfSU4iLCJ0eEVyciIsInBhY2tldFR5cGUiLCJjYW5jZWxlZCIsImNvbm5lY3Rpb24iLCJyb3dDb3VudCIsInJzdCIsInBheWxvYWRTdHJlYW0iLCJ1bnBpcGUiLCJpZ25vcmUiLCJwYXVzZWQiLCJyZXN1bWUiLCJyZXNldENvbm5lY3Rpb24iLCJTRU5UX0NMSUVOVF9SRVFVRVNUIiwicmVzZXQiLCJSRUFEX1VOQ09NTUlUVEVEIiwiUkVQRUFUQUJMRV9SRUFEIiwiU0VSSUFMSVpBQkxFIiwiU05BUFNIT1QiLCJpc1RyYW5zaWVudEVycm9yIiwiQWdncmVnYXRlRXJyb3IiLCJlcnJvcnMiLCJpc1RyYW5zaWVudCIsIm1vZHVsZSIsImV4cG9ydHMiLCJwcm90b3R5cGUiLCJyZWFkTWVzc2FnZSIsImNvbmNhdCIsInByZWxvZ2luUGF5bG9hZCIsImVuY3J5cHRpb25TdHJpbmciLCJzdGFydFRscyIsIlNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSCIsIlNFTlRfTE9HSU43X1dJVEhfTlRMTSIsImNhdGNoIiwicmVjb25uZWN0IiwicmV0cnkiLCJMb2dpbjdUb2tlbkhhbmRsZXIiLCJ0b2tlblN0cmVhbVBhcnNlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJMT0dHRURfSU5fU0VORElOR19JTklUSUFMX1NRTCIsIk5UTE1SZXNwb25zZVBheWxvYWQiLCJOVExNQVVUSF9QS1QiLCJmZWRBdXRoSW5mb1Rva2VuIiwic3RzdXJsIiwic3BuIiwidG9rZW5TY29wZSIsIlVSTCIsImNyZWRlbnRpYWxzIiwiVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWwiLCJtc2lBcmdzIiwiTWFuYWdlZElkZW50aXR5Q3JlZGVudGlhbCIsIm1hbmFnZWRJZGVudGl0eUNsaWVudElkIiwiRGVmYXVsdEF6dXJlQ3JlZGVudGlhbCIsIkNsaWVudFNlY3JldENyZWRlbnRpYWwiLCJ0b2tlblJlc3BvbnNlIiwiZ2V0VG9rZW4iLCJJbml0aWFsU3FsVG9rZW5IYW5kbGVyIiwiUmVxdWVzdFRva2VuSGFuZGxlciIsIlNFTlRfQVRURU5USU9OIiwib25SZXN1bWUiLCJvblBhdXNlIiwicGF1c2UiLCJvbkVuZE9mTWVzc2FnZSIsInNxbFJlcXVlc3QiLCJuZXh0U3RhdGUiLCJBdHRlbnRpb25Ub2tlbkhhbmRsZXIiLCJhdHRlbnRpb25SZWNlaXZlZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25uZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBTb2NrZXQgfSBmcm9tICduZXQnO1xuaW1wb3J0IGRucyBmcm9tICdkbnMnO1xuXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJ2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTZWN1cmVDb250ZXh0T3B0aW9ucyB9IGZyb20gJ3Rscyc7XG5cbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcblxuaW1wb3J0IHtcbiAgRGVmYXVsdEF6dXJlQ3JlZGVudGlhbCxcbiAgQ2xpZW50U2VjcmV0Q3JlZGVudGlhbCxcbiAgTWFuYWdlZElkZW50aXR5Q3JlZGVudGlhbCxcbiAgVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWwsXG59IGZyb20gJ0BhenVyZS9pZGVudGl0eSc7XG5cbmltcG9ydCBCdWxrTG9hZCwgeyBPcHRpb25zIGFzIEJ1bGtMb2FkT3B0aW9ucywgQ2FsbGJhY2sgYXMgQnVsa0xvYWRDYWxsYmFjayB9IGZyb20gJy4vYnVsay1sb2FkJztcbmltcG9ydCBEZWJ1ZyBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgb25jZSB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBpbnN0YW5jZUxvb2t1cCB9IGZyb20gJy4vaW5zdGFuY2UtbG9va3VwJztcbmltcG9ydCB7IFRyYW5zaWVudEVycm9yTG9va3VwIH0gZnJvbSAnLi90cmFuc2llbnQtZXJyb3ItbG9va3VwJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuL3BhY2tldCc7XG5pbXBvcnQgUHJlbG9naW5QYXlsb2FkIGZyb20gJy4vcHJlbG9naW4tcGF5bG9hZCc7XG5pbXBvcnQgTG9naW43UGF5bG9hZCBmcm9tICcuL2xvZ2luNy1wYXlsb2FkJztcbmltcG9ydCBOVExNUmVzcG9uc2VQYXlsb2FkIGZyb20gJy4vbnRsbS1wYXlsb2FkJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgUnBjUmVxdWVzdFBheWxvYWQgZnJvbSAnLi9ycGNyZXF1ZXN0LXBheWxvYWQnO1xuaW1wb3J0IFNxbEJhdGNoUGF5bG9hZCBmcm9tICcuL3NxbGJhdGNoLXBheWxvYWQnO1xuaW1wb3J0IE1lc3NhZ2VJTyBmcm9tICcuL21lc3NhZ2UtaW8nO1xuaW1wb3J0IHsgUGFyc2VyIGFzIFRva2VuU3RyZWFtUGFyc2VyIH0gZnJvbSAnLi90b2tlbi90b2tlbi1zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBJU09MQVRJT05fTEVWRUwsIGFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciwgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgY29ubmVjdEluUGFyYWxsZWwsIGNvbm5lY3RJblNlcXVlbmNlIH0gZnJvbSAnLi9jb25uZWN0b3InO1xuaW1wb3J0IHsgbmFtZSBhcyBsaWJyYXJ5TmFtZSB9IGZyb20gJy4vbGlicmFyeSc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJy4vbWVzc2FnZSc7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IGNyZWF0ZU5UTE1SZXF1ZXN0IH0gZnJvbSAnLi9udGxtJztcbmltcG9ydCB7IENvbHVtbkVuY3J5cHRpb25BenVyZUtleVZhdWx0UHJvdmlkZXIgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQva2V5c3RvcmUtcHJvdmlkZXItYXp1cmUta2V5LXZhdWx0JztcblxuaW1wb3J0IHsgQWJvcnRDb250cm9sbGVyLCBBYm9ydFNpZ25hbCB9IGZyb20gJ25vZGUtYWJvcnQtY29udHJvbGxlcic7XG5pbXBvcnQgeyBQYXJhbWV0ZXIsIFRZUEVTIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgQnVsa0xvYWRQYXlsb2FkIH0gZnJvbSAnLi9idWxrLWxvYWQtcGF5bG9hZCc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbmltcG9ydCBBZ2dyZWdhdGVFcnJvciBmcm9tICdlcy1hZ2dyZWdhdGUtZXJyb3InO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgQXR0ZW50aW9uVG9rZW5IYW5kbGVyLCBJbml0aWFsU3FsVG9rZW5IYW5kbGVyLCBMb2dpbjdUb2tlbkhhbmRsZXIsIFJlcXVlc3RUb2tlbkhhbmRsZXIsIFRva2VuSGFuZGxlciB9IGZyb20gJy4vdG9rZW4vaGFuZGxlcic7XG5cbnR5cGUgQmVnaW5UcmFuc2FjdGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byBzdGFydCB0aGUgdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCxcbiAgICogZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICAgKiBiZSBpbml0aWF0ZWQgdW50aWwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIFtbRXJyb3JdXSBvYmplY3Qgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uRGVzY3JpcHRvciBBIEJ1ZmZlciB0aGF0IGRlc2NyaWJlIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCB0cmFuc2FjdGlvbkRlc2NyaXB0b3I/OiBCdWZmZXIpID0+IHZvaWRcblxudHlwZSBTYXZlVHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gc2V0IGEgc2F2ZXBvaW50IHdpdGhpbiB0aGVcbiAgICogdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICAgKiBiZSBpbml0aWF0ZWQgdW50aWwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIFtbRXJyb3JdXSBvYmplY3Qgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxudHlwZSBDb21taXRUcmFuc2FjdGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsXG4gICAqIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cbnR5cGUgUm9sbGJhY2tUcmFuc2FjdGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaGFzXG4gICAqIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGVyciB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cbnR5cGUgUmVzZXRDYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gcmVzZXQgaGFzIGNvbXBsZXRlZCxcbiAgICogZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyXG4gICAqIHJlcXVlc3Qgc2hvdWxkIG5vdCBiZSBpbml0aWF0ZWQgdW50aWwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWRcbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG50eXBlIFRyYW5zYWN0aW9uQ2FsbGJhY2s8VCBleHRlbmRzIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IHZvaWQ+ID1cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0byBzdGFydCBhIHRyYW5zYWN0aW9uIChvciBjcmVhdGUgYSBzYXZlcG9pbnQsIGluXG4gICAqIHRoZSBjYXNlIG9mIGEgbmVzdGVkIHRyYW5zYWN0aW9uKSBoYXMgY29tcGxldGVkLCBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHdpdGggYW4gZXJyb3IuXG4gICAqIElmIGFuIGVycm9yIG9jY3VycmVkLCB0aGVuIGBlcnJgIHdpbGwgZGVzY3JpYmUgdGhlIGVycm9yLlxuICAgKiBJZiBubyBlcnJvciBvY2N1cnJlZCwgdGhlIGNhbGxiYWNrIHNob3VsZCBwZXJmb3JtIGl0cyB3b3JrIGFuZCBldmVudHVhbGx5IGNhbGxcbiAgICogYGRvbmVgIHdpdGggYW4gZXJyb3Igb3IgbnVsbCAodG8gdHJpZ2dlciBhIHRyYW5zYWN0aW9uIHJvbGxiYWNrIG9yIGFcbiAgICogdHJhbnNhY3Rpb24gY29tbWl0KSBhbmQgYW4gYWRkaXRpb25hbCBjb21wbGV0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdFxuICAgKiB0byByb2xsYmFjayBvciBjb21taXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBnaXZlbiB0byBgZG9uZWAgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGlzIGNhbGxiYWNrLlxuICAgKlxuICAgKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICAgKiBiZSBpbml0aWF0ZWQgdW50aWwgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSB0eERvbmUgSWYgbm8gZXJyb3Igb2NjdXJyZWQsIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHRvIGNvbW1pdCBvciByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHR4RG9uZT86IFRyYW5zYWN0aW9uRG9uZTxUPikgPT4gdm9pZDtcblxudHlwZSBUcmFuc2FjdGlvbkRvbmVDYWxsYmFjayA9IChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG50eXBlIENhbGxiYWNrUGFyYW1ldGVyczxUIGV4dGVuZHMgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55PiA9IFQgZXh0ZW5kcyAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGluZmVyIFApID0+IGFueSA/IFAgOiBuZXZlcjtcblxudHlwZSBUcmFuc2FjdGlvbkRvbmU8VCBleHRlbmRzIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IHZvaWQ+ID1cbiAgLyoqXG4gICAqIElmIG5vIGVycm9yIG9jY3VycmVkLCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0byBjb21taXQgb3Igcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVyciBvY2N1cnJlZCwgYSBzdHJpbmcgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgZG9uZTogVCwgLi4uYXJnczogQ2FsbGJhY2tQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IEtFRVBfQUxJVkVfSU5JVElBTF9ERUxBWSA9IDMwICogMTAwMDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9DT05ORUNUX1RJTUVPVVQgPSAxNSAqIDEwMDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCA9IDE1ICogMTAwMDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9DQU5DRUxfVElNRU9VVCA9IDUgKiAxMDAwO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwgPSA1MDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfUEFDS0VUX1NJWkUgPSA0ICogMTAyNDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9URVhUU0laRSA9IDIxNDc0ODM2NDc7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfREFURUZJUlNUID0gNztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9QT1JUID0gMTQzMztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9URFNfVkVSU0lPTiA9ICc3XzQnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0xBTkdVQUdFID0gJ3VzX2VuZ2xpc2gnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0RBVEVGT1JNQVQgPSAnbWR5JztcblxuaW50ZXJmYWNlIEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpQXBwU2VydmljZUF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB1c2VyIHdhbnQgdG8gY29ubmVjdCB0byBhbiBBenVyZSBhcHAgc2VydmljZSB1c2luZyBhIHNwZWNpZmljIGNsaWVudCBhY2NvdW50XG4gICAgICogdGhleSBuZWVkIHRvIHByb3ZpZGUgYGNsaWVudElkYCBhc3Njb2lhdGUgdG8gdGhlaXIgY3JlYXRlZCBpZG5ldGl0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb3B0aW9uYWwgZm9yIHJldHJpZXZlIHRva2VuIGZyb20gYXp1cmUgd2ViIGFwcCBzZXJ2aWNlXG4gICAgICovXG4gICAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29ubmVjdCB1c2luZyBhIHNwZWNpZmljIGNsaWVudCBhY2NvdW50XG4gICAgICogdGhleSBuZWVkIHRvIHByb3ZpZGUgYGNsaWVudElkYCBhc3NvY2lhdGVkIHRvIHRoZWlyIGNyZWF0ZWQgaWRlbnRpdHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9wdGlvbmFsIGZvciByZXRyaWV2ZSBhIHRva2VuXG4gICAgICovXG4gICAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbiB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29ubmVjdCB1c2luZyBhIHNwZWNpZmljIGNsaWVudCBhY2NvdW50XG4gICAgICogdGhleSBuZWVkIHRvIHByb3ZpZGUgYGNsaWVudElkYCBhc3NvY2lhdGVkIHRvIHRoZWlyIGNyZWF0ZWQgaWRlbnRpdHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9wdGlvbmFsIGZvciByZXRyaWV2aW5nIGEgdG9rZW5cbiAgICAgKi9cbiAgICBjbGllbnRJZD86IHN0cmluZztcbiAgfTtcbn1cblxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlBY2Nlc3NUb2tlbkF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIEEgdXNlciBuZWVkIHRvIHByb3ZpZGUgYHRva2VuYCB3aGljaCB0aGV5IHJldHJpdmVkIGVsc2Ugd2hlcmVcbiAgICAgKiB0byBmb3JtaW5nIHRoZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIHRva2VuOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBBIHVzZXIgbmVlZCB0byBwcm92aWRlIGB1c2VyTmFtZWAgYXNzY29pYXRlIHRvIHRoZWlyIGFjY291bnQuXG4gICAgICovXG4gICAgdXNlck5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgdXNlciBuZWVkIHRvIHByb3ZpZGUgYHBhc3N3b3JkYCBhc3Njb2lhdGUgdG8gdGhlaXIgYWNjb3VudC5cbiAgICAgKi9cbiAgICBwYXNzd29yZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBjbGllbnQgaWQgdG8gdXNlLlxuICAgICAqL1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBwYXJhbWV0ZXIgZm9yIHNwZWNpZmljIEF6dXJlIHRlbmFudCBJRFxuICAgICAqL1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogQXBwbGljYXRpb24gKGBjbGllbnRgKSBJRCBmcm9tIHlvdXIgcmVnaXN0ZXJlZCBBenVyZSBhcHBsaWNhdGlvblxuICAgICAqL1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGNyZWF0ZWQgYGNsaWVudCBzZWNyZXRgIGZvciB0aGlzIHJlZ2lzdGVyZWQgQXp1cmUgYXBwbGljYXRpb25cbiAgICAgKi9cbiAgICBjbGllbnRTZWNyZXQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgKGB0ZW5hbnRgKSBJRCBmcm9tIHlvdXIgcmVnaXN0ZXJlZCBBenVyZSBhcHBsaWNhdGlvblxuICAgICAqL1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBOdGxtQXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnbnRsbSc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBVc2VyIG5hbWUgZnJvbSB5b3VyIHdpbmRvd3MgYWNjb3VudC5cbiAgICAgKi9cbiAgICB1c2VyTmFtZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhc3N3b3JkIGZyb20geW91ciB3aW5kb3dzIGFjY291bnQuXG4gICAgICovXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBPbmNlIHlvdSBzZXQgZG9tYWluIGZvciBudGxtIGF1dGhlbnRpY2F0aW9uIHR5cGUsIGRyaXZlciB3aWxsIGNvbm5lY3QgdG8gU1FMIFNlcnZlciB1c2luZyBkb21haW4gbG9naW4uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgZm9ybWluZyBhIGNvbm5lY3Rpb24gdXNpbmcgbnRsbSB0eXBlXG4gICAgICovXG4gICAgZG9tYWluOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBEZWZhdWx0QXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBVc2VyIG5hbWUgdG8gdXNlIGZvciBzcWwgc2VydmVyIGxvZ2luLlxuICAgICAqL1xuICAgIHVzZXJOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFBhc3N3b3JkIHRvIHVzZSBmb3Igc3FsIHNlcnZlciBsb2dpbi5cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEVycm9yV2l0aENvZGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJbnRlcm5hbENvbm5lY3Rpb25Db25maWcge1xuICBzZXJ2ZXI6IHN0cmluZztcbiAgYXV0aGVudGljYXRpb246IERlZmF1bHRBdXRoZW50aWNhdGlvbiB8IE50bG1BdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5UGFzc3dvcmRBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpQXBwU2VydmljZUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlBY2Nlc3NUb2tlbkF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlUHJpbmNpcGFsU2VjcmV0IHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlEZWZhdWx0QXV0aGVudGljYXRpb247XG4gIG9wdGlvbnM6IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucyB7XG4gIGFib3J0VHJhbnNhY3Rpb25PbkVycm9yOiBib29sZWFuO1xuICBhcHBOYW1lOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIGNhbWVsQ2FzZUNvbHVtbnM6IGJvb2xlYW47XG4gIGNhbmNlbFRpbWVvdXQ6IG51bWJlcjtcbiAgY29sdW1uRW5jcnlwdGlvbktleUNhY2hlVFRMOiBudW1iZXI7XG4gIGNvbHVtbkVuY3J5cHRpb25TZXR0aW5nOiBib29sZWFuO1xuICBjb2x1bW5OYW1lUmVwbGFjZXI6IHVuZGVmaW5lZCB8ICgoY29sTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEpID0+IHN0cmluZyk7XG4gIGNvbm5lY3Rpb25SZXRyeUludGVydmFsOiBudW1iZXI7XG4gIGNvbm5lY3RvcjogdW5kZWZpbmVkIHwgKCgpID0+IFByb21pc2U8U29ja2V0Pik7XG4gIGNvbm5lY3RUaW1lb3V0OiBudW1iZXI7XG4gIGNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbDogdHlwZW9mIElTT0xBVElPTl9MRVZFTFtrZXlvZiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMXTtcbiAgY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzOiBTZWN1cmVDb250ZXh0T3B0aW9ucztcbiAgZGF0YWJhc2U6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgZGF0ZWZpcnN0OiBudW1iZXI7XG4gIGRhdGVGb3JtYXQ6IHN0cmluZztcbiAgZGVidWc6IHtcbiAgICBkYXRhOiBib29sZWFuO1xuICAgIHBhY2tldDogYm9vbGVhbjtcbiAgICBwYXlsb2FkOiBib29sZWFuO1xuICAgIHRva2VuOiBib29sZWFuO1xuICB9O1xuICBlbmFibGVBbnNpTnVsbDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUFuc2lOdWxsRGVmYXVsdDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUFuc2lQYWRkaW5nOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQW5zaVdhcm5pbmdzOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQXJpdGhBYm9ydDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQ6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVRdW90ZWRJZGVudGlmaWVyOiBudWxsIHwgYm9vbGVhbjtcbiAgZW5jcnlwdDogYm9vbGVhbjtcbiAgZW5jcnlwdGlvbktleVN0b3JlUHJvdmlkZXJzOiBLZXlTdG9yZVByb3ZpZGVyTWFwIHwgdW5kZWZpbmVkO1xuICBmYWxsYmFja1RvRGVmYXVsdERiOiBib29sZWFuO1xuICBpbnN0YW5jZU5hbWU6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgaXNvbGF0aW9uTGV2ZWw6IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF07XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGxvY2FsQWRkcmVzczogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM6IG51bWJlcjtcbiAgbXVsdGlTdWJuZXRGYWlsb3ZlcjogYm9vbGVhbjtcbiAgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBwb3J0OiB1bmRlZmluZWQgfCBudW1iZXI7XG4gIHJlYWRPbmx5SW50ZW50OiBib29sZWFuO1xuICByZXF1ZXN0VGltZW91dDogbnVtYmVyO1xuICByb3dDb2xsZWN0aW9uT25Eb25lOiBib29sZWFuO1xuICByb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbjogYm9vbGVhbjtcbiAgc2VydmVyTmFtZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBzZXJ2ZXJTdXBwb3J0c0NvbHVtbkVuY3J5cHRpb246IGJvb2xlYW47XG4gIHRkc1ZlcnNpb246IHN0cmluZztcbiAgdGV4dHNpemU6IG51bWJlcjtcbiAgdHJ1c3RlZFNlcnZlck5hbWVBRTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnVzdFNlcnZlckNlcnRpZmljYXRlOiBib29sZWFuO1xuICB1c2VDb2x1bW5OYW1lczogYm9vbGVhbjtcbiAgdXNlVVRDOiBib29sZWFuO1xuICB3b3Jrc3RhdGlvbklkOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIGxvd2VyQ2FzZUd1aWRzOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgS2V5U3RvcmVQcm92aWRlck1hcCB7XG4gIFtrZXk6IHN0cmluZ106IENvbHVtbkVuY3J5cHRpb25BenVyZUtleVZhdWx0UHJvdmlkZXI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuaW50ZXJmYWNlIFN0YXRlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBlbnRlcj8odGhpczogQ29ubmVjdGlvbik6IHZvaWQ7XG4gIGV4aXQ/KHRoaXM6IENvbm5lY3Rpb24sIG5ld1N0YXRlOiBTdGF0ZSk6IHZvaWQ7XG4gIGV2ZW50czoge1xuICAgIHNvY2tldEVycm9yPyh0aGlzOiBDb25uZWN0aW9uLCBlcnI6IEVycm9yKTogdm9pZDtcbiAgICBjb25uZWN0VGltZW91dD8odGhpczogQ29ubmVjdGlvbik6IHZvaWQ7XG4gICAgbWVzc2FnZT8odGhpczogQ29ubmVjdGlvbiwgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQ7XG4gICAgcmV0cnk/KHRoaXM6IENvbm5lY3Rpb24pOiB2b2lkO1xuICAgIHJlY29ubmVjdD8odGhpczogQ29ubmVjdGlvbik6IHZvaWQ7XG4gIH07XG59XG5cbnR5cGUgQXV0aGVudGljYXRpb24gPSBEZWZhdWx0QXV0aGVudGljYXRpb24gfFxuICBOdGxtQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbiB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpVm1BdXRoZW50aWNhdGlvbiB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5QWNjZXNzVG9rZW5BdXRoZW50aWNhdGlvbiB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5U2VydmljZVByaW5jaXBhbFNlY3JldCB8XG4gIEF6dXJlQWN0aXZlRGlyZWN0b3J5RGVmYXVsdEF1dGhlbnRpY2F0aW9uO1xuXG50eXBlIEF1dGhlbnRpY2F0aW9uVHlwZSA9IEF1dGhlbnRpY2F0aW9uWyd0eXBlJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogSG9zdG5hbWUgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHNlcnZlcjogc3RyaW5nO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmb3JtaW5nIHRoZSBjb25uZWN0aW9uLlxuICAgKi9cbiAgb3B0aW9ucz86IENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQXV0aGVudGljYXRpb24gcmVhbHRlZCBvcHRpb25zIGZvciBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXV0aGVudGljYXRpb24/OiBBdXRoZW50aWNhdGlvbk9wdGlvbnM7XG59XG5cbmludGVyZmFjZSBEZWJ1Z09wdGlvbnMge1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHBhY2tldCBkYXRhIGRldGFpbHNcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBkYXRhOiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHBhY2tldCBkZXRhaWxzXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgcGFja2V0OiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHBhY2tldCBwYXlsb2FkIGRldGFpbHNcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBwYXlsb2FkOiBib29sZWFuO1xuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIFtbZGVidWddXSBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHdpdGggdGV4dCBkZXNjcmliaW5nIHRva2VuIHN0cmVhbSB0b2tlbnNcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICB0b2tlbjogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIHZhbGlkIHR5cGVzIGFyZSBgZGVmYXVsdGAsIGBudGxtYCxcbiAgICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmRgLCBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW5gLFxuICAgKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm1gLCBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2VgLFxuICAgKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0YFxuICAgKiBvciBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXRgXG4gICAqL1xuICB0eXBlPzogQXV0aGVudGljYXRpb25UeXBlO1xuICAvKipcbiAgICogRGlmZmVyZW50IG9wdGlvbnMgZm9yIGF1dGhlbnRpY2F0aW9uIHR5cGVzOlxuICAgKlxuICAgKiAqIGBkZWZhdWx0YDogW1tEZWZhdWx0QXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYG50bG1gIDpbW050bG1BdXRoZW50aWNhdGlvbl1dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmRgIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuYCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlBY2Nlc3NUb2tlbkF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bWAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5TXNpVm1BdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2VgIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXRgIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdGAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5RGVmYXVsdEF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKi9cbiAgb3B0aW9ucz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0byByb2xsYmFjayBhIHRyYW5zYWN0aW9uIGF1dG9tYXRpY2FsbHkgaWYgYW55IGVycm9yIGlzIGVuY291bnRlcmVkXG4gICAqIGR1cmluZyB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24ncyBleGVjdXRpb24uIFRoaXMgc2V0cyB0aGUgdmFsdWUgZm9yIGBTRVQgWEFDVF9BQk9SVGAgZHVyaW5nIHRoZVxuICAgKiBpbml0aWFsIFNRTCBwaGFzZSBvZiBhIGNvbm5lY3Rpb24gW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC14YWN0LWFib3J0LXRyYW5zYWN0LXNxbCkuXG4gICAqL1xuICBhYm9ydFRyYW5zYWN0aW9uT25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFwcGxpY2F0aW9uIG5hbWUgdXNlZCBmb3IgaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBpbiBwcm9maWxpbmcsIGxvZ2dpbmcgb3IgdHJhY2luZyB0b29scyBvZiBTUUxTZXJ2ZXIuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgVGVkaW91c2ApXG4gICAqL1xuICBhcHBOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGNvbnRyb2xsaW5nIHdoZXRoZXIgdGhlIGNvbHVtbiBuYW1lcyByZXR1cm5lZCB3aWxsIGhhdmUgdGhlIGZpcnN0IGxldHRlciBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZVxuICAgKiAoYHRydWVgKSBvciBub3QuIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBpZiB5b3UgcHJvdmlkZSBhIFtbY29sdW1uTmFtZVJlcGxhY2VyXV0uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIGNhbWVsQ2FzZUNvbHVtbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIFtbUmVxdWVzdC5jYW5jZWxdXSAoYWJvcnQpIG9mIGEgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZFxuICAgKlxuICAgKiAoZGVmYXVsdDogYDUwMDBgKS5cbiAgICovXG4gIGNhbmNlbFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gd2l0aCBwYXJhbWV0ZXJzIGAoY29sdW1uTmFtZSwgaW5kZXgsIGNvbHVtbk1ldGFEYXRhKWAgYW5kIHJldHVybmluZyBhIHN0cmluZy4gSWYgcHJvdmlkZWQsXG4gICAqIHRoaXMgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIgY29sdW1uIHBlciByZXN1bHQtc2V0LiBUaGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIFNRTC1wcm92aWRlZFxuICAgKiBjb2x1bW4gbmFtZSBvbiByb3cgYW5kIG1ldGEgZGF0YSBvYmplY3RzLiBUaGlzIGFsbG93cyB5b3UgdG8gZHluYW1pY2FsbHkgY29udmVydCBiZXR3ZWVuIG5hbWluZyBjb252ZW50aW9ucy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBudWxsYClcbiAgICovXG4gIGNvbHVtbk5hbWVSZXBsYWNlcj86IChjb2xOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSByZXRyeWluZyB0byBlc3RhYmxpc2ggY29ubmVjdGlvbiwgaW4gY2FzZSBvZiB0cmFuc2llbnQgZmFpbHVyZS5cbiAgICpcbiAgICogKGRlZmF1bHQ6YDUwMGApXG4gICAqL1xuICBjb25uZWN0aW9uUmV0cnlJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogQ3VzdG9tIGNvbm5lY3RvciBmYWN0b3J5IG1ldGhvZC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB1bmRlZmluZWRgKVxuICAgKi9cbiAgY29ubmVjdG9yPzogKCkgPT4gUHJvbWlzZTxTb2NrZXQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGF0dGVtcHQgdG8gY29ubmVjdCBpcyBjb25zaWRlcmVkIGZhaWxlZFxuICAgKlxuICAgKiAoZGVmYXVsdDogYDE1MDAwYCkuXG4gICAqL1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgaXNvbGF0aW9uIGxldmVsIGZvciBuZXcgY29ubmVjdGlvbnMuIEFsbCBvdXQtb2YtdHJhbnNhY3Rpb24gcXVlcmllcyBhcmUgZXhlY3V0ZWQgd2l0aCB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIFRoZSBpc29sYXRpb24gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLklTT0xBVElPTl9MRVZFTGAuXG4gICAqICogYFJFQURfVU5DT01NSVRURURgXG4gICAqICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAqIGBSRVBFQVRBQkxFX1JFQURgXG4gICAqICogYFNFUklBTElaQUJMRWBcbiAgICogKiBgU05BUFNIT1RgXG4gICAqXG4gICAqIChkZWZhdWx0OiBgUkVBRF9DT01NSVRFRGApLlxuICAgKi9cbiAgY29ubmVjdGlvbklzb2xhdGlvbkxldmVsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuY3J5cHRpb24gaXMgdXNlZCwgYW4gb2JqZWN0IG1heSBiZSBzdXBwbGllZCB0aGF0IHdpbGwgYmUgdXNlZFxuICAgKiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50IHdoZW4gY2FsbGluZyBbYHRscy5jcmVhdGVTZWN1cmVQYWlyYF0oaHR0cDovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3Rscy5odG1sI3Rsc190bHNfY3JlYXRlc2VjdXJlcGFpcl9jcmVkZW50aWFsc19pc3NlcnZlcl9yZXF1ZXN0Y2VydF9yZWplY3R1bmF1dGhvcml6ZWQpXG4gICAqXG4gICAqIChkZWZhdWx0OiBge31gKVxuICAgKi9cbiAgY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzPzogU2VjdXJlQ29udGV4dE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQ6IGRlcGVuZGVudCBvbiBzZXJ2ZXIgY29uZmlndXJhdGlvbikuXG4gICAqL1xuICBkYXRhYmFzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIHRvIGEgbnVtYmVyIGZyb20gMSB0aHJvdWdoIDcuXG4gICAqL1xuICBkYXRlZmlyc3Q/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyBwb3NpdGlvbiBvZiBtb250aCwgZGF5IGFuZCB5ZWFyIGluIHRlbXBvcmFsIGRhdGF0eXBlcy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBtZHlgKVxuICAgKi9cbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcblxuICBkZWJ1Zz86IERlYnVnT3B0aW9ucztcblxuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9scyB0aGUgd2F5IG51bGwgdmFsdWVzIHNob3VsZCBiZSB1c2VkIGR1cmluZyBjb21wYXJpc29uIG9wZXJhdGlvbi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFuc2lOdWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgYFNFVCBBTlNJX05VTExfREZMVF9PTiBPTmAgd2lsbCBiZSBzZXQgaW4gdGhlIGluaXRpYWwgc3FsLiBUaGlzIG1lYW5zIG5ldyBjb2x1bW5zIHdpbGwgYmVcbiAgICogbnVsbGFibGUgYnkgZGVmYXVsdC4gU2VlIHRoZSBbVC1TUUwgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4NzM3NS5hc3B4KVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKS5cbiAgICovXG4gIGVuYWJsZUFuc2lOdWxsRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbHMgaWYgcGFkZGluZyBzaG91bGQgYmUgYXBwbGllZCBmb3IgdmFsdWVzIHNob3J0ZXIgdGhhbiB0aGUgc2l6ZSBvZiBkZWZpbmVkIGNvbHVtbi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFuc2lQYWRkaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgU1FMIFNlcnZlciB3aWxsIGZvbGxvdyBJU08gc3RhbmRhcmQgYmVoYXZpb3IgZHVyaW5nIHZhcmlvdXMgZXJyb3IgY29uZGl0aW9ucy4gRm9yIGRldGFpbHMsXG4gICAqIHNlZSBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL3N0YXRlbWVudHMvc2V0LWFuc2ktd2FybmluZ3MtdHJhbnNhY3Qtc3FsKVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlQW5zaVdhcm5pbmdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5kcyBhIHF1ZXJ5IHdoZW4gYW4gb3ZlcmZsb3cgb3IgZGl2aWRlLWJ5LXplcm8gZXJyb3Igb2NjdXJzIGR1cmluZyBxdWVyeSBleGVjdXRpb24uXG4gICAqIFNlZSBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL3N0YXRlbWVudHMvc2V0LWFyaXRoYWJvcnQtdHJhbnNhY3Qtc3FsP3ZpZXc9c3FsLXNlcnZlci0yMDE3KVxuICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlQXJpdGhBYm9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgZGV0ZXJtaW5lcyBpZiBjb25jYXRlbmF0aW9uIHdpdGggTlVMTCBzaG91bGQgcmVzdWx0IGluIE5VTEwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlLCBtb3JlIGRldGFpbHMgaW5cbiAgICogW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC1jb25jYXQtbnVsbC15aWVsZHMtbnVsbC10cmFuc2FjdC1zcWwpXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVDb25jYXROdWxsWWllbGRzTnVsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbHMgd2hldGhlciBjdXJzb3Igc2hvdWxkIGJlIGNsb3NlZCwgaWYgdGhlIHRyYW5zYWN0aW9uIG9wZW5pbmcgaXQgZ2V0cyBjb21taXR0ZWQgb3Igcm9sbGVkXG4gICAqIGJhY2suXG4gICAqXG4gICAqIChkZWZhdWx0OiBgbnVsbGApXG4gICAqL1xuICBlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0PzogYm9vbGVhbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgc2V0cyB0aGUgY29ubmVjdGlvbiB0byBlaXRoZXIgaW1wbGljaXQgb3IgYXV0b2NvbW1pdCB0cmFuc2FjdGlvbiBtb2RlLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGVycm9yIGlzIG5vdCBnZW5lcmF0ZWQgZHVyaW5nIGxvc3Mgb2YgcHJlY2Vzc2lvbi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBlbmFibGVOdW1lcmljUm91bmRhYm9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGNoYXJhY3RlcnMgZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3RlcyBhcmUgdHJlYXRlZCBhcyBsaXRlcmFscyBhbmQgdGhvc2UgZW5jbG9zZWQgZG91YmxlIHF1b3RlcyBhcmUgdHJlYXRlZCBhcyBpZGVudGlmaWVycy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZVF1b3RlZElkZW50aWZpZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBvciBub3QgdGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBlbmNyeXB0ZWQuIFNldCB0byBgdHJ1ZWAgaWYgeW91J3JlIG9uIFdpbmRvd3MgQXp1cmUuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZW5jcnlwdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIHRoZSBkYXRhYmFzZSByZXF1ZXN0ZWQgYnkgW1tkYXRhYmFzZV1dIGNhbm5vdCBiZSBhY2Nlc3NlZCxcbiAgICogdGhlIGNvbm5lY3Rpb24gd2lsbCBmYWlsIHdpdGggYW4gZXJyb3IuIEhvd2V2ZXIsIGlmIFtbZmFsbGJhY2tUb0RlZmF1bHREYl1dIGlzXG4gICAqIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlIHVzZXIncyBkZWZhdWx0IGRhdGFiYXNlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmFsbGJhY2tUb0RlZmF1bHREYj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSBuYW1lIHRvIGNvbm5lY3QgdG8uXG4gICAqIFRoZSBTUUwgU2VydmVyIEJyb3dzZXIgc2VydmljZSBtdXN0IGJlIHJ1bm5pbmcgb24gdGhlIGRhdGFiYXNlIHNlcnZlcixcbiAgICogYW5kIFVEUCBwb3J0IDE0MzQgb24gdGhlIGRhdGFiYXNlIHNlcnZlciBtdXN0IGJlIHJlYWNoYWJsZS5cbiAgICpcbiAgICogKG5vIGRlZmF1bHQpXG4gICAqXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFtbcG9ydF1dLlxuICAgKi9cbiAgaW5zdGFuY2VOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpc29sYXRpb24gbGV2ZWwgdGhhdCB0cmFuc2FjdGlvbnMgd2lsbCBiZSBydW4gd2l0aC5cbiAgICpcbiAgICogVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogKiBgUkVBRF9VTkNPTU1JVFRFRGBcbiAgICogKiBgUkVBRF9DT01NSVRURURgXG4gICAqICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogKiBgU0VSSUFMSVpBQkxFYFxuICAgKiAqIGBTTkFQU0hPVGBcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBSRUFEX0NPTU1JVEVEYCkuXG4gICAqL1xuICBpc29sYXRpb25MZXZlbD86IG51bWJlcjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsYW5ndWFnZSBlbnZpcm9ubWVudCBmb3IgdGhlIHNlc3Npb24uIFRoZSBzZXNzaW9uIGxhbmd1YWdlIGRldGVybWluZXMgdGhlIGRhdGV0aW1lIGZvcm1hdHMgYW5kIHN5c3RlbSBtZXNzYWdlcy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB1c19lbmdsaXNoYCkuXG4gICAqL1xuICBsYW5ndWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdHJpbmcgaW5kaWNhdGluZyB3aGljaCBuZXR3b3JrIGludGVyZmFjZSAoaXAgYWRkcmVzcykgdG8gdXNlIHdoZW4gY29ubmVjdGluZyB0byBTUUwgU2VydmVyLlxuICAgKi9cbiAgbG9jYWxBZGRyZXNzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0byBwYXJzZSB1bmlxdWUgaWRlbnRpZmllciB0eXBlIHdpdGggbG93ZXJjYXNlIGNhc2UgY2hhcmFjdGVycy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKi9cbiAgbG93ZXJDYXNlR3VpZHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbiByZXRyaWVzIGZvciB0cmFuc2llbnQgZXJyb3JzLuOAgVxuICAgKlxuICAgKiAoZGVmYXVsdDogYDNgKS5cbiAgICovXG4gIG1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycz86IG51bWJlcjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgTXVsdGlTdWJuZXRGYWlsb3ZlciA9IFRydWUgcGFyYW1ldGVyLCB3aGljaCBjYW4gaGVscCBtaW5pbWl6ZSB0aGUgY2xpZW50IHJlY292ZXJ5IGxhdGVuY3kgd2hlbiBmYWlsb3ZlcnMgb2NjdXIuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIG11bHRpU3VibmV0RmFpbG92ZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiBURFMgcGFja2V0cyAoc3ViamVjdCB0byBuZWdvdGlhdGlvbiB3aXRoIHRoZSBzZXJ2ZXIpLlxuICAgKiBTaG91bGQgYmUgYSBwb3dlciBvZiAyLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYDQwOTZgKS5cbiAgICovXG4gIHBhY2tldFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBvcnQgdG8gY29ubmVjdCB0byAoZGVmYXVsdDogYDE0MzNgKS5cbiAgICpcbiAgICogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggW1tpbnN0YW5jZU5hbWVdXVxuICAgKi9cbiAgcG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBib29sZWFuLCBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIHdpbGwgcmVxdWVzdCByZWFkIG9ubHkgYWNjZXNzIGZyb20gYSBTUUwgU2VydmVyIEF2YWlsYWJpbGl0eVxuICAgKiBHcm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbaGVyZV0oaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoNzEwMDU0LmFzcHggXCJNaWNyb3NvZnQ6IENvbmZpZ3VyZSBSZWFkLU9ubHkgUm91dGluZyBmb3IgYW4gQXZhaWxhYmlsaXR5IEdyb3VwIChTUUwgU2VydmVyKVwiKVxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICByZWFkT25seUludGVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSBhIHJlcXVlc3QgaXMgY29uc2lkZXJlZCBmYWlsZWQsIG9yIGAwYCBmb3Igbm8gdGltZW91dFxuICAgKlxuICAgKiAoZGVmYXVsdDogYDE1MDAwYCkuXG4gICAqL1xuICByZXF1ZXN0VGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBib29sZWFuLCB0aGF0IHdoZW4gdHJ1ZSB3aWxsIGV4cG9zZSByZWNlaXZlZCByb3dzIGluIFJlcXVlc3RzIGRvbmUgcmVsYXRlZCBldmVudHM6XG4gICAqICogW1tSZXF1ZXN0LkV2ZW50X2RvbmVJblByb2NdXVxuICAgKiAqIFtbUmVxdWVzdC5FdmVudF9kb25lUHJvY11dXG4gICAqICogW1tSZXF1ZXN0LkV2ZW50X2RvbmVdXVxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICpcbiAgICogQ2F1dGlvbjogSWYgbWFueSByb3cgYXJlIHJlY2VpdmVkLCBlbmFibGluZyB0aGlzIG9wdGlvbiBjb3VsZCByZXN1bHQgaW5cbiAgICogZXhjZXNzaXZlIG1lbW9yeSB1c2FnZS5cbiAgICovXG4gIHJvd0NvbGxlY3Rpb25PbkRvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIHRoYXQgd2hlbiB0cnVlIHdpbGwgZXhwb3NlIHJlY2VpdmVkIHJvd3MgaW4gUmVxdWVzdHMnIGNvbXBsZXRpb24gY2FsbGJhY2suU2VlIFtbUmVxdWVzdC5jb25zdHJ1Y3Rvcl1dLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICpcbiAgICogQ2F1dGlvbjogSWYgbWFueSByb3cgYXJlIHJlY2VpdmVkLCBlbmFibGluZyB0aGlzIG9wdGlvbiBjb3VsZCByZXN1bHQgaW5cbiAgICogZXhjZXNzaXZlIG1lbW9yeSB1c2FnZS5cbiAgICovXG4gIHJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgVERTIHRvIHVzZS4gSWYgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBzcGVjaWZpZWQgdmVyc2lvbiwgbmVnb3RpYXRlZCB2ZXJzaW9uIGlzIHVzZWQgaW5zdGVhZC5cbiAgICpcbiAgICogVGhlIHZlcnNpb25zIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLlREU19WRVJTSU9OYC5cbiAgICogKiBgN18xYFxuICAgKiAqIGA3XzJgXG4gICAqICogYDdfM19BYFxuICAgKiAqIGA3XzNfQmBcbiAgICogKiBgN180YFxuICAgKlxuICAgKiAoZGVmYXVsdDogYDdfNGApXG4gICAqL1xuICB0ZHNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdmFyY2hhcihtYXgpLCBudmFyY2hhcihtYXgpLCB2YXJiaW5hcnkobWF4KSwgdGV4dCwgbnRleHQsIGFuZCBpbWFnZSBkYXRhIHJldHVybmVkIGJ5IGEgU0VMRUNUIHN0YXRlbWVudC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGAyMTQ3NDgzNjQ3YClcbiAgICovXG4gIHRleHRzaXplPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBcInRydWVcIiwgdGhlIFNRTCBTZXJ2ZXIgU1NMIGNlcnRpZmljYXRlIGlzIGF1dG9tYXRpY2FsbHkgdHJ1c3RlZCB3aGVuIHRoZSBjb21tdW5pY2F0aW9uIGxheWVyIGlzIGVuY3J5cHRlZCB1c2luZyBTU0wuXG4gICAqXG4gICAqIElmIFwiZmFsc2VcIiwgdGhlIFNRTCBTZXJ2ZXIgdmFsaWRhdGVzIHRoZSBzZXJ2ZXIgU1NMIGNlcnRpZmljYXRlLiBJZiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZmFpbHMsXG4gICAqIHRoZSBkcml2ZXIgcmFpc2VzIGFuIGVycm9yIGFuZCB0ZXJtaW5hdGVzIHRoZSBjb25uZWN0aW9uLiBNYWtlIHN1cmUgdGhlIHZhbHVlIHBhc3NlZCB0byBzZXJ2ZXJOYW1lIGV4YWN0bHlcbiAgICogbWF0Y2hlcyB0aGUgQ29tbW9uIE5hbWUgKENOKSBvciBETlMgbmFtZSBpbiB0aGUgU3ViamVjdCBBbHRlcm5hdGUgTmFtZSBpbiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGZvciBhbiBTU0wgY29ubmVjdGlvbiB0byBzdWNjZWVkLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHJldHVybiByb3dzIGFzIGFycmF5cyBvciBrZXktdmFsdWUgY29sbGVjdGlvbnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIHVzZUNvbHVtbk5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcGFzcyB0aW1lIHZhbHVlcyBpbiBVVEMgb3IgbG9jYWwgdGltZS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYCkuXG4gICAqL1xuICB1c2VVVEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3N0YXRpb24gSUQgKFdTSUQpIG9mIHRoZSBjbGllbnQsIGRlZmF1bHQgb3MuaG9zdG5hbWUoKS5cbiAgICogVXNlZCBmb3IgaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBjbGllbnQgaW4gcHJvZmlsaW5nLCBsb2dnaW5nIG9yXG4gICAqIHRyYWNpbmcgY2xpZW50IGFjdGl2aXR5IGluIFNRTFNlcnZlci5cbiAgICpcbiAgICogVGhlIHZhbHVlIGlzIHJlcG9ydGVkIGJ5IHRoZSBUU1FMIGZ1bmN0aW9uIEhPU1RfTkFNRSgpLlxuICAgKi9cbiAgd29ya3N0YXRpb25JZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBDTEVBTlVQX1RZUEUgPSB7XG4gIE5PUk1BTDogMCxcbiAgUkVESVJFQ1Q6IDEsXG4gIFJFVFJZOiAyXG59O1xuXG5pbnRlcmZhY2UgUm91dGluZ0RhdGEge1xuICBzZXJ2ZXI6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgW1tDb25uZWN0aW9uXV0gaW5zdGFuY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2Ugc2VydmVyLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgQ29ubmVjdGlvbiA9IHJlcXVpcmUoJ3RlZGlvdXMnKS5Db25uZWN0aW9uO1xuICogdmFyIGNvbmZpZyA9IHtcbiAqICBcImF1dGhlbnRpY2F0aW9uXCI6IHtcbiAqICAgIC4uLixcbiAqICAgIFwib3B0aW9uc1wiOiB7Li4ufVxuICogIH0sXG4gKiAgXCJvcHRpb25zXCI6IHsuLi59XG4gKiB9O1xuICogdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihjb25maWcpO1xuICogYGBgXG4gKlxuICogT25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbi4gT25jZSBhIFtbUmVxdWVzdF1dXG4gKiBoYXMgYmVlbiBpbml0aWF0ZWQgKHdpdGggW1tDb25uZWN0aW9uLmNhbGxQcm9jZWR1cmVdXSwgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXSxcbiAqIG9yIFtbQ29ubmVjdGlvbi5leGVjU3FsQmF0Y2hdXSksIGFub3RoZXIgc2hvdWxkIG5vdCBiZSBpbml0aWF0ZWQgdW50aWwgdGhlXG4gKiBbW1JlcXVlc3RdXSdzIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLlxuICovXG5jbGFzcyBDb25uZWN0aW9uIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmZWRBdXRoUmVxdWlyZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uZmlnOiBJbnRlcm5hbENvbm5lY3Rpb25Db25maWc7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2VjdXJlQ29udGV4dE9wdGlvbnM6IFNlY3VyZUNvbnRleHRPcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluVHJhbnNhY3Rpb246IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJhbnNhY3Rpb25EZXNjcmlwdG9yczogQnVmZmVyW107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJhbnNhY3Rpb25EZXB0aDogbnVtYmVyO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzU3FsQmF0Y2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3VyVHJhbnNpZW50UmV0cnlDb3VudDogbnVtYmVyO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyYW5zaWVudEVycm9yTG9va3VwOiBUcmFuc2llbnRFcnJvckxvb2t1cDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbG9zZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbG9naW5FcnJvcjogdW5kZWZpbmVkIHwgQWdncmVnYXRlRXJyb3IgfCBDb25uZWN0aW9uRXJyb3I7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVidWc6IERlYnVnO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG50bG1wYWNrZXQ6IHVuZGVmaW5lZCB8IGFueTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBudGxtcGFja2V0QnVmZmVyOiB1bmRlZmluZWQgfCBCdWZmZXI7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIFNUQVRFOiB7XG4gICAgSU5JVElBTElaRUQ6IFN0YXRlO1xuICAgIENPTk5FQ1RJTkc6IFN0YXRlO1xuICAgIFNFTlRfUFJFTE9HSU46IFN0YXRlO1xuICAgIFJFUk9VVElORzogU3RhdGU7XG4gICAgVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlk6IFN0YXRlO1xuICAgIFNFTlRfVExTU1NMTkVHT1RJQVRJT046IFN0YXRlO1xuICAgIFNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU46IFN0YXRlO1xuICAgIFNFTlRfTE9HSU43X1dJVEhfTlRMTTogU3RhdGU7XG4gICAgU0VOVF9MT0dJTjdfV0lUSF9GRURBVVRIOiBTdGF0ZTtcbiAgICBMT0dHRURfSU5fU0VORElOR19JTklUSUFMX1NRTDogU3RhdGU7XG4gICAgTE9HR0VEX0lOOiBTdGF0ZTtcbiAgICBTRU5UX0NMSUVOVF9SRVFVRVNUOiBTdGF0ZTtcbiAgICBTRU5UX0FUVEVOVElPTjogU3RhdGU7XG4gICAgRklOQUw6IFN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByb3V0aW5nRGF0YTogdW5kZWZpbmVkIHwgUm91dGluZ0RhdGE7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtZXNzYWdlSW8hOiBNZXNzYWdlSU87XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGU6IFN0YXRlO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3Q6IHVuZGVmaW5lZCB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXF1ZXN0OiB1bmRlZmluZWQgfCBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiB1bmRlZmluZWQgfCBhbnk7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29ja2V0OiB1bmRlZmluZWQgfCBTb2NrZXQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWVzc2FnZUJ1ZmZlcjogQnVmZmVyO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29ubmVjdFRpbWVyOiB1bmRlZmluZWQgfCBOb2RlSlMuVGltZW91dDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxUaW1lcjogdW5kZWZpbmVkIHwgTm9kZUpTLlRpbWVvdXQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVxdWVzdFRpbWVyOiB1bmRlZmluZWQgfCBOb2RlSlMuVGltZW91dDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXRyeVRpbWVyOiB1bmRlZmluZWQgfCBOb2RlSlMuVGltZW91dDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYW5jZWxBZnRlclJlcXVlc3RTZW50OiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGF0YWJhc2VDb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTm90ZTogYmUgYXdhcmUgb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGZpZWxkOlxuICAgKiAxLiBjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9uc1xuICAgKiAyLiBjb25maWcub3B0aW9uc1xuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCB7IENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJ3RlZGlvdXMnKTtcbiAgICpcbiAgICogY29uc3QgY29uZmlnID0ge1xuICAgKiAgXCJhdXRoZW50aWNhdGlvblwiOiB7XG4gICAqICAgIC4uLixcbiAgICogICAgXCJvcHRpb25zXCI6IHsuLi59XG4gICAqICB9LFxuICAgKiAgXCJvcHRpb25zXCI6IHsuLi59XG4gICAqIH07XG4gICAqXG4gICAqIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihjb25maWcpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb25uZWN0aW9uQ29uZmlndXJhdGlvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcgfHwgY29uZmlnID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWdcIiBhcmd1bWVudCBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5zZXJ2ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuc2VydmVyXCIgcHJvcGVydHkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5mZWRBdXRoUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIGxldCBhdXRoZW50aWNhdGlvbjogSW50ZXJuYWxDb25uZWN0aW9uQ29uZmlnWydhdXRoZW50aWNhdGlvbiddO1xuICAgIGlmIChjb25maWcuYXV0aGVudGljYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcuYXV0aGVudGljYXRpb24gIT09ICdvYmplY3QnIHx8IGNvbmZpZy5hdXRoZW50aWNhdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb25cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlID0gY29uZmlnLmF1dGhlbnRpY2F0aW9uLnR5cGU7XG4gICAgICBjb25zdCBvcHRpb25zID0gY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHt9IDogY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnM7XG5cbiAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLnR5cGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSAhPT0gJ2RlZmF1bHQnICYmIHR5cGUgIT09ICdudGxtJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCcgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZScgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ0eXBlXCIgcHJvcGVydHkgbXVzdCBvbmUgb2YgXCJkZWZhdWx0XCIsIFwibnRsbVwiLCBcImF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmRcIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlblwiLCBcImF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdFwiLCBcImF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtXCIgb3IgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZVwiIG9yIFwiYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXRcIi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG9iamVjdC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdudGxtJykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZG9tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmRvbWFpblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy51c2VyTmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnVzZXJOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMucGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ250bG0nLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICBkb21haW46IG9wdGlvbnMuZG9tYWluICYmIG9wdGlvbnMuZG9tYWluLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudXNlck5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy51c2VyTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYXNzd29yZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnBhc3N3b3JkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnRlbmFudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudGVuYW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZCxcbiAgICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy50b2tlblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRva2VuOiBvcHRpb25zLnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jbGllbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZScpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jbGllbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jbGllbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xpZW50U2VjcmV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudFNlY3JldFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGVuYW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgICAgIGNsaWVudFNlY3JldDogb3B0aW9ucy5jbGllbnRTZWNyZXQsXG4gICAgICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZXJOYW1lICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudXNlck5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudXNlck5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFzc3dvcmQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5wYXNzd29yZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoZW50aWNhdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdXNlck5hbWU6IG9wdGlvbnMudXNlck5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHVzZXJOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGFzc3dvcmQ6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgc2VydmVyOiBjb25maWcuc2VydmVyLFxuICAgICAgYXV0aGVudGljYXRpb246IGF1dGhlbnRpY2F0aW9uLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhYm9ydFRyYW5zYWN0aW9uT25FcnJvcjogZmFsc2UsXG4gICAgICAgIGFwcE5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FtZWxDYXNlQ29sdW1uczogZmFsc2UsXG4gICAgICAgIGNhbmNlbFRpbWVvdXQ6IERFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQsXG4gICAgICAgIGNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTDogMiAqIDYwICogNjAgKiAxMDAwLCAgLy8gVW5pdHM6IG1pbGlzZWNvbmRzXG4gICAgICAgIGNvbHVtbkVuY3J5cHRpb25TZXR0aW5nOiBmYWxzZSxcbiAgICAgICAgY29sdW1uTmFtZVJlcGxhY2VyOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUludGVydmFsOiBERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwsXG4gICAgICAgIGNvbm5lY3RUaW1lb3V0OiBERUZBVUxUX0NPTk5FQ1RfVElNRU9VVCxcbiAgICAgICAgY29ubmVjdG9yOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbDogSVNPTEFUSU9OX0xFVkVMLlJFQURfQ09NTUlUVEVELFxuICAgICAgICBjcnlwdG9DcmVkZW50aWFsc0RldGFpbHM6IHt9LFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgICBkYXRlZmlyc3Q6IERFRkFVTFRfREFURUZJUlNULFxuICAgICAgICBkYXRlRm9ybWF0OiBERUZBVUxUX0RBVEVGT1JNQVQsXG4gICAgICAgIGRlYnVnOiB7XG4gICAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgICAgcGFja2V0OiBmYWxzZSxcbiAgICAgICAgICBwYXlsb2FkOiBmYWxzZSxcbiAgICAgICAgICB0b2tlbjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlQW5zaU51bGw6IHRydWUsXG4gICAgICAgIGVuYWJsZUFuc2lOdWxsRGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQW5zaVBhZGRpbmc6IHRydWUsXG4gICAgICAgIGVuYWJsZUFuc2lXYXJuaW5nczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQXJpdGhBYm9ydDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGw6IHRydWUsXG4gICAgICAgIGVuYWJsZUN1cnNvckNsb3NlT25Db21taXQ6IG51bGwsXG4gICAgICAgIGVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQ6IGZhbHNlLFxuICAgICAgICBlbmFibGVRdW90ZWRJZGVudGlmaWVyOiB0cnVlLFxuICAgICAgICBlbmNyeXB0OiB0cnVlLFxuICAgICAgICBmYWxsYmFja1RvRGVmYXVsdERiOiBmYWxzZSxcbiAgICAgICAgZW5jcnlwdGlvbktleVN0b3JlUHJvdmlkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIGluc3RhbmNlTmFtZTogdW5kZWZpbmVkLFxuICAgICAgICBpc29sYXRpb25MZXZlbDogSVNPTEFUSU9OX0xFVkVMLlJFQURfQ09NTUlUVEVELFxuICAgICAgICBsYW5ndWFnZTogREVGQVVMVF9MQU5HVUFHRSxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJldHJpZXNPblRyYW5zaWVudEVycm9yczogMyxcbiAgICAgICAgbXVsdGlTdWJuZXRGYWlsb3ZlcjogZmFsc2UsXG4gICAgICAgIHBhY2tldFNpemU6IERFRkFVTFRfUEFDS0VUX1NJWkUsXG4gICAgICAgIHBvcnQ6IERFRkFVTFRfUE9SVCxcbiAgICAgICAgcmVhZE9ubHlJbnRlbnQ6IGZhbHNlLFxuICAgICAgICByZXF1ZXN0VGltZW91dDogREVGQVVMVF9DTElFTlRfUkVRVUVTVF9USU1FT1VULFxuICAgICAgICByb3dDb2xsZWN0aW9uT25Eb25lOiBmYWxzZSxcbiAgICAgICAgcm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb246IGZhbHNlLFxuICAgICAgICBzZXJ2ZXJOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIHNlcnZlclN1cHBvcnRzQ29sdW1uRW5jcnlwdGlvbjogZmFsc2UsXG4gICAgICAgIHRkc1ZlcnNpb246IERFRkFVTFRfVERTX1ZFUlNJT04sXG4gICAgICAgIHRleHRzaXplOiBERUZBVUxUX1RFWFRTSVpFLFxuICAgICAgICB0cnVzdGVkU2VydmVyTmFtZUFFOiB1bmRlZmluZWQsXG4gICAgICAgIHRydXN0U2VydmVyQ2VydGlmaWNhdGU6IGZhbHNlLFxuICAgICAgICB1c2VDb2x1bW5OYW1lczogZmFsc2UsXG4gICAgICAgIHVzZVVUQzogdHJ1ZSxcbiAgICAgICAgd29ya3N0YXRpb25JZDogdW5kZWZpbmVkLFxuICAgICAgICBsb3dlckNhc2VHdWlkczogZmFsc2VcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy5vcHRpb25zKSB7XG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucG9ydCAmJiBjb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb3J0IGFuZCBpbnN0YW5jZU5hbWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYnV0ICcgKyBjb25maWcub3B0aW9ucy5wb3J0ICsgJyBhbmQgJyArIGNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSArICcgcHJvdmlkZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3JcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yID0gY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5hcHBOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5hcHBOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmFwcE5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5hcHBOYW1lID0gY29uZmlnLm9wdGlvbnMuYXBwTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNhbWVsQ2FzZUNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNhbWVsQ2FzZUNvbHVtbnMgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNhbWVsQ2FzZUNvbHVtbnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucyA9IGNvbmZpZy5vcHRpb25zLmNhbWVsQ2FzZUNvbHVtbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0ID0gY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgZnVuY3Rpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlciA9IGNvbmZpZy5vcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwoY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsLCAnY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsJyk7XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwgPSBjb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dCA9IGNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jb25uZWN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jb25uZWN0b3JcIiBwcm9wZXJ0eSBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3RvciA9IGNvbmZpZy5vcHRpb25zLmNvbm5lY3RvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzICE9PSAnb2JqZWN0JyB8fCBjb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHMgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHMgPSBjb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5kYXRhYmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGF0YWJhc2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGF0YWJhc2VcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kYXRhYmFzZSA9IGNvbmZpZy5vcHRpb25zLmRhdGFiYXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09ICdudW1iZXInICYmIGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ICE9PSBudWxsICYmIChjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgPCAxIHx8IGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCA+IDcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdFwiIHByb3BlcnR5IG11c3QgYmUgPj0gMSBhbmQgPD0gNycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kYXRlZmlyc3QgPSBjb25maWcub3B0aW9ucy5kYXRlZmlyc3Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5kYXRlRm9ybWF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kYXRlRm9ybWF0ICE9PSAnc3RyaW5nJyAmJiBjb25maWcub3B0aW9ucy5kYXRlRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCA9IGNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRlYnVnLmRhdGFcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRlYnVnLmRhdGEgPSBjb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnLnBhY2tldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kZWJ1Zy5wYWNrZXQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zy5wYWNrZXQgPSBjb25maWcub3B0aW9ucy5kZWJ1Zy5wYWNrZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRlYnVnLnBheWxvYWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRlYnVnLnBheWxvYWQgPSBjb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnLnRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRlYnVnLnRva2VuICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRlYnVnLnRva2VuXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbiA9IGNvbmZpZy5vcHRpb25zLmRlYnVnLnRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgPSBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZ1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5nc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgPSBjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXJcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuY3J5cHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuY3J5cHQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuY3J5cHRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5jcnlwdCA9IGNvbmZpZy5vcHRpb25zLmVuY3J5cHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmZhbGxiYWNrVG9EZWZhdWx0RGIgPSBjb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lID0gY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lO1xuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5pc29sYXRpb25MZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFzc2VydFZhbGlkSXNvbGF0aW9uTGV2ZWwoY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwsICdjb25maWcub3B0aW9ucy5pc29sYXRpb25MZXZlbCcpO1xuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwgPSBjb25maWcub3B0aW9ucy5pc29sYXRpb25MZXZlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5sYW5ndWFnZSAhPT0gJ3N0cmluZycgJiYgY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5sYW5ndWFnZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgPSBjb25maWcub3B0aW9ucy5sYW5ndWFnZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMubG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcyA9IGNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXJcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubXVsdGlTdWJuZXRGYWlsb3ZlciA9IGNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5wYWNrZXRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5wYWNrZXRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnBhY2tldFNpemVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5wYWNrZXRTaXplID0gY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnBvcnQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucG9ydFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMucG9ydCA8PSAwIHx8IGNvbmZpZy5vcHRpb25zLnBvcnQgPj0gNjU1MzYpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucG9ydFwiIHByb3BlcnR5IG11c3QgYmUgPiAwIGFuZCA8IDY1NTM2Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgPSBjb25maWcub3B0aW9ucy5wb3J0O1xuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yZWFkT25seUludGVudCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQgPSBjb25maWcub3B0aW9ucy5yZWFkT25seUludGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0ID0gY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycyA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiAwLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgPSBjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWxcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbFwiIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsID0gY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUgPSBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiA9IGNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy50ZHNWZXJzaW9uXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA9IGNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy50ZXh0c2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMudGV4dHNpemUgIT09ICdudW1iZXInICYmIGNvbmZpZy5vcHRpb25zLnRleHRzaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGV4dHNpemVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMudGV4dHNpemUgPiAyMTQ3NDgzNjQ3KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGV4dHNpemVcIiBjYW5cXCd0IGJlIGdyZWF0ZXIgdGhhbiAyMTQ3NDgzNjQ3LicpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5vcHRpb25zLnRleHRzaXplIDwgLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy50ZXh0c2l6ZVwiIGNhblxcJ3QgYmUgc21hbGxlciB0aGFuIC0xLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy50ZXh0c2l6ZSA9IGNvbmZpZy5vcHRpb25zLnRleHRzaXplIHwgMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMudHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSA9IGNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzID0gY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy51c2VVVEMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnVzZVVUQyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudXNlVVRDXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnVzZVVUQyA9IGNvbmZpZy5vcHRpb25zLnVzZVVUQztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMud29ya3N0YXRpb25JZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWQgPSBjb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMubG93ZXJDYXNlR3VpZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmxvd2VyQ2FzZUd1aWRzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkcyA9IGNvbmZpZy5vcHRpb25zLmxvd2VyQ2FzZUd1aWRzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VjdXJlQ29udGV4dE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscztcbiAgICBpZiAodGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucy5zZWN1cmVPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIG5vdCBzcGVjaWZpZWQgdGhlaXIgb3duIGBzZWN1cmVPcHRpb25zYCxcbiAgICAgIC8vIHdlIHNldCBgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UU2AgaGVyZS5cbiAgICAgIC8vIE9sZGVyIFNRTCBTZXJ2ZXIgaW5zdGFuY2VzIHJ1bm5pbmcgb24gb2xkZXIgV2luZG93cyB2ZXJzaW9ucyBoYXZlXG4gICAgICAvLyB0cm91YmxlIHdpdGggdGhlIEJFQVNUIHdvcmthcm91bmQgaW4gT3BlblNTTC5cbiAgICAgIC8vIEFzIEJFQVNUIGlzIGEgYnJvd3NlciBzcGVjaWZpYyBleHBsb2l0LCB3ZSBjYW4ganVzdCBkaXNhYmxlIHRoaXMgb3B0aW9uIGhlcmUuXG4gICAgICB0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zLCB7XG4gICAgICAgIHNlY3VyZU9wdGlvbnM6IHtcbiAgICAgICAgICB2YWx1ZTogY29uc3RhbnRzLlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWJ1ZyA9IHRoaXMuY3JlYXRlRGVidWcoKTtcbiAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMgPSBbQnVmZmVyLmZyb20oWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKV07XG5cbiAgICAvLyAnYmVnaW5UcmFuc2FjdGlvbicsICdjb21taXRUcmFuc2FjdGlvbicgYW5kICdyb2xsYmFja1RyYW5zYWN0aW9uJ1xuICAgIC8vIGV2ZW50cyBhcmUgdXRpbGl6ZWQgdG8gbWFpbnRhaW4gaW5UcmFuc2FjdGlvbiBwcm9wZXJ0eSBzdGF0ZSB3aGljaCBpblxuICAgIC8vIHR1cm4gaXMgdXNlZCBpbiBtYW5hZ2luZyB0cmFuc2FjdGlvbnMuIFRoZXNlIGV2ZW50cyBhcmUgb25seSBmaXJlZCBmb3JcbiAgICAvLyBURFMgdmVyc2lvbiA3LjIgYW5kIGJleW9uZC4gVGhlIHByb3BlcnRpZXMgYmVsb3cgYXJlIHVzZWQgdG8gZW11bGF0ZVxuICAgIC8vIGVxdWl2YWxlbnQgYmVoYXZpb3IgZm9yIFREUyB2ZXJzaW9ucyBiZWZvcmUgNy4yLlxuICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCA9IDA7XG4gICAgdGhpcy5pc1NxbEJhdGNoID0gZmFsc2U7XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgICB0aGlzLmN1clRyYW5zaWVudFJldHJ5Q291bnQgPSAwO1xuICAgIHRoaXMudHJhbnNpZW50RXJyb3JMb29rdXAgPSBuZXcgVHJhbnNpZW50RXJyb3JMb29rdXAoKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLlNUQVRFLklOSVRJQUxJWkVEO1xuXG4gICAgdGhpcy5fY2FuY2VsQWZ0ZXJSZXF1ZXN0U2VudCA9ICgpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuQVRURU5USU9OKTtcbiAgICAgIHRoaXMuY3JlYXRlQ2FuY2VsVGltZXIoKTtcbiAgICB9O1xuICB9XG5cbiAgY29ubmVjdChjb25uZWN0TGlzdGVuZXI/OiAoZXJyPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5JTklUSUFMSVpFRCkge1xuICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FcnJvcignYC5jb25uZWN0YCBjYW4gbm90IGJlIGNhbGxlZCBvbiBhIENvbm5lY3Rpb24gaW4gYCcgKyB0aGlzLnN0YXRlLm5hbWUgKyAnYCBzdGF0ZS4nKTtcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdExpc3RlbmVyKSB7XG4gICAgICBjb25zdCBvbkNvbm5lY3QgPSAoZXJyPzogRXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgY29ubmVjdExpc3RlbmVyKGVycik7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkVycm9yID0gKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgICAgIGNvbm5lY3RMaXN0ZW5lcihlcnIpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICAgIHRoaXMub25jZSgnZXJyb3InLCBvbkVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkNPTk5FQ1RJTkcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIHJlcG9ydGVkIHRoYXQgdGhlIGNoYXJzZXQgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBvbihldmVudDogJ2NoYXJzZXRDaGFuZ2UnLCBsaXN0ZW5lcjogKGNoYXJzZXQ6IHN0cmluZykgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIGF0dGVtcHQgdG8gY29ubmVjdCBhbmQgdmFsaWRhdGUgaGFzIGNvbXBsZXRlZC5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnY29ubmVjdCcsXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGVyciBJZiBzdWNjZXNzZnVsbHkgY29ubmVjdGVkLCB3aWxsIGJlIGZhbHNleS4gSWYgdGhlcmUgd2FzIGFcbiAgICAgKiAgIHByb2JsZW0gKHdpdGggZWl0aGVyIGNvbm5lY3Rpbmcgb3IgdmFsaWRhdGlvbiksIHdpbGwgYmUgYW4gW1tFcnJvcl1dIG9iamVjdC5cbiAgICAgKi9cbiAgICBsaXN0ZW5lcjogKGVycjogRXJyb3IgfCB1bmRlZmluZWQpID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIGhhcyByZXBvcnRlZCB0aGF0IHRoZSBhY3RpdmUgZGF0YWJhc2UgaGFzIGNoYW5nZWQuXG4gICAqIFRoaXMgbWF5IGJlIGFzIGEgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBsb2dpbiwgb3IgYSBgdXNlYCBzdGF0ZW1lbnQuXG4gICAqL1xuICBvbihldmVudDogJ2RhdGFiYXNlQ2hhbmdlJywgbGlzdGVuZXI6IChkYXRhYmFzZU5hbWU6IHN0cmluZykgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogQSBkZWJ1ZyBtZXNzYWdlIGlzIGF2YWlsYWJsZS4gSXQgbWF5IGJlIGxvZ2dlZCBvciBpZ25vcmVkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdkZWJ1ZycsIGxpc3RlbmVyOiAobWVzc2FnZVRleHQ6IHN0cmluZykgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogSW50ZXJuYWwgZXJyb3Igb2NjdXJzLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlcnJvcicsIGxpc3RlbmVyOiAoZXJyOiBFcnJvcikgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgaXNzdWVkIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBvbihldmVudDogJ2Vycm9yTWVzc2FnZScsIGxpc3RlbmVyOiAobWVzc2FnZTogaW1wb3J0KCcuL3Rva2VuL3Rva2VuJykuRXJyb3JNZXNzYWdlVG9rZW4pID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIGhhcyBlbmRlZC5cbiAgICpcbiAgICogVGhpcyBtYXkgYmUgYXMgYSByZXN1bHQgb2YgdGhlIGNsaWVudCBjYWxsaW5nIFtbY2xvc2VdXSwgdGhlIHNlcnZlclxuICAgKiBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLCBvciBhIG5ldHdvcmsgZXJyb3IuXG4gICAqL1xuICBvbihldmVudDogJ2VuZCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIGhhcyBpc3N1ZWQgYW4gaW5mb3JtYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIG9uKGV2ZW50OiAnaW5mb01lc3NhZ2UnLCBsaXN0ZW5lcjogKG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkluZm9NZXNzYWdlVG9rZW4pID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIHJlcG9ydGVkIHRoYXQgdGhlIGxhbmd1YWdlIGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdsYW5ndWFnZUNoYW5nZScsIGxpc3RlbmVyOiAobGFuZ3VhZ2VOYW1lOiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIHdhcyByZXNldC5cbiAgICovXG4gIG9uKGV2ZW50OiAncmVzZXRDb25uZWN0aW9uJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIEEgc2VjdXJlIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4gICAqL1xuICBvbihldmVudDogJ3NlY3VyZScsIGxpc3RlbmVyOiAoY2xlYXJ0ZXh0OiBpbXBvcnQoJ3RscycpLlRMU1NvY2tldCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogc3RyaW5nIHwgc3ltYm9sLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjaGFyc2V0Q2hhbmdlJywgY2hhcnNldDogc3RyaW5nKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjb25uZWN0JywgZXJyb3I/OiBFcnJvcik6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZGF0YWJhc2VDaGFuZ2UnLCBkYXRhYmFzZU5hbWU6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZGVidWcnLCBtZXNzYWdlVGV4dDogc3RyaW5nKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdlcnJvcicsIGVycm9yOiBFcnJvcik6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3JNZXNzYWdlJywgbWVzc2FnZTogaW1wb3J0KCcuL3Rva2VuL3Rva2VuJykuRXJyb3JNZXNzYWdlVG9rZW4pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2VuZCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2luZm9NZXNzYWdlJywgbWVzc2FnZTogaW1wb3J0KCcuL3Rva2VuL3Rva2VuJykuSW5mb01lc3NhZ2VUb2tlbik6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnbGFuZ3VhZ2VDaGFuZ2UnLCBsYW5ndWFnZU5hbWU6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnc2VjdXJlJywgY2xlYXJ0ZXh0OiBpbXBvcnQoJ3RscycpLlRMU1NvY2tldCk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVyb3V0aW5nJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVzZXRDb25uZWN0aW9uJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmV0cnknKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyb2xsYmFja1RyYW5zYWN0aW9uJyk6IGJvb2xlYW5cblxuICBlbWl0KGV2ZW50OiBzdHJpbmcgfCBzeW1ib2wsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuXG4gICAqXG4gICAqIFRoZSBbW0V2ZW50X2VuZF1dIHdpbGwgYmUgZW1pdHRlZCBvbmNlIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZC5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0aWFsaXNlQ29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmNyZWF0ZUNvbm5lY3RUaW1lcigpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdE9uUG9ydCh0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQsIHRoaXMuY29uZmlnLm9wdGlvbnMubXVsdGlTdWJuZXRGYWlsb3Zlciwgc2lnbmFsLCB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZUxvb2t1cCh7XG4gICAgICAgIHNlcnZlcjogdGhpcy5jb25maWcuc2VydmVyLFxuICAgICAgICBpbnN0YW5jZU5hbWU6IHRoaXMuY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lISxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dCxcbiAgICAgICAgc2lnbmFsOiBzaWduYWxcbiAgICAgIH0pLnRoZW4oKHBvcnQpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb25uZWN0T25Qb3J0KHBvcnQsIHRoaXMuY29uZmlnLm9wdGlvbnMubXVsdGlTdWJuZXRGYWlsb3Zlciwgc2lnbmFsLCB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQ29ubmVjdFRpbWVyKCk7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgLy8gSWdub3JlIHRoZSBBYm9ydEVycm9yIGZvciBub3csIHRoaXMgaXMgc3RpbGwgaGFuZGxlZCBieSB0aGUgY29ubmVjdFRpbWVyIGZpcmluZ1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IoZXJyLm1lc3NhZ2UsICdFSU5TVExPT0tVUCcpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFudXBDb25uZWN0aW9uKGNsZWFudXBUeXBlOiB0eXBlb2YgQ0xFQU5VUF9UWVBFW2tleW9mIHR5cGVvZiBDTEVBTlVQX1RZUEVdKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbGVhckNvbm5lY3RUaW1lcigpO1xuICAgICAgdGhpcy5jbGVhclJlcXVlc3RUaW1lcigpO1xuICAgICAgdGhpcy5jbGVhclJldHJ5VGltZXIoKTtcbiAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XG4gICAgICBpZiAoY2xlYW51cFR5cGUgPT09IENMRUFOVVBfVFlQRS5SRURJUkVDVCkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Jlcm91dGluZycpO1xuICAgICAgfSBlbHNlIGlmIChjbGVhbnVwVHlwZSAhPT0gQ0xFQU5VUF9UWVBFLlJFVFJZKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0O1xuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RFcnJvcignQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHJlcXVlc3QgY29tcGxldGVkLicsICdFQ0xPU0UnKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnIpO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZURlYnVnKCkge1xuICAgIGNvbnN0IGRlYnVnID0gbmV3IERlYnVnKHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcpO1xuICAgIGRlYnVnLm9uKCdkZWJ1ZycsIChtZXNzYWdlKSA9PiB7XG4gICAgICB0aGlzLmVtaXQoJ2RlYnVnJywgbWVzc2FnZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlYnVnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlOiBNZXNzYWdlLCBoYW5kbGVyOiBUb2tlbkhhbmRsZXIpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIHRoaXMuZGVidWcsIGhhbmRsZXIsIHRoaXMuY29uZmlnLm9wdGlvbnMpO1xuICB9XG5cbiAgY29ubmVjdE9uUG9ydChwb3J0OiBudW1iZXIsIG11bHRpU3VibmV0RmFpbG92ZXI6IGJvb2xlYW4sIHNpZ25hbDogQWJvcnRTaWduYWwsIGN1c3RvbUNvbm5lY3Rvcj86ICgpID0+IFByb21pc2U8U29ja2V0Pikge1xuICAgIGNvbnN0IGNvbm5lY3RPcHRzID0ge1xuICAgICAgaG9zdDogdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEuc2VydmVyIDogdGhpcy5jb25maWcuc2VydmVyLFxuICAgICAgcG9ydDogdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEucG9ydCA6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IHRoaXMuY29uZmlnLm9wdGlvbnMubG9jYWxBZGRyZXNzXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbm5lY3QgPSBjdXN0b21Db25uZWN0b3IgfHwgKG11bHRpU3VibmV0RmFpbG92ZXIgPyBjb25uZWN0SW5QYXJhbGxlbCA6IGNvbm5lY3RJblNlcXVlbmNlKTtcblxuICAgIGNvbm5lY3QoY29ubmVjdE9wdHMsIGRucy5sb29rdXAsIHNpZ25hbCkudGhlbigoc29ja2V0KSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIChlcnJvcikgPT4geyB0aGlzLnNvY2tldEVycm9yKGVycm9yKTsgfSk7XG4gICAgICAgIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7IHRoaXMuc29ja2V0Q2xvc2UoKTsgfSk7XG4gICAgICAgIHNvY2tldC5vbignZW5kJywgKCkgPT4geyB0aGlzLnNvY2tldEVuZCgpOyB9KTtcbiAgICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkpO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZUlvID0gbmV3IE1lc3NhZ2VJTyhzb2NrZXQsIHRoaXMuY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIHRoaXMubWVzc2FnZUlvLm9uKCdzZWN1cmUnLCAoY2xlYXJ0ZXh0KSA9PiB7IHRoaXMuZW1pdCgnc2VjdXJlJywgY2xlYXJ0ZXh0KTsgfSk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG5cbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWJ1Zy5sb2coJ2Nvbm5lY3RlZCB0byAnICsgdGhpcy5jb25maWcuc2VydmVyICsgJzonICsgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0KTtcblxuICAgICAgICB0aGlzLnNlbmRQcmVMb2dpbigpO1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfUFJFTE9HSU4pO1xuICAgICAgfSk7XG4gICAgfSwgKGVycikgPT4ge1xuICAgICAgdGhpcy5jbGVhckNvbm5lY3RUaW1lcigpO1xuICAgICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHsgdGhpcy5zb2NrZXRFcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xvc2VDb25uZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgdGhpcy5zb2NrZXQuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlQ29ubmVjdFRpbWVyKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5jb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIHRoaXMuY29ubmVjdFRpbWVvdXQoKTtcbiAgICB9LCB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0KTtcbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUNhbmNlbFRpbWVyKCkge1xuICAgIHRoaXMuY2xlYXJDYW5jZWxUaW1lcigpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQ7XG4gICAgaWYgKHRpbWVvdXQgPiAwKSB7XG4gICAgICB0aGlzLmNhbmNlbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsVGltZW91dCgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVSZXF1ZXN0VGltZXIoKSB7XG4gICAgdGhpcy5jbGVhclJlcXVlc3RUaW1lcigpOyAvLyByZWxlYXNlIG9sZCB0aW1lciwganVzdCB0byBiZSBzYWZlXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdCBhcyBSZXF1ZXN0O1xuICAgIGNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdC50aW1lb3V0ICE9PSB1bmRlZmluZWQpID8gcmVxdWVzdC50aW1lb3V0IDogdGhpcy5jb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dDtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VGltZW91dCgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVSZXRyeVRpbWVyKCkge1xuICAgIHRoaXMuY2xlYXJSZXRyeVRpbWVyKCk7XG4gICAgdGhpcy5yZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJldHJ5VGltZW91dCgpO1xuICAgIH0sIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25uZWN0VGltZW91dCgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYEZhaWxlZCB0byBjb25uZWN0IHRvICR7dGhpcy5jb25maWcuc2VydmVyfSR7dGhpcy5jb25maWcub3B0aW9ucy5wb3J0ID8gYDoke3RoaXMuY29uZmlnLm9wdGlvbnMucG9ydH1gIDogYFxcXFwke3RoaXMuY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lfWB9IGluICR7dGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dH1tc2A7XG4gICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG4gICAgdGhpcy5lbWl0KCdjb25uZWN0JywgbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCAnRVRJTUVPVVQnKSk7XG4gICAgdGhpcy5jb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdjb25uZWN0VGltZW91dCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxUaW1lb3V0KCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGNhbmNlbCByZXF1ZXN0IGluICR7dGhpcy5jb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0fW1zYDtcbiAgICB0aGlzLmRlYnVnLmxvZyhtZXNzYWdlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3NvY2tldEVycm9yJywgbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCAnRVRJTUVPVVQnKSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlcXVlc3RUaW1lb3V0KCkge1xuICAgIHRoaXMucmVxdWVzdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3QhO1xuICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgY29uc3QgdGltZW91dCA9IChyZXF1ZXN0LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkgPyByZXF1ZXN0LnRpbWVvdXQgOiB0aGlzLmNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0O1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAnVGltZW91dDogUmVxdWVzdCBmYWlsZWQgdG8gY29tcGxldGUgaW4gJyArIHRpbWVvdXQgKyAnbXMnO1xuICAgIHJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsICdFVElNRU9VVCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXRyeVRpbWVvdXQoKSB7XG4gICAgdGhpcy5yZXRyeVRpbWVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZW1pdCgncmV0cnknKTtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkNPTk5FQ1RJTkcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhckNvbm5lY3RUaW1lcigpIHtcbiAgICBpZiAodGhpcy5jb25uZWN0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbm5lY3RUaW1lcik7XG4gICAgICB0aGlzLmNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyQ2FuY2VsVGltZXIoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNhbmNlbFRpbWVyKTtcbiAgICAgIHRoaXMuY2FuY2VsVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhclJlcXVlc3RUaW1lcigpIHtcbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlcXVlc3RUaW1lcik7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyUmV0cnlUaW1lcigpIHtcbiAgICBpZiAodGhpcy5yZXRyeVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXRyeVRpbWVyKTtcbiAgICAgIHRoaXMucmV0cnlUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyYW5zaXRpb25UbyhuZXdTdGF0ZTogU3RhdGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gbmV3U3RhdGUpIHtcbiAgICAgIHRoaXMuZGVidWcubG9nKCdTdGF0ZSBpcyBhbHJlYWR5ICcgKyBuZXdTdGF0ZS5uYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmV4aXQpIHtcbiAgICAgIHRoaXMuc3RhdGUuZXhpdC5jYWxsKHRoaXMsIG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlYnVnLmxvZygnU3RhdGUgY2hhbmdlOiAnICsgKHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLm5hbWUgOiAndW5kZWZpbmVkJykgKyAnIC0+ICcgKyBuZXdTdGF0ZS5uYW1lKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5lbnRlcikge1xuICAgICAgdGhpcy5zdGF0ZS5lbnRlci5hcHBseSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEV2ZW50SGFuZGxlcjxUIGV4dGVuZHMga2V5b2YgU3RhdGVbJ2V2ZW50cyddPihldmVudE5hbWU6IFQpOiBOb25OdWxsYWJsZTxTdGF0ZVsnZXZlbnRzJ11bVF0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5zdGF0ZS5ldmVudHNbZXZlbnROYW1lXTtcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBldmVudCAnJHtldmVudE5hbWV9JyBpbiBzdGF0ZSAnJHt0aGlzLnN0YXRlLm5hbWV9J2ApO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVyITtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGlzcGF0Y2hFdmVudDxUIGV4dGVuZHMga2V5b2YgU3RhdGVbJ2V2ZW50cyddPihldmVudE5hbWU6IFQsIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Tm9uTnVsbGFibGU8U3RhdGVbJ2V2ZW50cyddW1RdPj4pIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5zdGF0ZS5ldmVudHNbZXZlbnROYW1lXSBhcyAoKHRoaXM6IENvbm5lY3Rpb24sIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihgTm8gZXZlbnQgJyR7ZXZlbnROYW1lfScgaW4gc3RhdGUgJyR7dGhpcy5zdGF0ZS5uYW1lfSdgKSk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2NrZXRFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gdGhpcy5TVEFURS5DT05ORUNUSU5HIHx8IHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuU0VOVF9UTFNTU0xORUdPVElBVElPTikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsZWQgdG8gY29ubmVjdCB0byAke3RoaXMuY29uZmlnLnNlcnZlcn06JHt0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnR9IC0gJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB0aGlzLmRlYnVnLmxvZyhtZXNzYWdlKTtcbiAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgJ0VTT0NLRVQnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ29ubmVjdGlvbiBsb3N0IC0gJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB0aGlzLmRlYnVnLmxvZyhtZXNzYWdlKTtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UsICdFU09DS0VUJykpO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3NvY2tldEVycm9yJywgZXJyb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2NrZXRFbmQoKSB7XG4gICAgdGhpcy5kZWJ1Zy5sb2coJ3NvY2tldCBlbmRlZCcpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSB0aGlzLlNUQVRFLkZJTkFMKSB7XG4gICAgICBjb25zdCBlcnJvcjogRXJyb3JXaXRoQ29kZSA9IG5ldyBFcnJvcignc29ja2V0IGhhbmcgdXAnKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICB0aGlzLnNvY2tldEVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvY2tldENsb3NlKCkge1xuICAgIHRoaXMuZGVidWcubG9nKCdjb25uZWN0aW9uIHRvICcgKyB0aGlzLmNvbmZpZy5zZXJ2ZXIgKyAnOicgKyB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQgKyAnIGNsb3NlZCcpO1xuICAgIGlmICh0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLlJFUk9VVElORykge1xuICAgICAgdGhpcy5kZWJ1Zy5sb2coJ1Jlcm91dGluZyB0byAnICsgdGhpcy5yb3V0aW5nRGF0YSEuc2VydmVyICsgJzonICsgdGhpcy5yb3V0aW5nRGF0YSEucG9ydCk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgncmVjb25uZWN0Jyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLlRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZKSB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLnJvdXRpbmdEYXRhID8gdGhpcy5yb3V0aW5nRGF0YS5zZXJ2ZXIgOiB0aGlzLmNvbmZpZy5zZXJ2ZXI7XG4gICAgICBjb25zdCBwb3J0ID0gdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEucG9ydCA6IHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydDtcbiAgICAgIHRoaXMuZGVidWcubG9nKCdSZXRyeSBhZnRlciB0cmFuc2llbnQgZmFpbHVyZSBjb25uZWN0aW5nIHRvICcgKyBzZXJ2ZXIgKyAnOicgKyBwb3J0KTtcblxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdyZXRyeScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRQcmVMb2dpbigpIHtcbiAgICBjb25zdCBbICwgbWFqb3IsIG1pbm9yLCBidWlsZCBdID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvLmV4ZWModmVyc2lvbikgPz8gWyAnMC4wLjAnLCAnMCcsICcwJywgJzAnIF07XG5cbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IFByZWxvZ2luUGF5bG9hZCh7XG4gICAgICBlbmNyeXB0OiB0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQsXG4gICAgICB2ZXJzaW9uOiB7IG1ham9yOiBOdW1iZXIobWFqb3IpLCBtaW5vcjogTnVtYmVyKG1pbm9yKSwgYnVpbGQ6IE51bWJlcihidWlsZCksIHN1YmJ1aWxkOiAwIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuUFJFTE9HSU4sIHBheWxvYWQuZGF0YSk7XG4gICAgdGhpcy5kZWJ1Zy5wYXlsb2FkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBheWxvYWQudG9TdHJpbmcoJyAgJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRMb2dpbjdQYWNrZXQoKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IG5ldyBMb2dpbjdQYXlsb2FkKHtcbiAgICAgIHRkc1ZlcnNpb246IHZlcnNpb25zW3RoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbl0sXG4gICAgICBwYWNrZXRTaXplOiB0aGlzLmNvbmZpZy5vcHRpb25zLnBhY2tldFNpemUsXG4gICAgICBjbGllbnRQcm9nVmVyOiAwLFxuICAgICAgY2xpZW50UGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgIGNvbm5lY3Rpb25JZDogMCxcbiAgICAgIGNsaWVudFRpbWVab25lOiBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAgICBjbGllbnRMY2lkOiAweDAwMDAwNDA5XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0aW9uIH0gPSB0aGlzLmNvbmZpZztcbiAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICBwYXlsb2FkLmZlZEF1dGggPSB7XG4gICAgICAgICAgdHlwZTogJ0FEQUwnLFxuICAgICAgICAgIGVjaG86IHRoaXMuZmVkQXV0aFJlcXVpcmVkLFxuICAgICAgICAgIHdvcmtmbG93OiAnZGVmYXVsdCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJzpcbiAgICAgICAgcGF5bG9hZC5mZWRBdXRoID0ge1xuICAgICAgICAgIHR5cGU6ICdTRUNVUklUWVRPS0VOJyxcbiAgICAgICAgICBlY2hvOiB0aGlzLmZlZEF1dGhSZXF1aXJlZCxcbiAgICAgICAgICBmZWRBdXRoVG9rZW46IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudG9rZW5cbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJzpcbiAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCc6XG4gICAgICAgIHBheWxvYWQuZmVkQXV0aCA9IHtcbiAgICAgICAgICB0eXBlOiAnQURBTCcsXG4gICAgICAgICAgZWNobzogdGhpcy5mZWRBdXRoUmVxdWlyZWQsXG4gICAgICAgICAgd29ya2Zsb3c6ICdpbnRlZ3JhdGVkJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbnRsbSc6XG4gICAgICAgIHBheWxvYWQuc3NwaSA9IGNyZWF0ZU5UTE1SZXF1ZXN0KHsgZG9tYWluOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmRvbWFpbiB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBheWxvYWQudXNlck5hbWUgPSBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lO1xuICAgICAgICBwYXlsb2FkLnBhc3N3b3JkID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZDtcbiAgICB9XG5cbiAgICBwYXlsb2FkLmhvc3RuYW1lID0gdGhpcy5jb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkIHx8IG9zLmhvc3RuYW1lKCk7XG4gICAgcGF5bG9hZC5zZXJ2ZXJOYW1lID0gdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEuc2VydmVyIDogdGhpcy5jb25maWcuc2VydmVyO1xuICAgIHBheWxvYWQuYXBwTmFtZSA9IHRoaXMuY29uZmlnLm9wdGlvbnMuYXBwTmFtZSB8fCAnVGVkaW91cyc7XG4gICAgcGF5bG9hZC5saWJyYXJ5TmFtZSA9IGxpYnJhcnlOYW1lO1xuICAgIHBheWxvYWQubGFuZ3VhZ2UgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlO1xuICAgIHBheWxvYWQuZGF0YWJhc2UgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGFiYXNlO1xuICAgIHBheWxvYWQuY2xpZW50SWQgPSBCdWZmZXIuZnJvbShbMSwgMiwgMywgNCwgNSwgNl0pO1xuXG4gICAgcGF5bG9hZC5yZWFkT25seUludGVudCA9IHRoaXMuY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQ7XG4gICAgcGF5bG9hZC5pbml0RGJGYXRhbCA9ICF0aGlzLmNvbmZpZy5vcHRpb25zLmZhbGxiYWNrVG9EZWZhdWx0RGI7XG5cbiAgICB0aGlzLnJvdXRpbmdEYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuTE9HSU43LCBwYXlsb2FkLnRvQnVmZmVyKCkpO1xuXG4gICAgdGhpcy5kZWJ1Zy5wYXlsb2FkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBheWxvYWQudG9TdHJpbmcoJyAgJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRGZWRBdXRoVG9rZW5NZXNzYWdlKHRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbkxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHRva2VuLCAndWNzMicpO1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoOCArIGFjY2Vzc1Rva2VuTGVuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBvZmZzZXQgPSBkYXRhLndyaXRlVUludDMyTEUoYWNjZXNzVG9rZW5MZW4gKyA0LCBvZmZzZXQpO1xuICAgIG9mZnNldCA9IGRhdGEud3JpdGVVSW50MzJMRShhY2Nlc3NUb2tlbkxlbiwgb2Zmc2V0KTtcbiAgICBkYXRhLndyaXRlKHRva2VuLCBvZmZzZXQsICd1Y3MyJyk7XG4gICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5GRURBVVRIX1RPS0VOLCBkYXRhKTtcbiAgICAvLyBzZW50IHRoZSBmZWRBdXRoIHRva2VuIG1lc3NhZ2UsIHRoZSByZXN0IGlzIHNpbWlsYXIgdG8gc3RhbmRhcmQgbG9naW4gN1xuICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9MT0dJTjdfV0lUSF9TVEFOREFSRF9MT0dJTik7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlbmRJbml0aWFsU3FsKCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgU3FsQmF0Y2hQYXlsb2FkKHRoaXMuZ2V0SW5pdGlhbFNxbCgpLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucyk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoeyB0eXBlOiBUWVBFLlNRTF9CQVRDSCB9KTtcbiAgICB0aGlzLm1lc3NhZ2VJby5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgUmVhZGFibGUuZnJvbShwYXlsb2FkKS5waXBlKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRJbml0aWFsU3FsKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX251bGxzIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9udWxscyBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfbnVsbF9kZmx0X29uIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfbnVsbF9kZmx0X29uIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX3BhZGRpbmcgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmcgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX3BhZGRpbmcgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX3dhcm5pbmdzIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfd2FybmluZ3Mgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYXJpdGhhYm9ydCBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYXJpdGhhYm9ydCBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY29uY2F0X251bGxfeWllbGRzX251bGwgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBjb25jYXRfbnVsbF95aWVsZHNfbnVsbCBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBjdXJzb3JfY2xvc2Vfb25fY29tbWl0IG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBjdXJzb3JfY2xvc2Vfb25fY29tbWl0IG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKGBzZXQgZGF0ZWZpcnN0ICR7dGhpcy5jb25maWcub3B0aW9ucy5kYXRlZmlyc3R9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKGBzZXQgZGF0ZWZvcm1hdCAke3RoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdH1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgaW1wbGljaXRfdHJhbnNhY3Rpb25zIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgaW1wbGljaXRfdHJhbnNhY3Rpb25zIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCBsYW5ndWFnZSAke3RoaXMuY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IG51bWVyaWNfcm91bmRhYm9ydCBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IG51bWVyaWNfcm91bmRhYm9ydCBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBxdW90ZWRfaWRlbnRpZmllciBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgcXVvdGVkX2lkZW50aWZpZXIgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGV4dHNpemUgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IHRleHRzaXplICR7dGhpcy5jb25maWcub3B0aW9ucy50ZXh0c2l6ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCAke3RoaXMuZ2V0SXNvbGF0aW9uTGV2ZWxUZXh0KHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsKX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgeGFjdF9hYm9ydCBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IHhhY3RfYWJvcnQgb2ZmJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByb2Nlc3NlZEluaXRpYWxTcWwoKSB7XG4gICAgdGhpcy5jbGVhckNvbm5lY3RUaW1lcigpO1xuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIFNRTCBiYXRjaCByZXByZXNlbnRlZCBieSBbW1JlcXVlc3RdXS5cbiAgICogVGhlcmUgaXMgbm8gcGFyYW0gc3VwcG9ydCwgYW5kIHVubGlrZSBbW1JlcXVlc3QuZXhlY1NxbF1dLFxuICAgKiBpdCBpcyBub3QgbGlrZWx5IHRoYXQgU1FMIFNlcnZlciB3aWxsIHJldXNlIHRoZSBleGVjdXRpb24gcGxhbiBpdCBnZW5lcmF0ZXMgZm9yIHRoZSBTUUwuXG4gICAqXG4gICAqIEluIGFsbW9zdCBhbGwgY2FzZXMsIFtbUmVxdWVzdC5leGVjU3FsXV0gd2lsbCBiZSBhIGJldHRlciBjaG9pY2UuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGV4ZWNTcWxCYXRjaChyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlNRTF9CQVRDSCwgbmV3IFNxbEJhdGNoUGF5bG9hZChyZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZSEsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogIEV4ZWN1dGUgdGhlIFNRTCByZXByZXNlbnRlZCBieSBbW1JlcXVlc3RdXS5cbiAgICpcbiAgICogQXMgYHNwX2V4ZWN1dGVzcWxgIGlzIHVzZWQgdG8gZXhlY3V0ZSB0aGUgU1FMLCBpZiB0aGUgc2FtZSBTUUwgaXMgZXhlY3V0ZWQgbXVsdGlwbGVzIHRpbWVzXG4gICAqIHVzaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBTUUwgU2VydmVyIHF1ZXJ5IG9wdGltaXplciBpcyBsaWtlbHkgdG8gcmV1c2UgdGhlIGV4ZWN1dGlvbiBwbGFuIGl0IGdlbmVyYXRlc1xuICAgKiBmb3IgdGhlIGZpcnN0IGV4ZWN1dGlvbi4gVGhpcyBtYXkgYWxzbyByZXN1bHQgaW4gU1FMIHNlcnZlciB0cmVhdGluZyB0aGUgcmVxdWVzdCBsaWtlIGEgc3RvcmVkIHByb2NlZHVyZVxuICAgKiB3aGljaCBjYW4gcmVzdWx0IGluIHRoZSBbW0V2ZW50X2RvbmVJblByb2NdXSBvciBbW0V2ZW50X2RvbmVQcm9jXV0gZXZlbnRzIGJlaW5nIGVtaXR0ZWQgaW5zdGVhZCBvZiB0aGVcbiAgICogW1tFdmVudF9kb25lXV0gZXZlbnQgeW91IG1pZ2h0IGV4cGVjdC4gVXNpbmcgW1tleGVjU3FsQmF0Y2hdXSB3aWxsIHByZXZlbnQgdGhpcyBmcm9tIG9jY3VycmluZyBidXQgbWF5IGhhdmUgYSBuZWdhdGl2ZSBwZXJmb3JtYW5jZSBpbXBhY3QuXG4gICAqXG4gICAqIEJld2FyZSBvZiB0aGUgd2F5IHRoYXQgc2NvcGluZyBydWxlcyBhcHBseSwgYW5kIGhvdyB0aGV5IG1heSBbYWZmZWN0IGxvY2FsIHRlbXAgdGFibGVzXShodHRwOi8vd2VibG9ncy5zcWx0ZWFtLmNvbS9tbGFkZW5wL2FyY2hpdmUvMjAwNi8xMS8wMy8xNzE5Ny5hc3B4KVxuICAgKiBJZiB5b3UncmUgcnVubmluZyBpbiB0byBzY29waW5nIGlzc3VlcywgdGhlbiBbW2V4ZWNTcWxCYXRjaF1dIG1heSBiZSBhIGJldHRlciBjaG9pY2UuXG4gICAqIFNlZSBhbHNvIFtpc3N1ZSAjMjRdKGh0dHBzOi8vZ2l0aHViLmNvbS9wZWtpbS90ZWRpb3VzL2lzc3Vlcy8yNClcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgZXhlY1NxbChyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3QudmFsaWRhdGVQYXJhbWV0ZXJzKHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJlcXVlc3QuZXJyb3IgPSBlcnJvcjtcblxuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVidWcubG9nKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgIG5hbWU6ICdzdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBpZiAocmVxdWVzdC5wYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgICAgdHlwZTogVFlQRVMuTlZhckNoYXIsXG4gICAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgICB2YWx1ZTogcmVxdWVzdC5tYWtlUGFyYW1zUGFyYW1ldGVyKHJlcXVlc3QucGFyYW1ldGVycyksXG4gICAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIHBhcmFtZXRlcnMucHVzaCguLi5yZXF1ZXN0LnBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKCdzcF9leGVjdXRlc3FsJywgcGFyYW1ldGVycywgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJ1bGtMb2FkIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gdGFibGUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRvIGJ1bGstaW5zZXJ0IGludG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIEEgc2V0IG9mIGJ1bGsgbG9hZCBvcHRpb25zLlxuICAgKi9cbiAgbmV3QnVsa0xvYWQodGFibGU6IHN0cmluZywgY2FsbGJhY2s6IEJ1bGtMb2FkQ2FsbGJhY2spOiBCdWxrTG9hZFxuICBuZXdCdWxrTG9hZCh0YWJsZTogc3RyaW5nLCBvcHRpb25zOiBCdWxrTG9hZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWxrTG9hZENhbGxiYWNrKTogQnVsa0xvYWRcbiAgbmV3QnVsa0xvYWQodGFibGU6IHN0cmluZywgY2FsbGJhY2tPck9wdGlvbnM6IEJ1bGtMb2FkT3B0aW9ucyB8IEJ1bGtMb2FkQ2FsbGJhY2ssIGNhbGxiYWNrPzogQnVsa0xvYWRDYWxsYmFjaykge1xuICAgIGxldCBvcHRpb25zOiBCdWxrTG9hZE9wdGlvbnM7XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FsbGJhY2sgPSBjYWxsYmFja09yT3B0aW9ucyBhcyBCdWxrTG9hZENhbGxiYWNrO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gY2FsbGJhY2tPck9wdGlvbnMgYXMgQnVsa0xvYWRPcHRpb25zO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wib3B0aW9uc1wiIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQnVsa0xvYWQodGFibGUsIHRoaXMuZGF0YWJhc2VDb2xsYXRpb24sIHRoaXMuY29uZmlnLm9wdGlvbnMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgW1tCdWxrTG9hZF1dLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBXZSB3YW50IHRvIHBlcmZvcm0gYSBidWxrIGxvYWQgaW50byBhIHRhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gICAqIC8vIENSRUFURSBUQUJMRSBlbXBsb3llZXMgKGZpcnN0X25hbWUgbnZhcmNoYXIoMjU1KSwgbGFzdF9uYW1lIG52YXJjaGFyKDI1NSksIGRheV9vZl9iaXJ0aCBkYXRlKTtcbiAgICpcbiAgICogY29uc3QgYnVsa0xvYWQgPSBjb25uZWN0aW9uLm5ld0J1bGtMb2FkKCdlbXBsb3llZXMnLCAoZXJyLCByb3dDb3VudCkgPT4ge1xuICAgKiAgIC8vIC4uLlxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gRmlyc3QsIHdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgY29sdW1ucyB0aGF0IHdlIHdhbnQgdG8gd3JpdGUgdG8sXG4gICAqIC8vIGFuZCB0aGVpciBkZWZpbml0aW9ucy4gVGhlc2UgZGVmaW5pdGlvbnMgbXVzdCBtYXRjaCB0aGUgYWN0dWFsIHRhYmxlLFxuICAgKiAvLyBvdGhlcndpc2UgdGhlIGJ1bGsgbG9hZCB3aWxsIGZhaWwuXG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignZmlyc3RfbmFtZScsIFRZUEVTLk5WYXJjaGFyLCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdsYXN0X25hbWUnLCBUWVBFUy5OVmFyY2hhciwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignZGF0ZV9vZl9iaXJ0aCcsIFRZUEVTLkRhdGUsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKlxuICAgKiAvLyBFeGVjdXRlIGEgYnVsayBsb2FkIHdpdGggYSBwcmVkZWZpbmVkIGxpc3Qgb2Ygcm93cy5cbiAgICogLy9cbiAgICogLy8gTm90ZSB0aGF0IHRoZXNlIHJvd3MgYXJlIGhlbGQgaW4gbWVtb3J5IHVudGlsIHRoZVxuICAgKiAvLyBidWxrIGxvYWQgd2FzIHBlcmZvcm1lZCwgc28gaWYgeW91IG5lZWQgdG8gd3JpdGUgYSBsYXJnZVxuICAgKiAvLyBudW1iZXIgb2Ygcm93cyAoZS5nLiBieSByZWFkaW5nIGZyb20gYSBDU1YgZmlsZSksXG4gICAqIC8vIHBhc3NpbmcgYW4gYEFzeW5jSXRlcmFibGVgIGlzIGFkdmlzYWJsZSB0byBrZWVwIG1lbW9yeSB1c2FnZSBsb3cuXG4gICAqIGNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkKGJ1bGtMb2FkLCBbXG4gICAqICAgeyAnZmlyc3RfbmFtZSc6ICdTdGV2ZScsICdsYXN0X25hbWUnOiAnSm9icycsICdkYXlfb2ZfYmlydGgnOiBuZXcgRGF0ZSgnMDItMjQtMTk1NScpIH0sXG4gICAqICAgeyAnZmlyc3RfbmFtZSc6ICdCaWxsJywgJ2xhc3RfbmFtZSc6ICdHYXRlcycsICdkYXlfb2ZfYmlydGgnOiBuZXcgRGF0ZSgnMTAtMjgtMTk1NScpIH1cbiAgICogXSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gYnVsa0xvYWQgQSBwcmV2aW91c2x5IGNyZWF0ZWQgW1tCdWxrTG9hZF1dLlxuICAgKiBAcGFyYW0gcm93cyBBIFtbSXRlcmFibGVdXSBvciBbW0FzeW5jSXRlcmFibGVdXSB0aGF0IGNvbnRhaW5zIHRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGJ1bGsgbG9hZGVkLlxuICAgKi9cbiAgZXhlY0J1bGtMb2FkKGJ1bGtMb2FkOiBCdWxrTG9hZCwgcm93czogQXN5bmNJdGVyYWJsZTx1bmtub3duW10gfCB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiB1bmtub3duIH0+IHwgSXRlcmFibGU8dW5rbm93bltdIHwgeyBbY29sdW1uTmFtZTogc3RyaW5nXTogdW5rbm93biB9Pik6IHZvaWRcblxuICBleGVjQnVsa0xvYWQoYnVsa0xvYWQ6IEJ1bGtMb2FkLCByb3dzPzogQXN5bmNJdGVyYWJsZTx1bmtub3duW10gfCB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiB1bmtub3duIH0+IHwgSXRlcmFibGU8dW5rbm93bltdIHwgeyBbY29sdW1uTmFtZTogc3RyaW5nXTogdW5rbm93biB9Pikge1xuICAgIGJ1bGtMb2FkLmV4ZWN1dGlvblN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHJvd3MpIHtcbiAgICAgIGlmIChidWxrTG9hZC5zdHJlYW1pbmdNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkIGNhbid0IGJlIGNhbGxlZCB3aXRoIGEgQnVsa0xvYWQgdGhhdCB3YXMgcHV0IGluIHN0cmVhbWluZyBtb2RlLlwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1bGtMb2FkLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZCBjYW4ndCBiZSBjYWxsZWQgd2l0aCBhIEJ1bGtMb2FkIHRoYXQgYWxyZWFkeSBoYXMgcm93cyB3cml0dGVuIHRvIGl0LlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm93U3RyZWFtID0gUmVhZGFibGUuZnJvbShyb3dzKTtcblxuICAgICAgLy8gRGVzdHJveSB0aGUgcGFja2V0IHRyYW5zZm9ybSBpZiBhbiBlcnJvciBoYXBwZW5zIGluIHRoZSByb3cgc3RyZWFtLFxuICAgICAgLy8gZS5nLiBpZiBhbiBlcnJvciBpcyB0aHJvd24gZnJvbSB3aXRoaW4gYSBnZW5lcmF0b3Igb3Igc3RyZWFtLlxuICAgICAgcm93U3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm0uZGVzdHJveShlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIERlc3Ryb3kgdGhlIHJvdyBzdHJlYW0gaWYgYW4gZXJyb3IgaGFwcGVucyBpbiB0aGUgcGFja2V0IHRyYW5zZm9ybSxcbiAgICAgIC8vIGUuZy4gaWYgdGhlIGJ1bGsgbG9hZCBpcyBjYW5jZWxsZWQuXG4gICAgICBidWxrTG9hZC5yb3dUb1BhY2tldFRyYW5zZm9ybS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJvd1N0cmVhbS5kZXN0cm95KGVycik7XG4gICAgICB9KTtcblxuICAgICAgcm93U3RyZWFtLnBpcGUoYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm0pO1xuICAgIH0gZWxzZSBpZiAoIWJ1bGtMb2FkLnN0cmVhbWluZ01vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBidWxrbG9hZCB3YXMgbm90IHB1dCBpbnRvIHN0cmVhbWluZyBtb2RlIGJ5IHRoZSB1c2VyLFxuICAgICAgLy8gd2UgZW5kIHRoZSByb3dUb1BhY2tldFRyYW5zZm9ybSBoZXJlIGZvciB0aGVtLlxuICAgICAgLy9cbiAgICAgIC8vIElmIGl0IHdhcyBwdXQgaW50byBzdHJlYW1pbmcgbW9kZSwgaXQncyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5XG4gICAgICAvLyB0byBlbmQgdGhlIHN0cmVhbS5cbiAgICAgIGJ1bGtMb2FkLnJvd1RvUGFja2V0VHJhbnNmb3JtLmVuZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYW5jZWwoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IG5ldyBCdWxrTG9hZFBheWxvYWQoYnVsa0xvYWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGJ1bGtMb2FkLmdldEJ1bGtJbnNlcnRTcWwoKSwgKGVycm9yOiAoRXJyb3IgJiB7IGNvZGU/OiBzdHJpbmcgfSkgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICBidWxrTG9hZC5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdVTktOT1dOJykge1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gJyBUaGlzIGlzIGxpa2VseSBiZWNhdXNlIHRoZSBzY2hlbWEgb2YgdGhlIEJ1bGtMb2FkIGRvZXMgbm90IG1hdGNoIHRoZSBzY2hlbWEgb2YgdGhlIHRhYmxlIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgaW50by4nO1xuICAgICAgICB9XG4gICAgICAgIGJ1bGtMb2FkLmVycm9yID0gZXJyb3I7XG4gICAgICAgIGJ1bGtMb2FkLmNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1ha2VSZXF1ZXN0KGJ1bGtMb2FkLCBUWVBFLkJVTEtfTE9BRCwgcGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBidWxrTG9hZC5vbmNlKCdjYW5jZWwnLCBvbkNhbmNlbCk7XG5cbiAgICB0aGlzLmV4ZWNTcWxCYXRjaChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBTUUwgcmVwcmVzZW50ZWQgYnkgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIFRoZSByZXF1ZXN0IGNhbiB0aGVuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBjYWxscyB0b1xuICAgKiBbW2V4ZWN1dGVdXSBhbmQgW1t1bnByZXBhcmVdXVxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIFtbUmVxdWVzdF1dIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlcXVlc3QuXG4gICAqICAgUGFyYW1ldGVycyBvbmx5IHJlcXVpcmUgYSBuYW1lIGFuZCB0eXBlLiBQYXJhbWV0ZXIgdmFsdWVzIGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgcHJlcGFyZShyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5JbnQsXG4gICAgICBuYW1lOiAnaGFuZGxlJyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBvdXRwdXQ6IHRydWUsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLk5WYXJDaGFyLFxuICAgICAgbmFtZTogJ3BhcmFtcycsXG4gICAgICB2YWx1ZTogcmVxdWVzdC5wYXJhbWV0ZXJzLmxlbmd0aCA/IHJlcXVlc3QubWFrZVBhcmFtc1BhcmFtZXRlcihyZXF1ZXN0LnBhcmFtZXRlcnMpIDogbnVsbCxcbiAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLk5WYXJDaGFyLFxuICAgICAgbmFtZTogJ3N0bXQnLFxuICAgICAgdmFsdWU6IHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICByZXF1ZXN0LnByZXBhcmluZyA9IHRydWU7XG4gICAgLy8gVE9ETzogV2UgbmVlZCB0byBjbGVhbiB1cCB0aGlzIGV2ZW50IGhhbmRsZXIsIG90aGVyd2lzZSB0aGlzIGxlYWtzIG1lbW9yeVxuICAgIHJlcXVlc3Qub24oJ3JldHVyblZhbHVlJywgKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKG5hbWUgPT09ICdoYW5kbGUnKSB7XG4gICAgICAgIHJlcXVlc3QuaGFuZGxlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihgVGVkaW91cyA+IFVuZXhwZWN0ZWQgb3V0cHV0IHBhcmFtZXRlciAke25hbWV9IGZyb20gc3BfcHJlcGFyZWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlJQQ19SRVFVRVNULCBuZXcgUnBjUmVxdWVzdFBheWxvYWQoJ3NwX3ByZXBhcmUnLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIFNRTCBTZXJ2ZXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHByZXZpb3VzbHkgcHJlcGFyZWQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKiAgIFBhcmFtZXRlcnMgb25seSByZXF1aXJlIGEgbmFtZSBhbmQgdHlwZS5cbiAgICogICBQYXJhbWV0ZXIgdmFsdWVzIGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgdW5wcmVwYXJlKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLkludCxcbiAgICAgIG5hbWU6ICdoYW5kbGUnLFxuICAgICAgLy8gVE9ETzogQWJvcnQgaWYgYHJlcXVlc3QuaGFuZGxlYCBpcyBub3Qgc2V0XG4gICAgICB2YWx1ZTogcmVxdWVzdC5oYW5kbGUsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKCdzcF91bnByZXBhcmUnLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgcHJldmlvdXNseSBwcmVwYXJlZCBTUUwsIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIHByZXZpb3VzbHkgcHJlcGFyZWQgW1tSZXF1ZXN0XV0uXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzICBBbiBvYmplY3Qgd2hvc2UgbmFtZXMgY29ycmVzcG9uZCB0byB0aGUgbmFtZXMgb2ZcbiAgICogICBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgW1tSZXF1ZXN0XV0gYmVmb3JlIGl0IHdhcyBwcmVwYXJlZC5cbiAgICogICBUaGUgb2JqZWN0J3MgdmFsdWVzIGFyZSBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlcnMnIHZhbHVlcyB3aGVuIHRoZVxuICAgKiAgIHJlcXVlc3QgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBleGVjdXRlKHJlcXVlc3Q6IFJlcXVlc3QsIHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkge1xuICAgIGNvbnN0IGV4ZWN1dGVQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgZXhlY3V0ZVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5JbnQsXG4gICAgICBuYW1lOiAnaGFuZGxlJyxcbiAgICAgIC8vIFRPRE86IEFib3J0IGlmIGByZXF1ZXN0LmhhbmRsZWAgaXMgbm90IHNldFxuICAgICAgdmFsdWU6IHJlcXVlc3QuaGFuZGxlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSByZXF1ZXN0LnBhcmFtZXRlcnNbaV07XG5cbiAgICAgICAgZXhlY3V0ZVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgICAgLi4ucGFyYW1ldGVyLFxuICAgICAgICAgIHZhbHVlOiBwYXJhbWV0ZXIudHlwZS52YWxpZGF0ZShwYXJhbWV0ZXJzID8gcGFyYW1ldGVyc1twYXJhbWV0ZXIubmFtZV0gOiBudWxsLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKCdzcF9leGVjdXRlJywgZXhlY3V0ZVBhcmFtZXRlcnMsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhIHN0b3JlZCBwcm9jZWR1cmUgcmVwcmVzZW50ZWQgYnkgW1tSZXF1ZXN0XV0uXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGNhbGxQcm9jZWR1cmUocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0LnZhbGlkYXRlUGFyYW1ldGVycyh0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlISwgcmVxdWVzdC5wYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcGFyYW0gbmFtZSBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy4gUmVxdWlyZWQgd2hlbiBgaXNvbGF0aW9uTGV2ZWxgXG4gICAqICAgaXMgcHJlc2VudC5cbiAgICogQHBhcmFtIGlzb2xhdGlvbkxldmVsIFRoZSBpc29sYXRpb24gbGV2ZWwgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcnVuIHdpdGguXG4gICAqXG4gICAqICAgVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogICAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAgICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAgICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogICAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICAgKiBgU05BUFNIT1RgXG4gICAqXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgQ29ubmVjdGlvbidzIGlzb2xhdGlvbiBsZXZlbC5cbiAgICovXG4gIGJlZ2luVHJhbnNhY3Rpb24oY2FsbGJhY2s6IEJlZ2luVHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnLCBpc29sYXRpb25MZXZlbCA9IHRoaXMuY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGlzb2xhdGlvbkxldmVsLCAnaXNvbGF0aW9uTGV2ZWwnKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUsIGlzb2xhdGlvbkxldmVsKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTRVQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMICcgKyAodHJhbnNhY3Rpb24uaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSkgKyAnO0JFR0lOIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoKys7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVuZGVmaW5lZCwgKGVycikgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuVFJBTlNBQ1RJT05fTUFOQUdFUiwgdHJhbnNhY3Rpb24uYmVnaW5QYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuIFJlcXVpcmVkIHdoZW4gYGlzb2xhdGlvbkxldmVsYGlzIHByZXNlbnQuXG4gICAqL1xuICBjb21taXRUcmFuc2FjdGlvbihjYWxsYmFjazogQ29tbWl0VHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24obmFtZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ0NPTU1JVCBUUkFOICcgKyB0cmFuc2FjdGlvbi5uYW1lLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aC0tO1xuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5jb21taXRQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbGJhY2sgYSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlcmUgc2hvdWxkIGJlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbiAtIHRoYXQgaXMsIFtbYmVnaW5UcmFuc2FjdGlvbl1dXG4gICAqIHNob3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcGFyYW0gbmFtZSBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICogICBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGAgaXMgcHJlc2VudC5cbiAgICovXG4gIHJvbGxiYWNrVHJhbnNhY3Rpb24oY2FsbGJhY2s6IFJvbGxiYWNrVHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24obmFtZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ1JPTExCQUNLIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5yb2xsYmFja1BheWxvYWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBzYXZlcG9pbnQgd2l0aGluIGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXFxcbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICogICBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGAgaXMgcHJlc2VudC5cbiAgICovXG4gIHNhdmVUcmFuc2FjdGlvbihjYWxsYmFjazogU2F2ZVRyYW5zYWN0aW9uQ2FsbGJhY2ssIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTQVZFIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoKys7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1bmRlZmluZWQsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlRSQU5TQUNUSU9OX01BTkFHRVIsIHRyYW5zYWN0aW9uLnNhdmVQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBnaXZlbiBjYWxsYmFjayBhZnRlciBzdGFydGluZyBhIHRyYW5zYWN0aW9uLCBhbmQgY29tbWl0IG9yXG4gICAqIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBhZnRlcndhcmRzLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIHRoYXQgZW1wbG95cyBbW2JlZ2luVHJhbnNhY3Rpb25dXSwgW1tjb21taXRUcmFuc2FjdGlvbl1dLFxuICAgKiBbW3JvbGxiYWNrVHJhbnNhY3Rpb25dXSwgYW5kIFtbc2F2ZVRyYW5zYWN0aW9uXV0gdG8gZ3JlYXRseSBzaW1wbGlmeSB0aGVcbiAgICogdXNlIG9mIGRhdGFiYXNlIHRyYW5zYWN0aW9ucyBhbmQgYXV0b21hdGljYWxseSBoYW5kbGUgdHJhbnNhY3Rpb24gbmVzdGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiXG4gICAqIEBwYXJhbSBpc29sYXRpb25MZXZlbFxuICAgKiAgIFRoZSBpc29sYXRpb24gbGV2ZWwgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcnVuIHdpdGguXG4gICAqXG4gICAqICAgVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogICAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAgICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAgICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogICAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICAgKiBgU05BUFNIT1RgXG4gICAqXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgQ29ubmVjdGlvbidzIGlzb2xhdGlvbiBsZXZlbC5cbiAgICovXG4gIHRyYW5zYWN0aW9uKGNiOiAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHR4RG9uZT86IDxUIGV4dGVuZHMgVHJhbnNhY3Rpb25Eb25lQ2FsbGJhY2s+KGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCBkb25lOiBULCAuLi5hcmdzOiBDYWxsYmFja1BhcmFtZXRlcnM8VD4pID0+IHZvaWQpID0+IHZvaWQsIGlzb2xhdGlvbkxldmVsPzogdHlwZW9mIElTT0xBVElPTl9MRVZFTFtrZXlvZiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMXSkge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BjYmAgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlU2F2ZXBvaW50ID0gdGhpcy5pblRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IG5hbWUgPSAnX3RlZGlvdXNfJyArIChjcnlwdG8ucmFuZG9tQnl0ZXMoMTApLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgdHhEb25lOiA8VCBleHRlbmRzIFRyYW5zYWN0aW9uRG9uZUNhbGxiYWNrPihlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgZG9uZTogVCwgLi4uYXJnczogQ2FsbGJhY2tQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkID0gKGVyciwgZG9uZSwgLi4uYXJncykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhpcy5pblRyYW5zYWN0aW9uICYmIHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuTE9HR0VEX0lOKSB7XG4gICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKCh0eEVycikgPT4ge1xuICAgICAgICAgICAgZG9uZSh0eEVyciB8fCBlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgIH0sIG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoZXJyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1c2VTYXZlcG9pbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgICAgZG9uZShudWxsLCAuLi5hcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKHR4RXJyKSA9PiB7XG4gICAgICAgICAgZG9uZSh0eEVyciwgLi4uYXJncyk7XG4gICAgICAgIH0sIG5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodXNlU2F2ZXBvaW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlVHJhbnNhY3Rpb24oKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ1NFVCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgJyArIHRoaXMuZ2V0SXNvbGF0aW9uTGV2ZWxUZXh0KGlzb2xhdGlvbkxldmVsKSwgKGVycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVyciwgdHhEb25lKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHR4RG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWdpblRyYW5zYWN0aW9uKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNiKG51bGwsIHR4RG9uZSk7XG4gICAgICB9LCBuYW1lLCBpc29sYXRpb25MZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUmVxdWVzdChyZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQsIHBhY2tldFR5cGU6IG51bWJlciwgcGF5bG9hZDogKEl0ZXJhYmxlPEJ1ZmZlcj4gfCBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4pICYgeyB0b1N0cmluZzogKGluZGVudD86IHN0cmluZykgPT4gc3RyaW5nIH0pIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5MT0dHRURfSU4pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnUmVxdWVzdHMgY2FuIG9ubHkgYmUgbWFkZSBpbiB0aGUgJyArIHRoaXMuU1RBVEUuTE9HR0VEX0lOLm5hbWUgKyAnIHN0YXRlLCBub3QgdGhlICcgKyB0aGlzLnN0YXRlLm5hbWUgKyAnIHN0YXRlJztcbiAgICAgIHRoaXMuZGVidWcubG9nKG1lc3NhZ2UpO1xuICAgICAgcmVxdWVzdC5jYWxsYmFjayhuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsICdFSU5WQUxJRFNUQVRFJykpO1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2sobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhY2tldFR5cGUgPT09IFRZUEUuU1FMX0JBVENIKSB7XG4gICAgICAgIHRoaXMuaXNTcWxCYXRjaCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzU3FsQmF0Y2ggPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgIHJlcXVlc3QuY29ubmVjdGlvbiEgPSB0aGlzO1xuICAgICAgcmVxdWVzdC5yb3dDb3VudCEgPSAwO1xuICAgICAgcmVxdWVzdC5yb3dzISA9IFtdO1xuICAgICAgcmVxdWVzdC5yc3QhID0gW107XG5cbiAgICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBwYXlsb2FkU3RyZWFtLnVucGlwZShtZXNzYWdlKTtcbiAgICAgICAgcGF5bG9hZFN0cmVhbS5kZXN0cm95KG5ldyBSZXF1ZXN0RXJyb3IoJ0NhbmNlbGVkLicsICdFQ0FOQ0VMJykpO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaWdub3JlIGJpdCBhbmQgZW5kIHRoZSBtZXNzYWdlLlxuICAgICAgICBtZXNzYWdlLmlnbm9yZSA9IHRydWU7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHJlcXVlc3QucGF1c2VkKSB7XG4gICAgICAgICAgLy8gcmVzdW1lIHRoZSByZXF1ZXN0IGlmIGl0IHdhcyBwYXVzZWQgc28gd2UgY2FuIHJlYWQgdGhlIHJlbWFpbmluZyB0b2tlbnNcbiAgICAgICAgICByZXF1ZXN0LnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uY2UoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcblxuICAgICAgdGhpcy5jcmVhdGVSZXF1ZXN0VGltZXIoKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogcGFja2V0VHlwZSwgcmVzZXRDb25uZWN0aW9uOiB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2VJby5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfQ0xJRU5UX1JFUVVFU1QpO1xuXG4gICAgICBtZXNzYWdlLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgICByZXF1ZXN0Lm9uY2UoJ2NhbmNlbCcsIHRoaXMuX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQpO1xuXG4gICAgICAgIHRoaXMucmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHBheWxvYWQhLnRvU3RyaW5nKCcgICcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwYXlsb2FkU3RyZWFtID0gUmVhZGFibGUuZnJvbShwYXlsb2FkKTtcbiAgICAgIHBheWxvYWRTdHJlYW0ub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcGF5bG9hZFN0cmVhbS51bnBpcGUobWVzc2FnZSk7XG5cbiAgICAgICAgLy8gT25seSBzZXQgYSByZXF1ZXN0IGVycm9yIGlmIG5vIGVycm9yIHdhcyBzZXQgeWV0LlxuICAgICAgICByZXF1ZXN0LmVycm9yID8/PSBlcnJvcjtcblxuICAgICAgICBtZXNzYWdlLmlnbm9yZSA9IHRydWU7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG4gICAgICB9KTtcbiAgICAgIHBheWxvYWRTdHJlYW0ucGlwZShtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGN1cnJlbnRseSBleGVjdXRlZCByZXF1ZXN0LlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdC5jYW5jZWwoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY29ubmVjdGlvbiB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICogQ2FuIGJlIHVzZWZ1bCBmb3IgY29ubmVjdGlvbiBwb29sIGltcGxlbWVudGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICByZXNldChjYWxsYmFjazogUmVzZXRDYWxsYmFjaykge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzLmdldEluaXRpYWxTcWwoKSwgKGVycikgPT4ge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgIHRoaXMuaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgPSB0cnVlO1xuICAgIHRoaXMuZXhlY1NxbEJhdGNoKHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbdGhpcy50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRJc29sYXRpb25MZXZlbFRleHQoaXNvbGF0aW9uTGV2ZWw6IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF0pIHtcbiAgICBzd2l0Y2ggKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ3JlYWQgdW5jb21taXR0ZWQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ3JlcGVhdGFibGUgcmVhZCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnc2VyaWFsaXphYmxlJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ3NuYXBzaG90JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAncmVhZCBjb21taXR0ZWQnO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEVycm9yKGVycm9yOiBBZ2dyZWdhdGVFcnJvciB8IENvbm5lY3Rpb25FcnJvcik6IGJvb2xlYW4ge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcikge1xuICAgIGVycm9yID0gZXJyb3IuZXJyb3JzWzBdO1xuICB9XG4gIHJldHVybiAoZXJyb3IgaW5zdGFuY2VvZiBDb25uZWN0aW9uRXJyb3IpICYmICEhZXJyb3IuaXNUcmFuc2llbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbm5lY3Rpb247XG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb247XG5cbkNvbm5lY3Rpb24ucHJvdG90eXBlLlNUQVRFID0ge1xuICBJTklUSUFMSVpFRDoge1xuICAgIG5hbWU6ICdJbml0aWFsaXplZCcsXG4gICAgZXZlbnRzOiB7fVxuICB9LFxuICBDT05ORUNUSU5HOiB7XG4gICAgbmFtZTogJ0Nvbm5lY3RpbmcnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGlzZUNvbm5lY3Rpb24oKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9QUkVMT0dJTjoge1xuICAgIG5hbWU6ICdTZW50UHJlbG9naW4nLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuXG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgbWVzc2FnZSkge1xuICAgICAgICAgIG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFttZXNzYWdlQnVmZmVyLCBkYXRhXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVsb2dpblBheWxvYWQgPSBuZXcgUHJlbG9naW5QYXlsb2FkKG1lc3NhZ2VCdWZmZXIpO1xuICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHByZWxvZ2luUGF5bG9hZC50b1N0cmluZygnICAnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByZWxvZ2luUGF5bG9hZC5mZWRBdXRoUmVxdWlyZWQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZlZEF1dGhSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlbG9naW5QYXlsb2FkLmVuY3J5cHRpb25TdHJpbmcgPT09ICdPTicgfHwgcHJlbG9naW5QYXlsb2FkLmVuY3J5cHRpb25TdHJpbmcgPT09ICdSRVEnKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IoXCJTZXJ2ZXIgcmVxdWlyZXMgZW5jcnlwdGlvbiwgc2V0ICdlbmNyeXB0JyBjb25maWcgb3B0aW9uIHRvIHRydWUuXCIsICdFRU5DUllQVCcpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9UTFNTU0xORUdPVElBVElPTik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1lc3NhZ2VJby5zdGFydFRscyh0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zLCB0aGlzLnJvdXRpbmdEYXRhPy5zZXJ2ZXIgPz8gdGhpcy5jb25maWcuc2VydmVyLCB0aGlzLmNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VuZExvZ2luN1BhY2tldCgpO1xuXG4gICAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRpb24gfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICAgIHN3aXRjaCAoYXV0aGVudGljYXRpb24udHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJzpcbiAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc6XG4gICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdudGxtJzpcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9MT0dJTjdfV0lUSF9OVExNKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9LFxuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIFJFUk9VVElORzoge1xuICAgIG5hbWU6ICdSZVJvdXRpbmcnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuY2xlYW51cENvbm5lY3Rpb24oQ0xFQU5VUF9UWVBFLlJFRElSRUNUKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgbWVzc2FnZTogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfSxcbiAgICAgIHJlY29ubmVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuQ09OTkVDVElORyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWToge1xuICAgIG5hbWU6ICdUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWScsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jdXJUcmFuc2llbnRSZXRyeUNvdW50Kys7XG4gICAgICB0aGlzLmNsZWFudXBDb25uZWN0aW9uKENMRUFOVVBfVFlQRS5SRVRSWSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIG1lc3NhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgfSxcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9LFxuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlUmV0cnlUaW1lcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9UTFNTU0xORUdPVElBVElPTjoge1xuICAgIG5hbWU6ICdTZW50VExTU1NMTmVnb3RpYXRpb24nLFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9TVEFOREFSRF9MT0dJTjoge1xuICAgIG5hbWU6ICdTZW50TG9naW43V2l0aFN0YW5kYXJkTG9naW4nLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVyID0gbmV3IExvZ2luN1Rva2VuSGFuZGxlcih0aGlzKTtcbiAgICAgICAgY29uc3QgdG9rZW5TdHJlYW1QYXJzZXIgPSB0aGlzLmNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIGhhbmRsZXIpO1xuXG4gICAgICAgIGF3YWl0IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcblxuICAgICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgICAgaWYgKGhhbmRsZXIucm91dGluZ0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGluZ0RhdGEgPSBoYW5kbGVyLnJvdXRpbmdEYXRhO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5SRVJPVVRJTkcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkxPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sb2dpbkVycm9yKSB7XG4gICAgICAgICAgaWYgKGlzVHJhbnNpZW50RXJyb3IodGhpcy5sb2dpbkVycm9yKSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Zy5sb2coJ0luaXRpYXRpbmcgcmV0cnkgb24gdHJhbnNpZW50IGVycm9yJyk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgdGhpcy5sb2dpbkVycm9yKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBuZXcgQ29ubmVjdGlvbkVycm9yKCdMb2dpbiBmYWlsZWQuJywgJ0VMT0dJTicpKTtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgfVxuICAgICAgfSkoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9OVExNOiB7XG4gICAgbmFtZTogJ1NlbnRMb2dpbjdXaXRoTlRMTUxvZ2luJyxcbiAgICBlbnRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gbmV3IExvZ2luN1Rva2VuSGFuZGxlcih0aGlzKTtcbiAgICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG5cbiAgICAgICAgICBhd2FpdCBvbmNlKHRva2VuU3RyZWFtUGFyc2VyLCAnZW5kJyk7XG5cbiAgICAgICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlci5yb3V0aW5nRGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gaGFuZGxlci5yb3V0aW5nRGF0YTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuUkVST1VUSU5HKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkxPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnRsbXBhY2tldCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aGVudGljYXRpb24gPSB0aGlzLmNvbmZpZy5hdXRoZW50aWNhdGlvbiBhcyBOdGxtQXV0aGVudGljYXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTlRMTVJlc3BvbnNlUGF5bG9hZCh7XG4gICAgICAgICAgICAgIGRvbWFpbjogYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgICAgIHVzZXJOYW1lOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgICBwYXNzd29yZDogYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgbnRsbXBhY2tldDogdGhpcy5udGxtcGFja2V0XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5OVExNQVVUSF9QS1QsIHBheWxvYWQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubnRsbXBhY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9naW5FcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNpZW50RXJyb3IodGhpcy5sb2dpbkVycm9yKSkge1xuICAgICAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnSW5pdGlhdGluZyByZXRyeSBvbiB0cmFuc2llbnQgZXJyb3InKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgdGhpcy5sb2dpbkVycm9yKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBuZXcgQ29ubmVjdGlvbkVycm9yKCdMb2dpbiBmYWlsZWQuJywgJ0VMT0dJTicpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSkoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9GRURBVVRIOiB7XG4gICAgbmFtZTogJ1NlbnRMb2dpbjdXaXRoZmVkYXV0aCcsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTG9naW43VG9rZW5IYW5kbGVyKHRoaXMpO1xuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG4gICAgICAgIGF3YWl0IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgICAgaWYgKGhhbmRsZXIubG9naW5BY2tSZWNlaXZlZCkge1xuICAgICAgICAgIGlmIChoYW5kbGVyLnJvdXRpbmdEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gaGFuZGxlci5yb3V0aW5nRGF0YTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuUkVST1VUSU5HKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU5fU0VORElOR19JTklUSUFMX1NRTCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmVkQXV0aEluZm9Ub2tlbiA9IGhhbmRsZXIuZmVkQXV0aEluZm9Ub2tlbjtcblxuICAgICAgICBpZiAoZmVkQXV0aEluZm9Ub2tlbiAmJiBmZWRBdXRoSW5mb1Rva2VuLnN0c3VybCAmJiBmZWRBdXRoSW5mb1Rva2VuLnNwbikge1xuICAgICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uID0gdGhpcy5jb25maWcuYXV0aGVudGljYXRpb24gYXMgQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQgfCBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbjtcbiAgICAgICAgICBjb25zdCB0b2tlblNjb3BlID0gbmV3IFVSTCgnLy5kZWZhdWx0JywgZmVkQXV0aEluZm9Ub2tlbi5zcG4pLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBsZXQgY3JlZGVudGlhbHM7XG5cbiAgICAgICAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBVc2VybmFtZVBhc3N3b3JkQ3JlZGVudGlhbChcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkID8/ICdjb21tb24nLFxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nOlxuICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnOlxuICAgICAgICAgICAgICBjb25zdCBtc2lBcmdzID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCA/IFthdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkLCB7fV0gOiBbe31dO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBNYW5hZ2VkSWRlbnRpdHlDcmVkZW50aWFsKC4uLm1zaUFyZ3MpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkID8geyBtYW5hZ2VkSWRlbnRpdHlDbGllbnRJZDogYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCB9IDoge307XG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gbmV3IERlZmF1bHRBenVyZUNyZWRlbnRpYWwoYXJncyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBDbGllbnRTZWNyZXRDcmVkZW50aWFsKFxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWQsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudFNlY3JldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgdG9rZW5SZXNwb25zZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdG9rZW5SZXNwb25zZSA9IGF3YWl0IGNyZWRlbnRpYWxzLmdldFRva2VuKHRva2VuU2NvcGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICAgICAgICBbbmV3IENvbm5lY3Rpb25FcnJvcignU2VjdXJpdHkgdG9rZW4gY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgb3IgYXV0aG9yaXplZC4nLCAnRUZFREFVVEgnKSwgZXJyXSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCB0aGlzLmxvZ2luRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG5cbiAgICAgICAgICBjb25zdCB0b2tlbiA9IHRva2VuUmVzcG9uc2UudG9rZW47XG4gICAgICAgICAgdGhpcy5zZW5kRmVkQXV0aFRva2VuTWVzc2FnZSh0b2tlbik7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvZ2luRXJyb3IpIHtcbiAgICAgICAgICBpZiAoaXNUcmFuc2llbnRFcnJvcih0aGlzLmxvZ2luRXJyb3IpKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnSW5pdGlhdGluZyByZXRyeSBvbiB0cmFuc2llbnQgZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCB0aGlzLmxvZ2luRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IoJ0xvZ2luIGZhaWxlZC4nLCAnRUxPR0lOJykpO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgICB9XG5cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9LFxuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIExPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMOiB7XG4gICAgbmFtZTogJ0xvZ2dlZEluU2VuZGluZ0luaXRpYWxTcWwnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VuZEluaXRpYWxTcWwoKTtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgbmV3IEluaXRpYWxTcWxUb2tlbkhhbmRsZXIodGhpcykpO1xuICAgICAgICBhd2FpdCBvbmNlKHRva2VuU3RyZWFtUGFyc2VyLCAnZW5kJyk7XG5cbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZEluaXRpYWxTcWwoKTtcblxuICAgICAgfSkoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uIHNvY2tldEVycm9yKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgTE9HR0VEX0lOOiB7XG4gICAgbmFtZTogJ0xvZ2dlZEluJyxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBTRU5UX0NMSUVOVF9SRVFVRVNUOiB7XG4gICAgbmFtZTogJ1NlbnRDbGllbnRSZXF1ZXN0JyxcbiAgICBlbnRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlcXVlc3QgdGltZXIgaXMgc3RvcHBlZCBvbiBmaXJzdCBkYXRhIHBhY2thZ2VcbiAgICAgICAgdGhpcy5jbGVhclJlcXVlc3RUaW1lcigpO1xuXG4gICAgICAgIGNvbnN0IHRva2VuU3RyZWFtUGFyc2VyID0gdGhpcy5jcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCBuZXcgUmVxdWVzdFRva2VuSGFuZGxlcih0aGlzLCB0aGlzLnJlcXVlc3QhKSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGFuZCB3ZSBoYXZlIGEgYGNhbmNlbFRpbWVyYFxuICAgICAgICAvLyBkZWZpbmVkLCB3ZSBzZW5kIGEgYXR0ZW50aW9uIG1lc3NhZ2UgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHJlcXVlc3QgbWVzc2FnZSB3YXMgZnVsbHkgc2VudCBvZmYuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGFscmVhZHkgc3RhcnRlZCBjb25zdW1pbmcgdGhlIGN1cnJlbnQgbWVzc2FnZVxuICAgICAgICAvLyAoYnV0IGFsbCB0aGUgdG9rZW4gaGFuZGxlcnMgc2hvdWxkIGJlIG5vLW9wcyksIGFuZFxuICAgICAgICAvLyBuZWVkIHRvIGVuc3VyZSB0aGUgbmV4dCBtZXNzYWdlIGlzIGhhbmRsZWQgYnkgdGhlXG4gICAgICAgIC8vIGBTRU5UX0FUVEVOVElPTmAgc3RhdGUuXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3Q/LmNhbmNlbGVkICYmIHRoaXMuY2FuY2VsVGltZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5TRU5UX0FUVEVOVElPTik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvblJlc3VtZSA9ICgpID0+IHtcbiAgICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5yZXN1bWUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25QYXVzZSA9ICgpID0+IHtcbiAgICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5wYXVzZSgpO1xuXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5vbmNlKCdyZXN1bWUnLCBvblJlc3VtZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0Py5vbigncGF1c2UnLCBvblBhdXNlKTtcblxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLnJlcXVlc3QucGF1c2VkKSB7XG4gICAgICAgICAgb25QYXVzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgdG9rZW5TdHJlYW1QYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kT2ZNZXNzYWdlKTtcblxuICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHRoaXMucmVxdWVzdC5wYXVzZWQpIHtcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgcmVxdWVzdCBpZiBpdCB3YXMgcGF1c2VkIHNvIHdlIGNhbiByZWFkIHRoZSByZW1haW5pbmcgdG9rZW5zXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3QucmVzdW1lKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdyZXN1bWUnLCBvblJlc3VtZSk7XG5cbiAgICAgICAgICAvLyBUaGUgYF9jYW5jZWxBZnRlclJlcXVlc3RTZW50YCBjYWxsYmFjayB3aWxsIGhhdmUgc2VudCBhXG4gICAgICAgICAgLy8gYXR0ZW50aW9uIG1lc3NhZ2UsIHNvIG5vdyB3ZSBuZWVkIHRvIGFsc28gc3dpdGNoIHRvXG4gICAgICAgICAgLy8gdGhlIGBTRU5UX0FUVEVOVElPTmAgc3RhdGUgdG8gbWFrZSBzdXJlIHRoZSBhdHRlbnRpb24gYWNrXG4gICAgICAgICAgLy8gbWVzc2FnZSBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LlxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9BVFRFTlRJT04pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9uRW5kT2ZNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ2NhbmNlbCcsIHRoaXMuX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdwYXVzZScsIG9uUGF1c2UpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ3Jlc3VtZScsIG9uUmVzdW1lKTtcblxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuTE9HR0VEX0lOKTtcbiAgICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0IGFzIFJlcXVlc3Q7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyAmJiBzcWxSZXF1ZXN0LmVycm9yICYmIHRoaXMuaXNTcWxCYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soc3FsUmVxdWVzdC5lcnJvciwgc3FsUmVxdWVzdC5yb3dDb3VudCwgc3FsUmVxdWVzdC5yb3dzKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5vbmNlKCdlbmQnLCBvbkVuZE9mTWVzc2FnZSk7XG4gICAgICAgIHRoaXMucmVxdWVzdD8ub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgfSkoKTtcblxuICAgIH0sXG4gICAgZXhpdDogZnVuY3Rpb24obmV4dFN0YXRlKSB7XG4gICAgICB0aGlzLmNsZWFyUmVxdWVzdFRpbWVyKCk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY29uc3Qgc3FsUmVxdWVzdCA9IHRoaXMucmVxdWVzdCE7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG5cbiAgICAgICAgc3FsUmVxdWVzdC5jYWxsYmFjayhlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9BVFRFTlRJT046IHtcbiAgICBuYW1lOiAnU2VudEF0dGVudGlvbicsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgQXR0ZW50aW9uVG9rZW5IYW5kbGVyKHRoaXMsIHRoaXMucmVxdWVzdCEpO1xuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG5cbiAgICAgICAgYXdhaXQgb25jZSh0b2tlblN0cmVhbVBhcnNlciwgJ2VuZCcpO1xuICAgICAgICAvLyAzLjIuNS43IFNlbnQgQXR0ZW50aW9uIFN0YXRlXG4gICAgICAgIC8vIERpc2NhcmQgYW55IGRhdGEgY29udGFpbmVkIGluIHRoZSByZXNwb25zZSwgdW50aWwgd2UgcmVjZWl2ZSB0aGUgYXR0ZW50aW9uIHJlc3BvbnNlXG4gICAgICAgIGlmIChoYW5kbGVyLmF0dGVudGlvblJlY2VpdmVkKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckNhbmNlbFRpbWVyKCk7XG5cbiAgICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0ITtcbiAgICAgICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuXG4gICAgICAgICAgaWYgKHNxbFJlcXVlc3QuZXJyb3IgJiYgc3FsUmVxdWVzdC5lcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBzcWxSZXF1ZXN0LmVycm9yLmNvZGUgPT09ICdFVElNRU9VVCcpIHtcbiAgICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soc3FsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2sobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY29uc3Qgc3FsUmVxdWVzdCA9IHRoaXMucmVxdWVzdCE7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcblxuICAgICAgICBzcWxSZXF1ZXN0LmNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBGSU5BTDoge1xuICAgIG5hbWU6ICdGaW5hbCcsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbihDTEVBTlVQX1RZUEUuTk9STUFMKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nLCBhcyB0aGUgdGltZXIgc2hvdWxkIGJlIGNsZWFuZWQgdXAuXG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIH0sXG4gICAgICBzb2NrZXRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAg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
|
|
2912
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkiLCJERUZBVUxUX0NPTk5FQ1RfVElNRU9VVCIsIkRFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCIsIkRFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQiLCJERUZBVUxUX0NPTk5FQ1RfUkVUUllfSU5URVJWQUwiLCJERUZBVUxUX1BBQ0tFVF9TSVpFIiwiREVGQVVMVF9URVhUU0laRSIsIkRFRkFVTFRfREFURUZJUlNUIiwiREVGQVVMVF9QT1JUIiwiREVGQVVMVF9URFNfVkVSU0lPTiIsIkRFRkFVTFRfTEFOR1VBR0UiLCJERUZBVUxUX0RBVEVGT1JNQVQiLCJDTEVBTlVQX1RZUEUiLCJOT1JNQUwiLCJSRURJUkVDVCIsIlJFVFJZIiwiQ29ubmVjdGlvbiIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiZmVkQXV0aFJlcXVpcmVkIiwic2VjdXJlQ29udGV4dE9wdGlvbnMiLCJpblRyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25EZXNjcmlwdG9ycyIsInRyYW5zYWN0aW9uRGVwdGgiLCJpc1NxbEJhdGNoIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsInRyYW5zaWVudEVycm9yTG9va3VwIiwiY2xvc2VkIiwibG9naW5FcnJvciIsImRlYnVnIiwibnRsbXBhY2tldCIsIm50bG1wYWNrZXRCdWZmZXIiLCJyb3V0aW5nRGF0YSIsIm1lc3NhZ2VJbyIsInN0YXRlIiwicmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCIsInJlcXVlc3QiLCJwcm9jUmV0dXJuU3RhdHVzVmFsdWUiLCJzb2NrZXQiLCJtZXNzYWdlQnVmZmVyIiwiY29ubmVjdFRpbWVyIiwiY2FuY2VsVGltZXIiLCJyZXF1ZXN0VGltZXIiLCJyZXRyeVRpbWVyIiwiX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIlR5cGVFcnJvciIsInNlcnZlciIsImF1dGhlbnRpY2F0aW9uIiwidW5kZWZpbmVkIiwidHlwZSIsIm9wdGlvbnMiLCJkb21haW4iLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwidG9VcHBlckNhc2UiLCJjbGllbnRJZCIsInRlbmFudElkIiwidG9rZW4iLCJjbGllbnRTZWNyZXQiLCJhYm9ydFRyYW5zYWN0aW9uT25FcnJvciIsImFwcE5hbWUiLCJjYW1lbENhc2VDb2x1bW5zIiwiY2FuY2VsVGltZW91dCIsImNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTCIsImNvbHVtbkVuY3J5cHRpb25TZXR0aW5nIiwiY29sdW1uTmFtZVJlcGxhY2VyIiwiY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwiLCJjb25uZWN0VGltZW91dCIsImNvbm5lY3RvciIsImNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCIsIklTT0xBVElPTl9MRVZFTCIsIlJFQURfQ09NTUlUVEVEIiwiY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzIiwiZGF0YWJhc2UiLCJkYXRlZmlyc3QiLCJkYXRlRm9ybWF0IiwiZGF0YSIsInBhY2tldCIsInBheWxvYWQiLCJlbmFibGVBbnNpTnVsbCIsImVuYWJsZUFuc2lOdWxsRGVmYXVsdCIsImVuYWJsZUFuc2lQYWRkaW5nIiwiZW5hYmxlQW5zaVdhcm5pbmdzIiwiZW5hYmxlQXJpdGhBYm9ydCIsImVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsIiwiZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCIsImVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zIiwiZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQiLCJlbmFibGVRdW90ZWRJZGVudGlmaWVyIiwiZW5jcnlwdCIsImZhbGxiYWNrVG9EZWZhdWx0RGIiLCJlbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnMiLCJpbnN0YW5jZU5hbWUiLCJpc29sYXRpb25MZXZlbCIsImxhbmd1YWdlIiwibG9jYWxBZGRyZXNzIiwibWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzIiwibXVsdGlTdWJuZXRGYWlsb3ZlciIsInBhY2tldFNpemUiLCJwb3J0IiwicmVhZE9ubHlJbnRlbnQiLCJyZXF1ZXN0VGltZW91dCIsInJvd0NvbGxlY3Rpb25PbkRvbmUiLCJyb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiIsInNlcnZlck5hbWUiLCJzZXJ2ZXJTdXBwb3J0c0NvbHVtbkVuY3J5cHRpb24iLCJ0ZHNWZXJzaW9uIiwidGV4dHNpemUiLCJ0cnVzdGVkU2VydmVyTmFtZUFFIiwidHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSIsInVzZUNvbHVtbk5hbWVzIiwidXNlVVRDIiwid29ya3N0YXRpb25JZCIsImxvd2VyQ2FzZUd1aWRzIiwiRXJyb3IiLCJSYW5nZUVycm9yIiwic2VjdXJlT3B0aW9ucyIsIk9iamVjdCIsImNyZWF0ZSIsInZhbHVlIiwiY29uc3RhbnRzIiwiU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyIsImNyZWF0ZURlYnVnIiwiQnVmZmVyIiwiZnJvbSIsImFsbG9jIiwiVHJhbnNpZW50RXJyb3JMb29rdXAiLCJTVEFURSIsIklOSVRJQUxJWkVEIiwic2VuZE1lc3NhZ2UiLCJUWVBFIiwiQVRURU5USU9OIiwiY3JlYXRlQ2FuY2VsVGltZXIiLCJjb25uZWN0IiwiY29ubmVjdExpc3RlbmVyIiwiQ29ubmVjdGlvbkVycm9yIiwibmFtZSIsIm9uQ29ubmVjdCIsImVyciIsInJlbW92ZUxpc3RlbmVyIiwib25FcnJvciIsIm9uY2UiLCJ0cmFuc2l0aW9uVG8iLCJDT05ORUNUSU5HIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjbG9zZSIsIkZJTkFMIiwiaW5pdGlhbGlzZUNvbm5lY3Rpb24iLCJzaWduYWwiLCJjcmVhdGVDb25uZWN0VGltZXIiLCJjb25uZWN0T25Qb3J0IiwidGltZW91dCIsInRoZW4iLCJwcm9jZXNzIiwibmV4dFRpY2siLCJjbGVhckNvbm5lY3RUaW1lciIsIm1lc3NhZ2UiLCJjbGVhbnVwQ29ubmVjdGlvbiIsImNsZWFudXBUeXBlIiwiY2xlYXJSZXF1ZXN0VGltZXIiLCJjbGVhclJldHJ5VGltZXIiLCJjbG9zZUNvbm5lY3Rpb24iLCJSZXF1ZXN0RXJyb3IiLCJjYWxsYmFjayIsIkRlYnVnIiwiY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIiLCJoYW5kbGVyIiwiVG9rZW5TdHJlYW1QYXJzZXIiLCJjdXN0b21Db25uZWN0b3IiLCJjb25uZWN0T3B0cyIsImhvc3QiLCJjb25uZWN0SW5QYXJhbGxlbCIsImNvbm5lY3RJblNlcXVlbmNlIiwiZG5zIiwibG9va3VwIiwiZXJyb3IiLCJzb2NrZXRFcnJvciIsInNvY2tldENsb3NlIiwic29ja2V0RW5kIiwic2V0S2VlcEFsaXZlIiwiTWVzc2FnZUlPIiwiY2xlYXJ0ZXh0IiwibG9nIiwic2VuZFByZUxvZ2luIiwiU0VOVF9QUkVMT0dJTiIsImRlc3Ryb3kiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwic2V0VGltZW91dCIsImFib3J0IiwiY2xlYXJDYW5jZWxUaW1lciIsImNyZWF0ZVJlcXVlc3RUaW1lciIsImNyZWF0ZVJldHJ5VGltZXIiLCJyZXRyeVRpbWVvdXQiLCJkaXNwYXRjaEV2ZW50IiwiY2FuY2VsIiwiY2xlYXJUaW1lb3V0IiwibmV3U3RhdGUiLCJleGl0IiwiY2FsbCIsImVudGVyIiwiYXBwbHkiLCJnZXRFdmVudEhhbmRsZXIiLCJldmVudE5hbWUiLCJldmVudHMiLCJTRU5UX1RMU1NTTE5FR09USUFUSU9OIiwiY29kZSIsIlJFUk9VVElORyIsIlRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwiZXhlYyIsInZlcnNpb24iLCJQcmVsb2dpblBheWxvYWQiLCJOdW1iZXIiLCJzdWJidWlsZCIsIlBSRUxPR0lOIiwidG9TdHJpbmciLCJzZW5kTG9naW43UGFja2V0IiwiTG9naW43UGF5bG9hZCIsInZlcnNpb25zIiwiY2xpZW50UHJvZ1ZlciIsImNsaWVudFBpZCIsInBpZCIsImNvbm5lY3Rpb25JZCIsImNsaWVudFRpbWVab25lIiwiRGF0ZSIsImdldFRpbWV6b25lT2Zmc2V0IiwiY2xpZW50TGNpZCIsImZlZEF1dGgiLCJlY2hvIiwid29ya2Zsb3ciLCJmZWRBdXRoVG9rZW4iLCJzc3BpIiwiaG9zdG5hbWUiLCJvcyIsImxpYnJhcnlOYW1lIiwiaW5pdERiRmF0YWwiLCJMT0dJTjciLCJ0b0J1ZmZlciIsInNlbmRGZWRBdXRoVG9rZW5NZXNzYWdlIiwiYWNjZXNzVG9rZW5MZW4iLCJieXRlTGVuZ3RoIiwib2Zmc2V0Iiwid3JpdGVVSW50MzJMRSIsIndyaXRlIiwiRkVEQVVUSF9UT0tFTiIsIlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4iLCJzZW5kSW5pdGlhbFNxbCIsIlNxbEJhdGNoUGF5bG9hZCIsImdldEluaXRpYWxTcWwiLCJjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yIiwiTWVzc2FnZSIsIlNRTF9CQVRDSCIsIm91dGdvaW5nTWVzc2FnZVN0cmVhbSIsIlJlYWRhYmxlIiwicGlwZSIsInB1c2giLCJnZXRJc29sYXRpb25MZXZlbFRleHQiLCJqb2luIiwicHJvY2Vzc2VkSW5pdGlhbFNxbCIsImV4ZWNTcWxCYXRjaCIsIm1ha2VSZXF1ZXN0Iiwic3FsVGV4dE9yUHJvY2VkdXJlIiwiZXhlY1NxbCIsInZhbGlkYXRlUGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJUWVBFUyIsIk5WYXJDaGFyIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJtYWtlUGFyYW1zUGFyYW1ldGVyIiwiUlBDX1JFUVVFU1QiLCJScGNSZXF1ZXN0UGF5bG9hZCIsIlByb2NlZHVyZXMiLCJTcF9FeGVjdXRlU3FsIiwibmV3QnVsa0xvYWQiLCJ0YWJsZSIsImNhbGxiYWNrT3JPcHRpb25zIiwiQnVsa0xvYWQiLCJleGVjQnVsa0xvYWQiLCJidWxrTG9hZCIsInJvd3MiLCJleGVjdXRpb25TdGFydGVkIiwic3RyZWFtaW5nTW9kZSIsImZpcnN0Um93V3JpdHRlbiIsInJvd1N0cmVhbSIsInJvd1RvUGFja2V0VHJhbnNmb3JtIiwiZW5kIiwib25DYW5jZWwiLCJCdWxrTG9hZFBheWxvYWQiLCJSZXF1ZXN0IiwiZ2V0QnVsa0luc2VydFNxbCIsIkJVTEtfTE9BRCIsInByZXBhcmUiLCJJbnQiLCJwcmVwYXJpbmciLCJoYW5kbGUiLCJTcF9QcmVwYXJlIiwidW5wcmVwYXJlIiwiU3BfVW5wcmVwYXJlIiwiZXhlY3V0ZSIsImV4ZWN1dGVQYXJhbWV0ZXJzIiwiaSIsImxlbiIsInBhcmFtZXRlciIsInZhbGlkYXRlIiwiU3BfRXhlY3V0ZSIsImNhbGxQcm9jZWR1cmUiLCJiZWdpblRyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb24iLCJUcmFuc2FjdGlvbiIsImlzb2xhdGlvbkxldmVsVG9UU1FMIiwiVFJBTlNBQ1RJT05fTUFOQUdFUiIsImJlZ2luUGF5bG9hZCIsImNvbW1pdFRyYW5zYWN0aW9uIiwiY29tbWl0UGF5bG9hZCIsInJvbGxiYWNrVHJhbnNhY3Rpb24iLCJyb2xsYmFja1BheWxvYWQiLCJzYXZlVHJhbnNhY3Rpb24iLCJzYXZlUGF5bG9hZCIsImNiIiwidXNlU2F2ZXBvaW50IiwiY3J5cHRvIiwicmFuZG9tQnl0ZXMiLCJ0eERvbmUiLCJkb25lIiwiTE9HR0VEX0lOIiwidHhFcnIiLCJwYWNrZXRUeXBlIiwiY2FuY2VsZWQiLCJjb25uZWN0aW9uIiwicm93Q291bnQiLCJyc3QiLCJwYXlsb2FkU3RyZWFtIiwidW5waXBlIiwiaWdub3JlIiwicGF1c2VkIiwicmVzdW1lIiwicmVzZXRDb25uZWN0aW9uIiwiU0VOVF9DTElFTlRfUkVRVUVTVCIsInJlc2V0IiwiUkVBRF9VTkNPTU1JVFRFRCIsIlJFUEVBVEFCTEVfUkVBRCIsIlNFUklBTElaQUJMRSIsIlNOQVBTSE9UIiwiaXNUcmFuc2llbnRFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiZXJyb3JzIiwiaXNUcmFuc2llbnQiLCJtb2R1bGUiLCJleHBvcnRzIiwicHJvdG90eXBlIiwicmVhZE1lc3NhZ2UiLCJjb25jYXQiLCJwcmVsb2dpblBheWxvYWQiLCJlbmNyeXB0aW9uU3RyaW5nIiwic3RhcnRUbHMiLCJTRU5UX0xPR0lON19XSVRIX0ZFREFVVEgiLCJTRU5UX0xPR0lON19XSVRIX05UTE0iLCJjYXRjaCIsInJlY29ubmVjdCIsInJldHJ5IiwiTG9naW43VG9rZW5IYW5kbGVyIiwidG9rZW5TdHJlYW1QYXJzZXIiLCJsb2dpbkFja1JlY2VpdmVkIiwiTE9HR0VEX0lOX1NFTkRJTkdfSU5JVElBTF9TUUwiLCJOVExNUmVzcG9uc2VQYXlsb2FkIiwiTlRMTUFVVEhfUEtUIiwiZmVkQXV0aEluZm9Ub2tlbiIsInN0c3VybCIsInNwbiIsInRva2VuU2NvcGUiLCJVUkwiLCJjcmVkZW50aWFscyIsIlVzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsIiwibXNpQXJncyIsIk1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwiLCJtYW5hZ2VkSWRlbnRpdHlDbGllbnRJZCIsIkRlZmF1bHRBenVyZUNyZWRlbnRpYWwiLCJDbGllbnRTZWNyZXRDcmVkZW50aWFsIiwidG9rZW5SZXNwb25zZSIsImdldFRva2VuIiwiSW5pdGlhbFNxbFRva2VuSGFuZGxlciIsIlJlcXVlc3RUb2tlbkhhbmRsZXIiLCJTRU5UX0FUVEVOVElPTiIsIm9uUmVzdW1lIiwib25QYXVzZSIsInBhdXNlIiwib25FbmRPZk1lc3NhZ2UiLCJzcWxSZXF1ZXN0IiwibmV4dFN0YXRlIiwiQXR0ZW50aW9uVG9rZW5IYW5kbGVyIiwiYXR0ZW50aW9uUmVjZWl2ZWQiXSwic291cmNlcyI6WyIuLi9zcmMvY29ubmVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnbmV0JztcbmltcG9ydCBkbnMgZnJvbSAnZG5zJztcblxuaW1wb3J0IGNvbnN0YW50cyBmcm9tICdjb25zdGFudHMnO1xuaW1wb3J0IHsgU2VjdXJlQ29udGV4dE9wdGlvbnMgfSBmcm9tICd0bHMnO1xuXG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7XG4gIERlZmF1bHRBenVyZUNyZWRlbnRpYWwsXG4gIENsaWVudFNlY3JldENyZWRlbnRpYWwsXG4gIE1hbmFnZWRJZGVudGl0eUNyZWRlbnRpYWwsXG4gIFVzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsLFxufSBmcm9tICdAYXp1cmUvaWRlbnRpdHknO1xuXG5pbXBvcnQgQnVsa0xvYWQsIHsgT3B0aW9ucyBhcyBCdWxrTG9hZE9wdGlvbnMsIENhbGxiYWNrIGFzIEJ1bGtMb2FkQ2FsbGJhY2sgfSBmcm9tICcuL2J1bGstbG9hZCc7XG5pbXBvcnQgRGVidWcgZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIG9uY2UgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgaW5zdGFuY2VMb29rdXAgfSBmcm9tICcuL2luc3RhbmNlLWxvb2t1cCc7XG5pbXBvcnQgeyBUcmFuc2llbnRFcnJvckxvb2t1cCB9IGZyb20gJy4vdHJhbnNpZW50LWVycm9yLWxvb2t1cCc7XG5pbXBvcnQgeyBUWVBFIH0gZnJvbSAnLi9wYWNrZXQnO1xuaW1wb3J0IFByZWxvZ2luUGF5bG9hZCBmcm9tICcuL3ByZWxvZ2luLXBheWxvYWQnO1xuaW1wb3J0IExvZ2luN1BheWxvYWQgZnJvbSAnLi9sb2dpbjctcGF5bG9hZCc7XG5pbXBvcnQgTlRMTVJlc3BvbnNlUGF5bG9hZCBmcm9tICcuL250bG0tcGF5bG9hZCc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IFJwY1JlcXVlc3RQYXlsb2FkIGZyb20gJy4vcnBjcmVxdWVzdC1wYXlsb2FkJztcbmltcG9ydCBTcWxCYXRjaFBheWxvYWQgZnJvbSAnLi9zcWxiYXRjaC1wYXlsb2FkJztcbmltcG9ydCBNZXNzYWdlSU8gZnJvbSAnLi9tZXNzYWdlLWlvJztcbmltcG9ydCB7IFBhcnNlciBhcyBUb2tlblN0cmVhbVBhcnNlciB9IGZyb20gJy4vdG9rZW4vdG9rZW4tc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgSVNPTEFUSU9OX0xFVkVMLCBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDb25uZWN0aW9uRXJyb3IsIFJlcXVlc3RFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IGNvbm5lY3RJblBhcmFsbGVsLCBjb25uZWN0SW5TZXF1ZW5jZSB9IGZyb20gJy4vY29ubmVjdG9yJztcbmltcG9ydCB7IG5hbWUgYXMgbGlicmFyeU5hbWUgfSBmcm9tICcuL2xpYnJhcnknO1xuaW1wb3J0IHsgdmVyc2lvbnMgfSBmcm9tICcuL3Rkcy12ZXJzaW9ucyc7XG5pbXBvcnQgTWVzc2FnZSBmcm9tICcuL21lc3NhZ2UnO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuL21ldGFkYXRhLXBhcnNlcic7XG5pbXBvcnQgeyBjcmVhdGVOVExNUmVxdWVzdCB9IGZyb20gJy4vbnRsbSc7XG5pbXBvcnQgeyBDb2x1bW5FbmNyeXB0aW9uQXp1cmVLZXlWYXVsdFByb3ZpZGVyIH0gZnJvbSAnLi9hbHdheXMtZW5jcnlwdGVkL2tleXN0b3JlLXByb3ZpZGVyLWF6dXJlLWtleS12YXVsdCc7XG5cbmltcG9ydCB7IEFib3J0Q29udHJvbGxlciwgQWJvcnRTaWduYWwgfSBmcm9tICdub2RlLWFib3J0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgUGFyYW1ldGVyLCBUWVBFUyB9IGZyb20gJy4vZGF0YS10eXBlJztcbmltcG9ydCB7IEJ1bGtMb2FkUGF5bG9hZCB9IGZyb20gJy4vYnVsay1sb2FkLXBheWxvYWQnO1xuaW1wb3J0IHsgQ29sbGF0aW9uIH0gZnJvbSAnLi9jb2xsYXRpb24nO1xuaW1wb3J0IFByb2NlZHVyZXMgZnJvbSAnLi9zcGVjaWFsLXN0b3JlZC1wcm9jZWR1cmUnO1xuXG5pbXBvcnQgQWdncmVnYXRlRXJyb3IgZnJvbSAnZXMtYWdncmVnYXRlLWVycm9yJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IEF0dGVudGlvblRva2VuSGFuZGxlciwgSW5pdGlhbFNxbFRva2VuSGFuZGxlciwgTG9naW43VG9rZW5IYW5kbGVyLCBSZXF1ZXN0VG9rZW5IYW5kbGVyLCBUb2tlbkhhbmRsZXIgfSBmcm9tICcuL3Rva2VuL2hhbmRsZXInO1xuXG50eXBlIEJlZ2luVHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gc3RhcnQgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsXG4gICAqIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbkRlc2NyaXB0b3IgQSBCdWZmZXIgdGhhdCBkZXNjcmliZSB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgdHJhbnNhY3Rpb25EZXNjcmlwdG9yPzogQnVmZmVyKSA9PiB2b2lkXG5cbnR5cGUgU2F2ZVRyYW5zYWN0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHRvIHNldCBhIHNhdmVwb2ludCB3aXRoaW4gdGhlXG4gICAqIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyIElmIGFuIGVycm9yIG9jY3VycmVkLCBhbiBbW0Vycm9yXV0gb2JqZWN0IHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cbnR5cGUgQ29tbWl0VHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gY29tbWl0IHRoZSB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkLFxuICAgKiBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHdpdGggYW4gZXJyb3IuXG4gICAqIElmIGFuIGVycm9yIG9jY3VycmVkIHRoZW4gYGVycmAgd2lsbCBkZXNjcmliZSB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEFzIG9ubHkgb25lIHJlcXVlc3QgYXQgYSB0aW1lIG1heSBiZSBleGVjdXRlZCBvbiBhIGNvbm5lY3Rpb24sIGFub3RoZXIgcmVxdWVzdCBzaG91bGQgbm90XG4gICAqIGJlIGluaXRpYXRlZCB1bnRpbCB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG50eXBlIFJvbGxiYWNrVHJhbnNhY3Rpb25DYWxsYmFjayA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGhhc1xuICAgKiBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBlcnIgd2lsbCBkZXNjcmliZSB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEFzIG9ubHkgb25lIHJlcXVlc3QgYXQgYSB0aW1lIG1heSBiZSBleGVjdXRlZCBvbiBhIGNvbm5lY3Rpb24sIGFub3RoZXIgcmVxdWVzdCBzaG91bGQgbm90XG4gICAqIGJlIGluaXRpYXRlZCB1bnRpbCB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG50eXBlIFJlc2V0Q2FsbGJhY2sgPVxuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHJlc2V0IGhhcyBjb21wbGV0ZWQsXG4gICAqIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlclxuICAgKiByZXF1ZXN0IHNob3VsZCBub3QgYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIFtbRXJyb3JdXSBvYmplY3Qgd2l0aCBkZXRhaWxzIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xudHlwZSBUcmFuc2FjdGlvbkNhbGxiYWNrPFQgZXh0ZW5kcyAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiA9XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiAob3IgY3JlYXRlIGEgc2F2ZXBvaW50LCBpblxuICAgKiB0aGUgY2FzZSBvZiBhIG5lc3RlZCB0cmFuc2FjdGlvbikgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICAgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAgICogSWYgbm8gZXJyb3Igb2NjdXJyZWQsIHRoZSBjYWxsYmFjayBzaG91bGQgcGVyZm9ybSBpdHMgd29yayBhbmQgZXZlbnR1YWxseSBjYWxsXG4gICAqIGBkb25lYCB3aXRoIGFuIGVycm9yIG9yIG51bGwgKHRvIHRyaWdnZXIgYSB0cmFuc2FjdGlvbiByb2xsYmFjayBvciBhXG4gICAqIHRyYW5zYWN0aW9uIGNvbW1pdCkgYW5kIGFuIGFkZGl0aW9uYWwgY29tcGxldGlvbiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3RcbiAgICogdG8gcm9sbGJhY2sgb3IgY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgZ2l2ZW4gdG8gYGRvbmVgIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdG8gdGhpcyBjYWxsYmFjay5cbiAgICpcbiAgICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAgICogYmUgaW5pdGlhdGVkIHVudGlsIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnJvciBvY2N1cnJlZCwgYW4gW1tFcnJvcl1dIG9iamVjdCB3aXRoIGRldGFpbHMgb2YgdGhlIGVycm9yLlxuICAgKiBAcGFyYW0gdHhEb25lIElmIG5vIGVycm9yIG9jY3VycmVkLCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0byBjb21taXQgb3Igcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCB0eERvbmU/OiBUcmFuc2FjdGlvbkRvbmU8VD4pID0+IHZvaWQ7XG5cbnR5cGUgVHJhbnNhY3Rpb25Eb25lQ2FsbGJhY2sgPSAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xudHlwZSBDYWxsYmFja1BhcmFtZXRlcnM8VCBleHRlbmRzIChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXJnczogYW55W10pID0+IGFueT4gPSBUIGV4dGVuZHMgKGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCAuLi5hcmdzOiBpbmZlciBQKSA9PiBhbnkgPyBQIDogbmV2ZXI7XG5cbnR5cGUgVHJhbnNhY3Rpb25Eb25lPFQgZXh0ZW5kcyAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPiA9XG4gIC8qKlxuICAgKiBJZiBubyBlcnJvciBvY2N1cnJlZCwgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdG8gY29tbWl0IG9yIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGVyciBJZiBhbiBlcnIgb2NjdXJyZWQsIGEgc3RyaW5nIHdpdGggZGV0YWlscyBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIGRvbmU6IFQsIC4uLmFyZ3M6IENhbGxiYWNrUGFyYW1ldGVyczxUPikgPT4gdm9pZDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBLRUVQX0FMSVZFX0lOSVRJQUxfREVMQVkgPSAzMCAqIDEwMDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OTkVDVF9USU1FT1VUID0gMTUgKiAxMDAwO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0NMSUVOVF9SRVFVRVNUX1RJTUVPVVQgPSAxNSAqIDEwMDA7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfQ0FOQ0VMX1RJTUVPVVQgPSA1ICogMTAwMDtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9DT05ORUNUX1JFVFJZX0lOVEVSVkFMID0gNTAwO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX1BBQ0tFVF9TSVpFID0gNCAqIDEwMjQ7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfVEVYVFNJWkUgPSAyMTQ3NDgzNjQ3O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBERUZBVUxUX0RBVEVGSVJTVCA9IDc7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfUE9SVCA9IDE0MzM7XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERFRkFVTFRfVERTX1ZFUlNJT04gPSAnN180Jztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9MQU5HVUFHRSA9ICd1c19lbmdsaXNoJztcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgREVGQVVMVF9EQVRFRk9STUFUID0gJ21keSc7XG5cbmludGVyZmFjZSBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbiB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBJZiB5b3UgdXNlciB3YW50IHRvIGNvbm5lY3QgdG8gYW4gQXp1cmUgYXBwIHNlcnZpY2UgdXNpbmcgYSBzcGVjaWZpYyBjbGllbnQgYWNjb3VudFxuICAgICAqIHRoZXkgbmVlZCB0byBwcm92aWRlIGBjbGllbnRJZGAgYXNzY29pYXRlIHRvIHRoZWlyIGNyZWF0ZWQgaWRuZXRpdHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9wdGlvbmFsIGZvciByZXRyaWV2ZSB0b2tlbiBmcm9tIGF6dXJlIHdlYiBhcHAgc2VydmljZVxuICAgICAqL1xuICAgIGNsaWVudElkPzogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNvbm5lY3QgdXNpbmcgYSBzcGVjaWZpYyBjbGllbnQgYWNjb3VudFxuICAgICAqIHRoZXkgbmVlZCB0byBwcm92aWRlIGBjbGllbnRJZGAgYXNzb2NpYXRlZCB0byB0aGVpciBjcmVhdGVkIGlkZW50aXR5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvcHRpb25hbCBmb3IgcmV0cmlldmUgYSB0b2tlblxuICAgICAqL1xuICAgIGNsaWVudElkPzogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlEZWZhdWx0QXV0aGVudGljYXRpb24ge1xuICB0eXBlOiAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0JztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNvbm5lY3QgdXNpbmcgYSBzcGVjaWZpYyBjbGllbnQgYWNjb3VudFxuICAgICAqIHRoZXkgbmVlZCB0byBwcm92aWRlIGBjbGllbnRJZGAgYXNzb2NpYXRlZCB0byB0aGVpciBjcmVhdGVkIGlkZW50aXR5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvcHRpb25hbCBmb3IgcmV0cmlldmluZyBhIHRva2VuXG4gICAgICovXG4gICAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIH07XG59XG5cblxuaW50ZXJmYWNlIEF6dXJlQWN0aXZlRGlyZWN0b3J5QWNjZXNzVG9rZW5BdXRoZW50aWNhdGlvbiB7XG4gIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbic7XG4gIG9wdGlvbnM6IHtcbiAgICAvKipcbiAgICAgKiBBIHVzZXIgbmVlZCB0byBwcm92aWRlIGB0b2tlbmAgd2hpY2ggdGhleSByZXRyaXZlZCBlbHNlIHdoZXJlXG4gICAgICogdG8gZm9ybWluZyB0aGUgY29ubmVjdGlvbi5cbiAgICAgKi9cbiAgICB0b2tlbjogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogQSB1c2VyIG5lZWQgdG8gcHJvdmlkZSBgdXNlck5hbWVgIGFzc2NvaWF0ZSB0byB0aGVpciBhY2NvdW50LlxuICAgICAqL1xuICAgIHVzZXJOYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHVzZXIgbmVlZCB0byBwcm92aWRlIGBwYXNzd29yZGAgYXNzY29pYXRlIHRvIHRoZWlyIGFjY291bnQuXG4gICAgICovXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgY2xpZW50IGlkIHRvIHVzZS5cbiAgICAgKi9cbiAgICBjbGllbnRJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgcGFyYW1ldGVyIGZvciBzcGVjaWZpYyBBenVyZSB0ZW5hbnQgSURcbiAgICAgKi9cbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQXp1cmVBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlUHJpbmNpcGFsU2VjcmV0IHtcbiAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JztcbiAgb3B0aW9uczoge1xuICAgIC8qKlxuICAgICAqIEFwcGxpY2F0aW9uIChgY2xpZW50YCkgSUQgZnJvbSB5b3VyIHJlZ2lzdGVyZWQgQXp1cmUgYXBwbGljYXRpb25cbiAgICAgKi9cbiAgICBjbGllbnRJZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBjcmVhdGVkIGBjbGllbnQgc2VjcmV0YCBmb3IgdGhpcyByZWdpc3RlcmVkIEF6dXJlIGFwcGxpY2F0aW9uXG4gICAgICovXG4gICAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGlyZWN0b3J5IChgdGVuYW50YCkgSUQgZnJvbSB5b3VyIHJlZ2lzdGVyZWQgQXp1cmUgYXBwbGljYXRpb25cbiAgICAgKi9cbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgTnRsbUF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ250bG0nO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogVXNlciBuYW1lIGZyb20geW91ciB3aW5kb3dzIGFjY291bnQuXG4gICAgICovXG4gICAgdXNlck5hbWU6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXNzd29yZCBmcm9tIHlvdXIgd2luZG93cyBhY2NvdW50LlxuICAgICAqL1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogT25jZSB5b3Ugc2V0IGRvbWFpbiBmb3IgbnRsbSBhdXRoZW50aWNhdGlvbiB0eXBlLCBkcml2ZXIgd2lsbCBjb25uZWN0IHRvIFNRTCBTZXJ2ZXIgdXNpbmcgZG9tYWluIGxvZ2luLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGZvcm1pbmcgYSBjb25uZWN0aW9uIHVzaW5nIG50bG0gdHlwZVxuICAgICAqL1xuICAgIGRvbWFpbjogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRGVmYXVsdEF1dGhlbnRpY2F0aW9uIHtcbiAgdHlwZTogJ2RlZmF1bHQnO1xuICBvcHRpb25zOiB7XG4gICAgLyoqXG4gICAgICogVXNlciBuYW1lIHRvIHVzZSBmb3Igc3FsIHNlcnZlciBsb2dpbi5cbiAgICAgKi9cbiAgICB1c2VyTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBQYXNzd29yZCB0byB1c2UgZm9yIHNxbCBzZXJ2ZXIgbG9naW4uXG4gICAgICovXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmludGVyZmFjZSBFcnJvcldpdGhDb2RlIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJuYWxDb25uZWN0aW9uQ29uZmlnIHtcbiAgc2VydmVyOiBzdHJpbmc7XG4gIGF1dGhlbnRpY2F0aW9uOiBEZWZhdWx0QXV0aGVudGljYXRpb24gfCBOdGxtQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeVBhc3N3b3JkQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaUFwcFNlcnZpY2VBdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5TXNpVm1BdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5QWNjZXNzVG9rZW5BdXRoZW50aWNhdGlvbiB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5U2VydmljZVByaW5jaXBhbFNlY3JldCB8IEF6dXJlQWN0aXZlRGlyZWN0b3J5RGVmYXVsdEF1dGhlbnRpY2F0aW9uO1xuICBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMge1xuICBhYm9ydFRyYW5zYWN0aW9uT25FcnJvcjogYm9vbGVhbjtcbiAgYXBwTmFtZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBjYW1lbENhc2VDb2x1bW5zOiBib29sZWFuO1xuICBjYW5jZWxUaW1lb3V0OiBudW1iZXI7XG4gIGNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTDogbnVtYmVyO1xuICBjb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogYm9vbGVhbjtcbiAgY29sdW1uTmFtZVJlcGxhY2VyOiB1bmRlZmluZWQgfCAoKGNvbE5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlciwgbWV0YWRhdGE6IE1ldGFkYXRhKSA9PiBzdHJpbmcpO1xuICBjb25uZWN0aW9uUmV0cnlJbnRlcnZhbDogbnVtYmVyO1xuICBjb25uZWN0b3I6IHVuZGVmaW5lZCB8ICgoKSA9PiBQcm9taXNlPFNvY2tldD4pO1xuICBjb25uZWN0VGltZW91dDogbnVtYmVyO1xuICBjb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWw6IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF07XG4gIGNyeXB0b0NyZWRlbnRpYWxzRGV0YWlsczogU2VjdXJlQ29udGV4dE9wdGlvbnM7XG4gIGRhdGFiYXNlOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIGRhdGVmaXJzdDogbnVtYmVyO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGRlYnVnOiB7XG4gICAgZGF0YTogYm9vbGVhbjtcbiAgICBwYWNrZXQ6IGJvb2xlYW47XG4gICAgcGF5bG9hZDogYm9vbGVhbjtcbiAgICB0b2tlbjogYm9vbGVhbjtcbiAgfTtcbiAgZW5hYmxlQW5zaU51bGw6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVBbnNpTnVsbERlZmF1bHQ6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVBbnNpUGFkZGluZzogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUFuc2lXYXJuaW5nczogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUFyaXRoQWJvcnQ6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVDb25jYXROdWxsWWllbGRzTnVsbDogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZUN1cnNvckNsb3NlT25Db21taXQ6IG51bGwgfCBib29sZWFuO1xuICBlbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9uczogbnVsbCB8IGJvb2xlYW47XG4gIGVuYWJsZU51bWVyaWNSb3VuZGFib3J0OiBudWxsIHwgYm9vbGVhbjtcbiAgZW5hYmxlUXVvdGVkSWRlbnRpZmllcjogbnVsbCB8IGJvb2xlYW47XG4gIGVuY3J5cHQ6IGJvb2xlYW47XG4gIGVuY3J5cHRpb25LZXlTdG9yZVByb3ZpZGVyczogS2V5U3RvcmVQcm92aWRlck1hcCB8IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUb0RlZmF1bHREYjogYm9vbGVhbjtcbiAgaW5zdGFuY2VOYW1lOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gIGlzb2xhdGlvbkxldmVsOiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMW2tleW9mIHR5cGVvZiBJU09MQVRJT05fTEVWRUxdO1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICBsb2NhbEFkZHJlc3M6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgbWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzOiBudW1iZXI7XG4gIG11bHRpU3VibmV0RmFpbG92ZXI6IGJvb2xlYW47XG4gIHBhY2tldFNpemU6IG51bWJlcjtcbiAgcG9ydDogdW5kZWZpbmVkIHwgbnVtYmVyO1xuICByZWFkT25seUludGVudDogYm9vbGVhbjtcbiAgcmVxdWVzdFRpbWVvdXQ6IG51bWJlcjtcbiAgcm93Q29sbGVjdGlvbk9uRG9uZTogYm9vbGVhbjtcbiAgcm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb246IGJvb2xlYW47XG4gIHNlcnZlck5hbWU6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgc2VydmVyU3VwcG9ydHNDb2x1bW5FbmNyeXB0aW9uOiBib29sZWFuO1xuICB0ZHNWZXJzaW9uOiBzdHJpbmc7XG4gIHRleHRzaXplOiBudW1iZXI7XG4gIHRydXN0ZWRTZXJ2ZXJOYW1lQUU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZTogYm9vbGVhbjtcbiAgdXNlQ29sdW1uTmFtZXM6IGJvb2xlYW47XG4gIHVzZVVUQzogYm9vbGVhbjtcbiAgd29ya3N0YXRpb25JZDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICBsb3dlckNhc2VHdWlkczogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEtleVN0b3JlUHJvdmlkZXJNYXAge1xuICBba2V5OiBzdHJpbmddOiBDb2x1bW5FbmNyeXB0aW9uQXp1cmVLZXlWYXVsdFByb3ZpZGVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBTdGF0ZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZW50ZXI/KHRoaXM6IENvbm5lY3Rpb24pOiB2b2lkO1xuICBleGl0Pyh0aGlzOiBDb25uZWN0aW9uLCBuZXdTdGF0ZTogU3RhdGUpOiB2b2lkO1xuICBldmVudHM6IHtcbiAgICBzb2NrZXRFcnJvcj8odGhpczogQ29ubmVjdGlvbiwgZXJyOiBFcnJvcik6IHZvaWQ7XG4gICAgY29ubmVjdFRpbWVvdXQ/KHRoaXM6IENvbm5lY3Rpb24pOiB2b2lkO1xuICAgIG1lc3NhZ2U/KHRoaXM6IENvbm5lY3Rpb24sIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkO1xuICAgIHJldHJ5Pyh0aGlzOiBDb25uZWN0aW9uKTogdm9pZDtcbiAgICByZWNvbm5lY3Q/KHRoaXM6IENvbm5lY3Rpb24pOiB2b2lkO1xuICB9O1xufVxuXG50eXBlIEF1dGhlbnRpY2F0aW9uID0gRGVmYXVsdEF1dGhlbnRpY2F0aW9uIHxcbiAgTnRsbUF1dGhlbnRpY2F0aW9uIHxcbiAgQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHxcbiAgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeUFjY2Vzc1Rva2VuQXV0aGVudGljYXRpb24gfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQgfFxuICBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbjtcblxudHlwZSBBdXRoZW50aWNhdGlvblR5cGUgPSBBdXRoZW50aWNhdGlvblsndHlwZSddO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEhvc3RuYW1lIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICBzZXJ2ZXI6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZm9ybWluZyB0aGUgY29ubmVjdGlvbi5cbiAgICovXG4gIG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucztcbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0aW9uIHJlYWx0ZWQgb3B0aW9ucyBmb3IgY29ubmVjdGlvbi5cbiAgICovXG4gIGF1dGhlbnRpY2F0aW9uPzogQXV0aGVudGljYXRpb25PcHRpb25zO1xufVxuXG5pbnRlcmZhY2UgRGVidWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyBwYWNrZXQgZGF0YSBkZXRhaWxzXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZGF0YTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyBwYWNrZXQgZGV0YWlsc1xuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIHBhY2tldDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyBwYWNrZXQgcGF5bG9hZCBkZXRhaWxzXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgcGF5bG9hZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbGxpbmcgd2hldGhlciBbW2RlYnVnXV0gZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRleHQgZGVzY3JpYmluZyB0b2tlbiBzdHJlYW0gdG9rZW5zXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgdG9rZW46IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBdXRoZW50aWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kLCB2YWxpZCB0eXBlcyBhcmUgYGRlZmF1bHRgLCBgbnRsbWAsXG4gICAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkYCwgYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuYCxcbiAgICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtYCwgYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlYCxcbiAgICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdGBcbiAgICogb3IgYGF6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0YFxuICAgKi9cbiAgdHlwZT86IEF1dGhlbnRpY2F0aW9uVHlwZTtcbiAgLyoqXG4gICAqIERpZmZlcmVudCBvcHRpb25zIGZvciBhdXRoZW50aWNhdGlvbiB0eXBlczpcbiAgICpcbiAgICogKiBgZGVmYXVsdGA6IFtbRGVmYXVsdEF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBudGxtYCA6W1tOdGxtQXV0aGVudGljYXRpb25dXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkYCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uLm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbmAgOiBbW0F6dXJlQWN0aXZlRGlyZWN0b3J5QWNjZXNzVG9rZW5BdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICogKiBgYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm1gIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeU1zaVZtQXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlYCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24ub3B0aW9uc11dXG4gICAqICogYGF6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0YCA6IFtbQXp1cmVBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlUHJpbmNpcGFsU2VjcmV0Lm9wdGlvbnNdXVxuICAgKiAqIGBhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHRgIDogW1tBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbi5vcHRpb25zXV1cbiAgICovXG4gIG9wdGlvbnM/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcm9sbGJhY2sgYSB0cmFuc2FjdGlvbiBhdXRvbWF0aWNhbGx5IGlmIGFueSBlcnJvciBpcyBlbmNvdW50ZXJlZFxuICAgKiBkdXJpbmcgdGhlIGdpdmVuIHRyYW5zYWN0aW9uJ3MgZXhlY3V0aW9uLiBUaGlzIHNldHMgdGhlIHZhbHVlIGZvciBgU0VUIFhBQ1RfQUJPUlRgIGR1cmluZyB0aGVcbiAgICogaW5pdGlhbCBTUUwgcGhhc2Ugb2YgYSBjb25uZWN0aW9uIFtkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9zcWwvdC1zcWwvc3RhdGVtZW50cy9zZXQteGFjdC1hYm9ydC10cmFuc2FjdC1zcWwpLlxuICAgKi9cbiAgYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBuYW1lIHVzZWQgZm9yIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gaW4gcHJvZmlsaW5nLCBsb2dnaW5nIG9yIHRyYWNpbmcgdG9vbHMgb2YgU1FMU2VydmVyLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYFRlZGlvdXNgKVxuICAgKi9cbiAgYXBwTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBib29sZWFuLCBjb250cm9sbGluZyB3aGV0aGVyIHRoZSBjb2x1bW4gbmFtZXMgcmV0dXJuZWQgd2lsbCBoYXZlIHRoZSBmaXJzdCBsZXR0ZXIgY29udmVydGVkIHRvIGxvd2VyIGNhc2VcbiAgICogKGB0cnVlYCkgb3Igbm90LiBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgeW91IHByb3ZpZGUgYSBbW2NvbHVtbk5hbWVSZXBsYWNlcl1dLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICBjYW1lbENhc2VDb2x1bW5zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBbW1JlcXVlc3QuY2FuY2VsXV0gKGFib3J0KSBvZiBhIHJlcXVlc3QgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgICpcbiAgICogKGRlZmF1bHQ6IGA1MDAwYCkuXG4gICAqL1xuICBjYW5jZWxUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHdpdGggcGFyYW1ldGVycyBgKGNvbHVtbk5hbWUsIGluZGV4LCBjb2x1bW5NZXRhRGF0YSlgIGFuZCByZXR1cm5pbmcgYSBzdHJpbmcuIElmIHByb3ZpZGVkLFxuICAgKiB0aGlzIHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyIGNvbHVtbiBwZXIgcmVzdWx0LXNldC4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBTUUwtcHJvdmlkZWRcbiAgICogY29sdW1uIG5hbWUgb24gcm93IGFuZCBtZXRhIGRhdGEgb2JqZWN0cy4gVGhpcyBhbGxvd3MgeW91IHRvIGR5bmFtaWNhbGx5IGNvbnZlcnQgYmV0d2VlbiBuYW1pbmcgY29udmVudGlvbnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgbnVsbGApXG4gICAqL1xuICBjb2x1bW5OYW1lUmVwbGFjZXI/OiAoY29sTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEpID0+IHN0cmluZztcblxuICAvKipcbiAgICogTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmcgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24sIGluIGNhc2Ugb2YgdHJhbnNpZW50IGZhaWx1cmUuXG4gICAqXG4gICAqIChkZWZhdWx0OmA1MDBgKVxuICAgKi9cbiAgY29ubmVjdGlvblJldHJ5SW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb25uZWN0b3IgZmFjdG9yeSBtZXRob2QuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdW5kZWZpbmVkYClcbiAgICovXG4gIGNvbm5lY3Rvcj86ICgpID0+IFByb21pc2U8U29ja2V0PjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBhdHRlbXB0IHRvIGNvbm5lY3QgaXMgY29uc2lkZXJlZCBmYWlsZWRcbiAgICpcbiAgICogKGRlZmF1bHQ6IGAxNTAwMGApLlxuICAgKi9cbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGlzb2xhdGlvbiBsZXZlbCBmb3IgbmV3IGNvbm5lY3Rpb25zLiBBbGwgb3V0LW9mLXRyYW5zYWN0aW9uIHF1ZXJpZXMgYXJlIGV4ZWN1dGVkIHdpdGggdGhpcyBzZXR0aW5nLlxuICAgKlxuICAgKiBUaGUgaXNvbGF0aW9uIGxldmVscyBhcmUgYXZhaWxhYmxlIGZyb20gYHJlcXVpcmUoJ3RlZGlvdXMnKS5JU09MQVRJT05fTEVWRUxgLlxuICAgKiAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAqIGBSRUFEX0NPTU1JVFRFRGBcbiAgICogKiBgUkVQRUFUQUJMRV9SRUFEYFxuICAgKiAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICogYFNOQVBTSE9UYFxuICAgKlxuICAgKiAoZGVmYXVsdDogYFJFQURfQ09NTUlURURgKS5cbiAgICovXG4gIGNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiBlbmNyeXB0aW9uIGlzIHVzZWQsIGFuIG9iamVjdCBtYXkgYmUgc3VwcGxpZWQgdGhhdCB3aWxsIGJlIHVzZWRcbiAgICogZm9yIHRoZSBmaXJzdCBhcmd1bWVudCB3aGVuIGNhbGxpbmcgW2B0bHMuY3JlYXRlU2VjdXJlUGFpcmBdKGh0dHA6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS90bHMuaHRtbCN0bHNfdGxzX2NyZWF0ZXNlY3VyZXBhaXJfY3JlZGVudGlhbHNfaXNzZXJ2ZXJfcmVxdWVzdGNlcnRfcmVqZWN0dW5hdXRob3JpemVkKVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIGNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscz86IFNlY3VyZUNvbnRleHRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEYXRhYmFzZSB0byBjb25uZWN0IHRvIChkZWZhdWx0OiBkZXBlbmRlbnQgb24gc2VydmVyIGNvbmZpZ3VyYXRpb24pLlxuICAgKi9cbiAgZGF0YWJhc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayB0byBhIG51bWJlciBmcm9tIDEgdGhyb3VnaCA3LlxuICAgKi9cbiAgZGF0ZWZpcnN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgcG9zaXRpb24gb2YgbW9udGgsIGRheSBhbmQgeWVhciBpbiB0ZW1wb3JhbCBkYXRhdHlwZXMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgbWR5YClcbiAgICovXG4gIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG5cbiAgZGVidWc/OiBEZWJ1Z09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgY29udHJvbHMgdGhlIHdheSBudWxsIHZhbHVlcyBzaG91bGQgYmUgdXNlZCBkdXJpbmcgY29tcGFyaXNvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVBbnNpTnVsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGBTRVQgQU5TSV9OVUxMX0RGTFRfT04gT05gIHdpbGwgYmUgc2V0IGluIHRoZSBpbml0aWFsIHNxbC4gVGhpcyBtZWFucyBuZXcgY29sdW1ucyB3aWxsIGJlXG4gICAqIG51bGxhYmxlIGJ5IGRlZmF1bHQuIFNlZSB0aGUgW1QtU1FMIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODczNzUuYXNweClcbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYCkuXG4gICAqL1xuICBlbmFibGVBbnNpTnVsbERlZmF1bHQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGNvbnRyb2xzIGlmIHBhZGRpbmcgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIHZhbHVlcyBzaG9ydGVyIHRoYW4gdGhlIHNpemUgb2YgZGVmaW5lZCBjb2x1bW4uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVBbnNpUGFkZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIFNRTCBTZXJ2ZXIgd2lsbCBmb2xsb3cgSVNPIHN0YW5kYXJkIGJlaGF2aW9yIGR1cmluZyB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMuIEZvciBkZXRhaWxzLFxuICAgKiBzZWUgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC1hbnNpLXdhcm5pbmdzLXRyYW5zYWN0LXNxbClcbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFuc2lXYXJuaW5ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuZHMgYSBxdWVyeSB3aGVuIGFuIG92ZXJmbG93IG9yIGRpdmlkZS1ieS16ZXJvIGVycm9yIG9jY3VycyBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLlxuICAgKiBTZWUgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3NldC1hcml0aGFib3J0LXRyYW5zYWN0LXNxbD92aWV3PXNxbC1zZXJ2ZXItMjAxNylcbiAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIGVuYWJsZUFyaXRoQWJvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGRldGVybWluZXMgaWYgY29uY2F0ZW5hdGlvbiB3aXRoIE5VTEwgc2hvdWxkIHJlc3VsdCBpbiBOVUxMIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSwgbW9yZSBkZXRhaWxzIGluXG4gICAqIFtkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9zcWwvdC1zcWwvc3RhdGVtZW50cy9zZXQtY29uY2F0LW51bGwteWllbGRzLW51bGwtdHJhbnNhY3Qtc3FsKVxuICAgKlxuICAgKiAoZGVmYXVsdDogYHRydWVgKVxuICAgKi9cbiAgZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIGNvbnRyb2xzIHdoZXRoZXIgY3Vyc29yIHNob3VsZCBiZSBjbG9zZWQsIGlmIHRoZSB0cmFuc2FjdGlvbiBvcGVuaW5nIGl0IGdldHMgY29tbWl0dGVkIG9yIHJvbGxlZFxuICAgKiBiYWNrLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYG51bGxgKVxuICAgKi9cbiAgZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdD86IGJvb2xlYW4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4sIHNldHMgdGhlIGNvbm5lY3Rpb24gdG8gZWl0aGVyIGltcGxpY2l0IG9yIGF1dG9jb21taXQgdHJhbnNhY3Rpb24gbW9kZS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBlbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGZhbHNlLCBlcnJvciBpcyBub3QgZ2VuZXJhdGVkIGR1cmluZyBsb3NzIG9mIHByZWNlc3Npb24uXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBjaGFyYWN0ZXJzIGVuY2xvc2VkIGluIHNpbmdsZSBxdW90ZXMgYXJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMgYW5kIHRob3NlIGVuY2xvc2VkIGRvdWJsZSBxdW90ZXMgYXJlIHRyZWF0ZWQgYXMgaWRlbnRpZmllcnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApXG4gICAqL1xuICBlbmFibGVRdW90ZWRJZGVudGlmaWVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgZW5jcnlwdGVkLiBTZXQgdG8gYHRydWVgIGlmIHlvdSdyZSBvbiBXaW5kb3dzIEF6dXJlLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGVuY3J5cHQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCBpZiB0aGUgZGF0YWJhc2UgcmVxdWVzdGVkIGJ5IFtbZGF0YWJhc2VdXSBjYW5ub3QgYmUgYWNjZXNzZWQsXG4gICAqIHRoZSBjb25uZWN0aW9uIHdpbGwgZmFpbCB3aXRoIGFuIGVycm9yLiBIb3dldmVyLCBpZiBbW2ZhbGxiYWNrVG9EZWZhdWx0RGJdXSBpc1xuICAgKiBzZXQgdG8gYHRydWVgLCB0aGVuIHRoZSB1c2VyJ3MgZGVmYXVsdCBkYXRhYmFzZSB3aWxsIGJlIHVzZWQgaW5zdGVhZFxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGZhbGxiYWNrVG9EZWZhdWx0RGI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgbmFtZSB0byBjb25uZWN0IHRvLlxuICAgKiBUaGUgU1FMIFNlcnZlciBCcm93c2VyIHNlcnZpY2UgbXVzdCBiZSBydW5uaW5nIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIsXG4gICAqIGFuZCBVRFAgcG9ydCAxNDM0IG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgbXVzdCBiZSByZWFjaGFibGUuXG4gICAqXG4gICAqIChubyBkZWZhdWx0KVxuICAgKlxuICAgKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBbW3BvcnRdXS5cbiAgICovXG4gIGluc3RhbmNlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgaXNvbGF0aW9uIGxldmVsIHRoYXQgdHJhbnNhY3Rpb25zIHdpbGwgYmUgcnVuIHdpdGguXG4gICAqXG4gICAqIFRoZSBpc29sYXRpb24gbGV2ZWxzIGFyZSBhdmFpbGFibGUgZnJvbSBgcmVxdWlyZSgndGVkaW91cycpLklTT0xBVElPTl9MRVZFTGAuXG4gICAqICogYFJFQURfVU5DT01NSVRURURgXG4gICAqICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAqIGBSRVBFQVRBQkxFX1JFQURgXG4gICAqICogYFNFUklBTElaQUJMRWBcbiAgICogKiBgU05BUFNIT1RgXG4gICAqXG4gICAqIChkZWZhdWx0OiBgUkVBRF9DT01NSVRFRGApLlxuICAgKi9cbiAgaXNvbGF0aW9uTGV2ZWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGFuZ3VhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBzZXNzaW9uLiBUaGUgc2Vzc2lvbiBsYW5ndWFnZSBkZXRlcm1pbmVzIHRoZSBkYXRldGltZSBmb3JtYXRzIGFuZCBzeXN0ZW0gbWVzc2FnZXMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdXNfZW5nbGlzaGApLlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggbmV0d29yayBpbnRlcmZhY2UgKGlwIGFkZHJlc3MpIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gU1FMIFNlcnZlci5cbiAgICovXG4gIGxvY2FsQWRkcmVzcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBib29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gcGFyc2UgdW5pcXVlIGlkZW50aWZpZXIgdHlwZSB3aXRoIGxvd2VyY2FzZSBjYXNlIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAgICovXG4gIGxvd2VyQ2FzZUd1aWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb24gcmV0cmllcyBmb3IgdHJhbnNpZW50IGVycm9ycy7jgIFcbiAgICpcbiAgICogKGRlZmF1bHQ6IGAzYCkuXG4gICAqL1xuICBtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIE11bHRpU3VibmV0RmFpbG92ZXIgPSBUcnVlIHBhcmFtZXRlciwgd2hpY2ggY2FuIGhlbHAgbWluaW1pemUgdGhlIGNsaWVudCByZWNvdmVyeSBsYXRlbmN5IHdoZW4gZmFpbG92ZXJzIG9jY3VyLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICBtdWx0aVN1Ym5ldEZhaWxvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgVERTIHBhY2tldHMgKHN1YmplY3QgdG8gbmVnb3RpYXRpb24gd2l0aCB0aGUgc2VydmVyKS5cbiAgICogU2hvdWxkIGJlIGEgcG93ZXIgb2YgMi5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGA0MDk2YCkuXG4gICAqL1xuICBwYWNrZXRTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQb3J0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQ6IGAxNDMzYCkuXG4gICAqXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFtbaW5zdGFuY2VOYW1lXV1cbiAgICovXG4gIHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgY29ubmVjdGlvbiB3aWxsIHJlcXVlc3QgcmVhZCBvbmx5IGFjY2VzcyBmcm9tIGEgU1FMIFNlcnZlciBBdmFpbGFiaWxpdHlcbiAgICogR3JvdXAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW2hlcmVdKGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9oaDcxMDA1NC5hc3B4IFwiTWljcm9zb2Z0OiBDb25maWd1cmUgUmVhZC1Pbmx5IFJvdXRpbmcgZm9yIGFuIEF2YWlsYWJpbGl0eSBHcm91cCAoU1FMIFNlcnZlcilcIilcbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKi9cbiAgcmVhZE9ubHlJbnRlbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgYSByZXF1ZXN0IGlzIGNvbnNpZGVyZWQgZmFpbGVkLCBvciBgMGAgZm9yIG5vIHRpbWVvdXQuXG4gICAqXG4gICAqIEFzIHNvb24gYXMgYSByZXNwb25zZSBpcyByZWNlaXZlZCwgdGhlIHRpbWVvdXQgaXMgY2xlYXJlZC4gVGhpcyBtZWFucyB0aGF0IHF1ZXJpZXMgdGhhdCBpbW1lZGlhdGVseSByZXR1cm4gYSByZXNwb25zZSBoYXZlIGFiaWxpdHkgdG8gcnVuIGxvbmdlciB0aGFuIHRoaXMgdGltZW91dC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGAxNTAwMGApLlxuICAgKi9cbiAgcmVxdWVzdFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiwgdGhhdCB3aGVuIHRydWUgd2lsbCBleHBvc2UgcmVjZWl2ZWQgcm93cyBpbiBSZXF1ZXN0cyBkb25lIHJlbGF0ZWQgZXZlbnRzOlxuICAgKiAqIFtbUmVxdWVzdC5FdmVudF9kb25lSW5Qcm9jXV1cbiAgICogKiBbW1JlcXVlc3QuRXZlbnRfZG9uZVByb2NdXVxuICAgKiAqIFtbUmVxdWVzdC5FdmVudF9kb25lXV1cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqXG4gICAqIENhdXRpb246IElmIG1hbnkgcm93IGFyZSByZWNlaXZlZCwgZW5hYmxpbmcgdGhpcyBvcHRpb24gY291bGQgcmVzdWx0IGluXG4gICAqIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuXG4gICAqL1xuICByb3dDb2xsZWN0aW9uT25Eb25lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBib29sZWFuLCB0aGF0IHdoZW4gdHJ1ZSB3aWxsIGV4cG9zZSByZWNlaXZlZCByb3dzIGluIFJlcXVlc3RzJyBjb21wbGV0aW9uIGNhbGxiYWNrLlNlZSBbW1JlcXVlc3QuY29uc3RydWN0b3JdXS5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqXG4gICAqIENhdXRpb246IElmIG1hbnkgcm93IGFyZSByZWNlaXZlZCwgZW5hYmxpbmcgdGhpcyBvcHRpb24gY291bGQgcmVzdWx0IGluXG4gICAqIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuXG4gICAqL1xuICByb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIFREUyB0byB1c2UuIElmIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgc3BlY2lmaWVkIHZlcnNpb24sIG5lZ290aWF0ZWQgdmVyc2lvbiBpcyB1c2VkIGluc3RlYWQuXG4gICAqXG4gICAqIFRoZSB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIGZyb20gYHJlcXVpcmUoJ3RlZGlvdXMnKS5URFNfVkVSU0lPTmAuXG4gICAqICogYDdfMWBcbiAgICogKiBgN18yYFxuICAgKiAqIGA3XzNfQWBcbiAgICogKiBgN18zX0JgXG4gICAqICogYDdfNGBcbiAgICpcbiAgICogKGRlZmF1bHQ6IGA3XzRgKVxuICAgKi9cbiAgdGRzVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBzaXplIG9mIHZhcmNoYXIobWF4KSwgbnZhcmNoYXIobWF4KSwgdmFyYmluYXJ5KG1heCksIHRleHQsIG50ZXh0LCBhbmQgaW1hZ2UgZGF0YSByZXR1cm5lZCBieSBhIFNFTEVDVCBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgMjE0NzQ4MzY0N2ApXG4gICAqL1xuICB0ZXh0c2l6ZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgXCJ0cnVlXCIsIHRoZSBTUUwgU2VydmVyIFNTTCBjZXJ0aWZpY2F0ZSBpcyBhdXRvbWF0aWNhbGx5IHRydXN0ZWQgd2hlbiB0aGUgY29tbXVuaWNhdGlvbiBsYXllciBpcyBlbmNyeXB0ZWQgdXNpbmcgU1NMLlxuICAgKlxuICAgKiBJZiBcImZhbHNlXCIsIHRoZSBTUUwgU2VydmVyIHZhbGlkYXRlcyB0aGUgc2VydmVyIFNTTCBjZXJ0aWZpY2F0ZS4gSWYgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGZhaWxzLFxuICAgKiB0aGUgZHJpdmVyIHJhaXNlcyBhbiBlcnJvciBhbmQgdGVybWluYXRlcyB0aGUgY29ubmVjdGlvbi4gTWFrZSBzdXJlIHRoZSB2YWx1ZSBwYXNzZWQgdG8gc2VydmVyTmFtZSBleGFjdGx5XG4gICAqIG1hdGNoZXMgdGhlIENvbW1vbiBOYW1lIChDTikgb3IgRE5TIG5hbWUgaW4gdGhlIFN1YmplY3QgQWx0ZXJuYXRlIE5hbWUgaW4gdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBmb3IgYW4gU1NMIGNvbm5lY3Rpb24gdG8gc3VjY2VlZC5cbiAgICpcbiAgICogKGRlZmF1bHQ6IGB0cnVlYClcbiAgICovXG4gIHRydXN0U2VydmVyQ2VydGlmaWNhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0byByZXR1cm4gcm93cyBhcyBhcnJheXMgb3Iga2V5LXZhbHVlIGNvbGxlY3Rpb25zLlxuICAgKlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYCkuXG4gICAqL1xuICB1c2VDb2x1bW5OYW1lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHBhc3MgdGltZSB2YWx1ZXMgaW4gVVRDIG9yIGxvY2FsIHRpbWUuXG4gICAqXG4gICAqIChkZWZhdWx0OiBgdHJ1ZWApLlxuICAgKi9cbiAgdXNlVVRDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHdvcmtzdGF0aW9uIElEIChXU0lEKSBvZiB0aGUgY2xpZW50LCBkZWZhdWx0IG9zLmhvc3RuYW1lKCkuXG4gICAqIFVzZWQgZm9yIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgY2xpZW50IGluIHByb2ZpbGluZywgbG9nZ2luZyBvclxuICAgKiB0cmFjaW5nIGNsaWVudCBhY3Rpdml0eSBpbiBTUUxTZXJ2ZXIuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBpcyByZXBvcnRlZCBieSB0aGUgVFNRTCBmdW5jdGlvbiBIT1NUX05BTUUoKS5cbiAgICovXG4gIHdvcmtzdGF0aW9uSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgQ0xFQU5VUF9UWVBFID0ge1xuICBOT1JNQUw6IDAsXG4gIFJFRElSRUNUOiAxLFxuICBSRVRSWTogMlxufTtcblxuaW50ZXJmYWNlIFJvdXRpbmdEYXRhIHtcbiAgc2VydmVyOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIFtbQ29ubmVjdGlvbl1dIGluc3RhbmNlIHJlcHJlc2VudHMgYSBzaW5nbGUgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHNlcnZlci5cbiAqXG4gKiBgYGBqc1xuICogdmFyIENvbm5lY3Rpb24gPSByZXF1aXJlKCd0ZWRpb3VzJykuQ29ubmVjdGlvbjtcbiAqIHZhciBjb25maWcgPSB7XG4gKiAgXCJhdXRoZW50aWNhdGlvblwiOiB7XG4gKiAgICAuLi4sXG4gKiAgICBcIm9wdGlvbnNcIjogey4uLn1cbiAqICB9LFxuICogIFwib3B0aW9uc1wiOiB7Li4ufVxuICogfTtcbiAqIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oY29uZmlnKTtcbiAqIGBgYFxuICpcbiAqIE9ubHkgb25lIHJlcXVlc3QgYXQgYSB0aW1lIG1heSBiZSBleGVjdXRlZCBvbiBhIGNvbm5lY3Rpb24uIE9uY2UgYSBbW1JlcXVlc3RdXVxuICogaGFzIGJlZW4gaW5pdGlhdGVkICh3aXRoIFtbQ29ubmVjdGlvbi5jYWxsUHJvY2VkdXJlXV0sIFtbQ29ubmVjdGlvbi5leGVjU3FsXV0sXG4gKiBvciBbW0Nvbm5lY3Rpb24uZXhlY1NxbEJhdGNoXV0pLCBhbm90aGVyIHNob3VsZCBub3QgYmUgaW5pdGlhdGVkIHVudGlsIHRoZVxuICogW1tSZXF1ZXN0XV0ncyBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAqL1xuY2xhc3MgQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZmVkQXV0aFJlcXVpcmVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbmZpZzogSW50ZXJuYWxDb25uZWN0aW9uQ29uZmlnO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNlY3VyZUNvbnRleHRPcHRpb25zOiBTZWN1cmVDb250ZXh0T3B0aW9ucztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpblRyYW5zYWN0aW9uOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyYW5zYWN0aW9uRGVzY3JpcHRvcnM6IEJ1ZmZlcltdO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyYW5zYWN0aW9uRGVwdGg6IG51bWJlcjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc1NxbEJhdGNoOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGN1clRyYW5zaWVudFJldHJ5Q291bnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmFuc2llbnRFcnJvckxvb2t1cDogVHJhbnNpZW50RXJyb3JMb29rdXA7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xvc2VkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxvZ2luRXJyb3I6IHVuZGVmaW5lZCB8IEFnZ3JlZ2F0ZUVycm9yIHwgQ29ubmVjdGlvbkVycm9yO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlYnVnOiBEZWJ1ZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBudGxtcGFja2V0OiB1bmRlZmluZWQgfCBhbnk7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbnRsbXBhY2tldEJ1ZmZlcjogdW5kZWZpbmVkIHwgQnVmZmVyO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBTVEFURToge1xuICAgIElOSVRJQUxJWkVEOiBTdGF0ZTtcbiAgICBDT05ORUNUSU5HOiBTdGF0ZTtcbiAgICBTRU5UX1BSRUxPR0lOOiBTdGF0ZTtcbiAgICBSRVJPVVRJTkc6IFN0YXRlO1xuICAgIFRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZOiBTdGF0ZTtcbiAgICBTRU5UX1RMU1NTTE5FR09USUFUSU9OOiBTdGF0ZTtcbiAgICBTRU5UX0xPR0lON19XSVRIX1NUQU5EQVJEX0xPR0lOOiBTdGF0ZTtcbiAgICBTRU5UX0xPR0lON19XSVRIX05UTE06IFN0YXRlO1xuICAgIFNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSDogU3RhdGU7XG4gICAgTE9HR0VEX0lOX1NFTkRJTkdfSU5JVElBTF9TUUw6IFN0YXRlO1xuICAgIExPR0dFRF9JTjogU3RhdGU7XG4gICAgU0VOVF9DTElFTlRfUkVRVUVTVDogU3RhdGU7XG4gICAgU0VOVF9BVFRFTlRJT046IFN0YXRlO1xuICAgIEZJTkFMOiBTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcm91dGluZ0RhdGE6IHVuZGVmaW5lZCB8IFJvdXRpbmdEYXRhO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWVzc2FnZUlvITogTWVzc2FnZUlPO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0YXRlOiBTdGF0ZTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXNldENvbm5lY3Rpb25Pbk5leHRSZXF1ZXN0OiB1bmRlZmluZWQgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVxdWVzdDogdW5kZWZpbmVkIHwgUmVxdWVzdCB8IEJ1bGtMb2FkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByb2NSZXR1cm5TdGF0dXNWYWx1ZTogdW5kZWZpbmVkIHwgYW55O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNvY2tldDogdW5kZWZpbmVkIHwgU29ja2V0O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1lc3NhZ2VCdWZmZXI6IEJ1ZmZlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbm5lY3RUaW1lcjogdW5kZWZpbmVkIHwgTm9kZUpTLlRpbWVvdXQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsVGltZXI6IHVuZGVmaW5lZCB8IE5vZGVKUy5UaW1lb3V0O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlcXVlc3RUaW1lcjogdW5kZWZpbmVkIHwgTm9kZUpTLlRpbWVvdXQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmV0cnlUaW1lcjogdW5kZWZpbmVkIHwgTm9kZUpTLlRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FuY2VsQWZ0ZXJSZXF1ZXN0U2VudDogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRhdGFiYXNlQ29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE5vdGU6IGJlIGF3YXJlIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBmaWVsZDpcbiAgICogMS4gY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnNcbiAgICogMi4gY29uZmlnLm9wdGlvbnNcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgeyBDb25uZWN0aW9uIH0gPSByZXF1aXJlKCd0ZWRpb3VzJyk7XG4gICAqXG4gICAqIGNvbnN0IGNvbmZpZyA9IHtcbiAgICogIFwiYXV0aGVudGljYXRpb25cIjoge1xuICAgKiAgICAuLi4sXG4gICAqICAgIFwib3B0aW9uc1wiOiB7Li4ufVxuICAgKiAgfSxcbiAgICogIFwib3B0aW9uc1wiOiB7Li4ufVxuICAgKiB9O1xuICAgKlxuICAgKiBjb25zdCBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oY29uZmlnKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdvYmplY3QnIHx8IGNvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnXCIgYXJndW1lbnQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgb2YgdHlwZSBPYmplY3QuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2VydmVyICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLnNlcnZlclwiIHByb3BlcnR5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgIH1cblxuICAgIHRoaXMuZmVkQXV0aFJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICBsZXQgYXV0aGVudGljYXRpb246IEludGVybmFsQ29ubmVjdGlvbkNvbmZpZ1snYXV0aGVudGljYXRpb24nXTtcbiAgICBpZiAoY29uZmlnLmF1dGhlbnRpY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLmF1dGhlbnRpY2F0aW9uICE9PSAnb2JqZWN0JyB8fCBjb25maWcuYXV0aGVudGljYXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZSA9IGNvbmZpZy5hdXRoZW50aWNhdGlvbi50eXBlO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zID09PSB1bmRlZmluZWQgPyB7fSA6IGNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zO1xuXG4gICAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi50eXBlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgIT09ICdkZWZhdWx0JyAmJiB0eXBlICE9PSAnbnRsbScgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbicgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJyAmJiB0eXBlICE9PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnICYmIHR5cGUgIT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCcgJiYgdHlwZSAhPT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidHlwZVwiIHByb3BlcnR5IG11c3Qgb25lIG9mIFwiZGVmYXVsdFwiLCBcIm50bG1cIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkXCIsIFwiYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW5cIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHRcIiwgXCJhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bVwiIG9yIFwiYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2VcIiBvciBcImF6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0XCIuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgb3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9uc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBvYmplY3QuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSAnbnRsbScpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRvbWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW5cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudXNlck5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy51c2VyTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYXNzd29yZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnBhc3N3b3JkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdudGxtJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB1c2VyTmFtZTogb3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgZG9tYWluOiBvcHRpb25zLmRvbWFpbiAmJiBvcHRpb25zLmRvbWFpbi50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNsaWVudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnVzZXJOYW1lICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMudXNlck5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudXNlck5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFzc3dvcmQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5wYXNzd29yZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnRlbmFudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB1c2VyTmFtZTogb3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQsXG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudG9rZW5cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICB0b2tlbjogb3B0aW9ucy50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJykge1xuICAgICAgICBpZiAob3B0aW9ucy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNsaWVudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0Jykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xpZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNsaWVudFNlY3JldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcuYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRTZWNyZXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRlbmFudElkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICAgIHR5cGU6ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICBjbGllbnRTZWNyZXQ6IG9wdGlvbnMuY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VyTmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLnVzZXJOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5hdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBhc3N3b3JkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMucGFzc3dvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLmF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiBvcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB1c2VyTmFtZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHBhc3N3b3JkOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogY29uZmlnLnNlcnZlcixcbiAgICAgIGF1dGhlbnRpY2F0aW9uOiBhdXRoZW50aWNhdGlvbixcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3I6IGZhbHNlLFxuICAgICAgICBhcHBOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIGNhbWVsQ2FzZUNvbHVtbnM6IGZhbHNlLFxuICAgICAgICBjYW5jZWxUaW1lb3V0OiBERUZBVUxUX0NBTkNFTF9USU1FT1VULFxuICAgICAgICBjb2x1bW5FbmNyeXB0aW9uS2V5Q2FjaGVUVEw6IDIgKiA2MCAqIDYwICogMTAwMCwgIC8vIFVuaXRzOiBtaWxpc2Vjb25kc1xuICAgICAgICBjb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogZmFsc2UsXG4gICAgICAgIGNvbHVtbk5hbWVSZXBsYWNlcjogdW5kZWZpbmVkLFxuICAgICAgICBjb25uZWN0aW9uUmV0cnlJbnRlcnZhbDogREVGQVVMVF9DT05ORUNUX1JFVFJZX0lOVEVSVkFMLFxuICAgICAgICBjb25uZWN0VGltZW91dDogREVGQVVMVF9DT05ORUNUX1RJTUVPVVQsXG4gICAgICAgIGNvbm5lY3RvcjogdW5kZWZpbmVkLFxuICAgICAgICBjb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWw6IElTT0xBVElPTl9MRVZFTC5SRUFEX0NPTU1JVFRFRCxcbiAgICAgICAgY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzOiB7fSxcbiAgICAgICAgZGF0YWJhc2U6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0ZWZpcnN0OiBERUZBVUxUX0RBVEVGSVJTVCxcbiAgICAgICAgZGF0ZUZvcm1hdDogREVGQVVMVF9EQVRFRk9STUFULFxuICAgICAgICBkZWJ1Zzoge1xuICAgICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICAgIHBhY2tldDogZmFsc2UsXG4gICAgICAgICAgcGF5bG9hZDogZmFsc2UsXG4gICAgICAgICAgdG9rZW46IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZUFuc2lOdWxsOiB0cnVlLFxuICAgICAgICBlbmFibGVBbnNpTnVsbERlZmF1bHQ6IHRydWUsXG4gICAgICAgIGVuYWJsZUFuc2lQYWRkaW5nOiB0cnVlLFxuICAgICAgICBlbmFibGVBbnNpV2FybmluZ3M6IHRydWUsXG4gICAgICAgIGVuYWJsZUFyaXRoQWJvcnQ6IHRydWUsXG4gICAgICAgIGVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsOiB0cnVlLFxuICAgICAgICBlbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0OiBudWxsLFxuICAgICAgICBlbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9uczogZmFsc2UsXG4gICAgICAgIGVuYWJsZU51bWVyaWNSb3VuZGFib3J0OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUXVvdGVkSWRlbnRpZmllcjogdHJ1ZSxcbiAgICAgICAgZW5jcnlwdDogdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tUb0RlZmF1bHREYjogZmFsc2UsXG4gICAgICAgIGVuY3J5cHRpb25LZXlTdG9yZVByb3ZpZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBpbnN0YW5jZU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNvbGF0aW9uTGV2ZWw6IElTT0xBVElPTl9MRVZFTC5SRUFEX0NPTU1JVFRFRCxcbiAgICAgICAgbGFuZ3VhZ2U6IERFRkFVTFRfTEFOR1VBR0UsXG4gICAgICAgIGxvY2FsQWRkcmVzczogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnM6IDMsXG4gICAgICAgIG11bHRpU3VibmV0RmFpbG92ZXI6IGZhbHNlLFxuICAgICAgICBwYWNrZXRTaXplOiBERUZBVUxUX1BBQ0tFVF9TSVpFLFxuICAgICAgICBwb3J0OiBERUZBVUxUX1BPUlQsXG4gICAgICAgIHJlYWRPbmx5SW50ZW50OiBmYWxzZSxcbiAgICAgICAgcmVxdWVzdFRpbWVvdXQ6IERFRkFVTFRfQ0xJRU5UX1JFUVVFU1RfVElNRU9VVCxcbiAgICAgICAgcm93Q29sbGVjdGlvbk9uRG9uZTogZmFsc2UsXG4gICAgICAgIHJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uOiBmYWxzZSxcbiAgICAgICAgc2VydmVyTmFtZTogdW5kZWZpbmVkLFxuICAgICAgICBzZXJ2ZXJTdXBwb3J0c0NvbHVtbkVuY3J5cHRpb246IGZhbHNlLFxuICAgICAgICB0ZHNWZXJzaW9uOiBERUZBVUxUX1REU19WRVJTSU9OLFxuICAgICAgICB0ZXh0c2l6ZTogREVGQVVMVF9URVhUU0laRSxcbiAgICAgICAgdHJ1c3RlZFNlcnZlck5hbWVBRTogdW5kZWZpbmVkLFxuICAgICAgICB0cnVzdFNlcnZlckNlcnRpZmljYXRlOiBmYWxzZSxcbiAgICAgICAgdXNlQ29sdW1uTmFtZXM6IGZhbHNlLFxuICAgICAgICB1c2VVVEM6IHRydWUsXG4gICAgICAgIHdvcmtzdGF0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbG93ZXJDYXNlR3VpZHM6IGZhbHNlXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChjb25maWcub3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnBvcnQgJiYgY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBhbmQgaW5zdGFuY2VOYW1lIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIGJ1dCAnICsgY29uZmlnLm9wdGlvbnMucG9ydCArICcgYW5kICcgKyBjb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUgKyAnIHByb3ZpZGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5hYm9ydFRyYW5zYWN0aW9uT25FcnJvciA9IGNvbmZpZy5vcHRpb25zLmFib3J0VHJhbnNhY3Rpb25PbkVycm9yO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuYXBwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuYXBwTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5hcHBOYW1lXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuYXBwTmFtZSA9IGNvbmZpZy5vcHRpb25zLmFwcE5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmNhbWVsQ2FzZUNvbHVtbnMgPSBjb25maWcub3B0aW9ucy5jYW1lbENhc2VDb2x1bW5zO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dCA9IGNvbmZpZy5vcHRpb25zLmNhbmNlbFRpbWVvdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGZ1bmN0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIgPSBjb25maWcub3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uSXNvbGF0aW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCwgJ2NvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCcpO1xuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsID0gY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNvbm5lY3RUaW1lb3V0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQgPSBjb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmNvbm5lY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdG9yXCIgcHJvcGVydHkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0b3IgPSBjb25maWcub3B0aW9ucy5jb25uZWN0b3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNyeXB0b0NyZWRlbnRpYWxzRGV0YWlscyAhPT0gJ29iamVjdCcgfHwgY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzID0gY29uZmlnLm9wdGlvbnMuY3J5cHRvQ3JlZGVudGlhbHNEZXRhaWxzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGF0YWJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmRhdGFiYXNlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRhdGFiYXNlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0YWJhc2UgPSBjb25maWcub3B0aW9ucy5kYXRhYmFzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ICE9PSAnbnVtYmVyJyAmJiBjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kYXRlZmlyc3RcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRhdGVmaXJzdCAhPT0gbnVsbCAmJiAoY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0IDwgMSB8fCBjb25maWcub3B0aW9ucy5kYXRlZmlyc3QgPiA3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kYXRlZmlyc3RcIiBwcm9wZXJ0eSBtdXN0IGJlID49IDEgYW5kIDw9IDcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0ID0gY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gJ3N0cmluZycgJiYgY29uZmlnLm9wdGlvbnMuZGF0ZUZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgPSBjb25maWcub3B0aW9ucy5kYXRlRm9ybWF0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zy5kYXRhID0gY29uZmlnLm9wdGlvbnMuZGVidWcuZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zy5wYWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmRlYnVnLnBhY2tldFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0ID0gY29uZmlnLm9wdGlvbnMuZGVidWcucGFja2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmRlYnVnLnBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5kZWJ1Zy5wYXlsb2FkID0gY29uZmlnLm9wdGlvbnMuZGVidWcucGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZGVidWcudG9rZW4gPSBjb25maWcub3B0aW9ucy5kZWJ1Zy50b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGwgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdFwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lOdWxsRGVmYXVsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVBhZGRpbmdcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaVdhcm5pbmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3NcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgPSBjb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3M7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ICE9PSAnYm9vbGVhbicgJiYgY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBcml0aEFib3J0ID0gY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGxcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDb25jYXROdWxsWWllbGRzTnVsbCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZUN1cnNvckNsb3NlT25Db21taXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgIT09ICdib29sZWFuJyAmJiBjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmVuYWJsZUltcGxpY2l0VHJhbnNhY3Rpb25zXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgPSBjb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVOdW1lcmljUm91bmRhYm9ydCA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciAhPT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmFibGVRdW90ZWRJZGVudGlmaWVyXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgbnVsbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciA9IGNvbmZpZy5vcHRpb25zLmVuYWJsZVF1b3RlZElkZW50aWZpZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5lbmNyeXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5lbmNyeXB0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5lbmNyeXB0XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQgPSBjb25maWcub3B0aW9ucy5lbmNyeXB0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYlwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiID0gY29uZmlnLm9wdGlvbnMuZmFsbGJhY2tUb0RlZmF1bHREYjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMuaW5zdGFuY2VOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSA9IGNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZTtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGNvbmZpZy5vcHRpb25zLmlzb2xhdGlvbkxldmVsLCAnY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwnKTtcblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmlzb2xhdGlvbkxldmVsID0gY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5sYW5ndWFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2UgIT09ICdzdHJpbmcnICYmIGNvbmZpZy5vcHRpb25zLmxhbmd1YWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2VcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG51bGwuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlID0gY29uZmlnLm9wdGlvbnMubGFuZ3VhZ2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3NcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3MgPSBjb25maWcub3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIgPSBjb25maWcub3B0aW9ucy5tdWx0aVN1Ym5ldEZhaWxvdmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy5wYWNrZXRTaXplXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMucGFja2V0U2l6ZSA9IGNvbmZpZy5vcHRpb25zLnBhY2tldFNpemU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5wb3J0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnBvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnBvcnQgPD0gMCB8fCBjb25maWcub3B0aW9ucy5wb3J0ID49IDY1NTM2KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnBvcnRcIiBwcm9wZXJ0eSBtdXN0IGJlID4gMCBhbmQgPCA2NTUzNicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ID0gY29uZmlnLm9wdGlvbnMucG9ydDtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5pbnN0YW5jZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5yZWFkT25seUludGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50XCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50ID0gY29uZmlnLm9wdGlvbnMucmVhZE9ubHlJbnRlbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dCA9IGNvbmZpZy5vcHRpb25zLnJlcXVlc3RUaW1lb3V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzXCIgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzID0gY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCA8PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvblJldHJ5SW50ZXJ2YWxcIiBwcm9wZXJ0eSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0aW9uUmV0cnlJbnRlcnZhbCA9IGNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lID0gY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25cIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24gPSBjb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvblwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSBjb25maWcub3B0aW9ucy50ZHNWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudGV4dHNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnRleHRzaXplICE9PSAnbnVtYmVyJyAmJiBjb25maWcub3B0aW9ucy50ZXh0c2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnRleHRzaXplXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG51bWJlciBvciBudWxsLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLnRleHRzaXplID4gMjE0NzQ4MzY0Nykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnRleHRzaXplXCIgY2FuXFwndCBiZSBncmVhdGVyIHRoYW4gMjE0NzQ4MzY0Ny4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcub3B0aW9ucy50ZXh0c2l6ZSA8IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMudGV4dHNpemVcIiBjYW5cXCd0IGJlIHNtYWxsZXIgdGhhbiAtMS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMudGV4dHNpemUgPSBjb25maWcub3B0aW9ucy50ZXh0c2l6ZSB8IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUgPSBjb25maWcub3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lcyA9IGNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm9wdGlvbnMudXNlVVRDICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy51c2VVVEMgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLnVzZVVUQ1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy51c2VVVEMgPSBjb25maWcub3B0aW9ucy51c2VVVEM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNvbmZpZy5vcHRpb25zLndvcmtzdGF0aW9uSWRcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucy53b3Jrc3RhdGlvbklkID0gY29uZmlnLm9wdGlvbnMud29ya3N0YXRpb25JZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5vcHRpb25zLmxvd2VyQ2FzZUd1aWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkcyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiY29uZmlnLm9wdGlvbnMubG93ZXJDYXNlR3VpZHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLm9wdGlvbnMubG93ZXJDYXNlR3VpZHMgPSBjb25maWcub3B0aW9ucy5sb3dlckNhc2VHdWlkcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zID0gdGhpcy5jb25maWcub3B0aW9ucy5jcnlwdG9DcmVkZW50aWFsc0RldGFpbHM7XG4gICAgaWYgKHRoaXMuc2VjdXJlQ29udGV4dE9wdGlvbnMuc2VjdXJlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGhhcyBub3Qgc3BlY2lmaWVkIHRoZWlyIG93biBgc2VjdXJlT3B0aW9uc2AsXG4gICAgICAvLyB3ZSBzZXQgYFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFNgIGhlcmUuXG4gICAgICAvLyBPbGRlciBTUUwgU2VydmVyIGluc3RhbmNlcyBydW5uaW5nIG9uIG9sZGVyIFdpbmRvd3MgdmVyc2lvbnMgaGF2ZVxuICAgICAgLy8gdHJvdWJsZSB3aXRoIHRoZSBCRUFTVCB3b3JrYXJvdW5kIGluIE9wZW5TU0wuXG4gICAgICAvLyBBcyBCRUFTVCBpcyBhIGJyb3dzZXIgc3BlY2lmaWMgZXhwbG9pdCwgd2UgY2FuIGp1c3QgZGlzYWJsZSB0aGlzIG9wdGlvbiBoZXJlLlxuICAgICAgdGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodGhpcy5zZWN1cmVDb250ZXh0T3B0aW9ucywge1xuICAgICAgICBzZWN1cmVPcHRpb25zOiB7XG4gICAgICAgICAgdmFsdWU6IGNvbnN0YW50cy5TU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGVidWcgPSB0aGlzLmNyZWF0ZURlYnVnKCk7XG4gICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRlc2NyaXB0b3JzID0gW0J1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSldO1xuXG4gICAgLy8gJ2JlZ2luVHJhbnNhY3Rpb24nLCAnY29tbWl0VHJhbnNhY3Rpb24nIGFuZCAncm9sbGJhY2tUcmFuc2FjdGlvbidcbiAgICAvLyBldmVudHMgYXJlIHV0aWxpemVkIHRvIG1haW50YWluIGluVHJhbnNhY3Rpb24gcHJvcGVydHkgc3RhdGUgd2hpY2ggaW5cbiAgICAvLyB0dXJuIGlzIHVzZWQgaW4gbWFuYWdpbmcgdHJhbnNhY3Rpb25zLiBUaGVzZSBldmVudHMgYXJlIG9ubHkgZmlyZWQgZm9yXG4gICAgLy8gVERTIHZlcnNpb24gNy4yIGFuZCBiZXlvbmQuIFRoZSBwcm9wZXJ0aWVzIGJlbG93IGFyZSB1c2VkIHRvIGVtdWxhdGVcbiAgICAvLyBlcXVpdmFsZW50IGJlaGF2aW9yIGZvciBURFMgdmVyc2lvbnMgYmVmb3JlIDcuMi5cbiAgICB0aGlzLnRyYW5zYWN0aW9uRGVwdGggPSAwO1xuICAgIHRoaXMuaXNTcWxCYXRjaCA9IGZhbHNlO1xuICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5tZXNzYWdlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuXG4gICAgdGhpcy5jdXJUcmFuc2llbnRSZXRyeUNvdW50ID0gMDtcbiAgICB0aGlzLnRyYW5zaWVudEVycm9yTG9va3VwID0gbmV3IFRyYW5zaWVudEVycm9yTG9va3VwKCk7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5TVEFURS5JTklUSUFMSVpFRDtcblxuICAgIHRoaXMuX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQgPSAoKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VJby5zZW5kTWVzc2FnZShUWVBFLkFUVEVOVElPTik7XG4gICAgICB0aGlzLmNyZWF0ZUNhbmNlbFRpbWVyKCk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbm5lY3QoY29ubmVjdExpc3RlbmVyPzogKGVycj86IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IHRoaXMuU1RBVEUuSU5JVElBTElaRUQpIHtcbiAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXJyb3IoJ2AuY29ubmVjdGAgY2FuIG5vdCBiZSBjYWxsZWQgb24gYSBDb25uZWN0aW9uIGluIGAnICsgdGhpcy5zdGF0ZS5uYW1lICsgJ2Agc3RhdGUuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RMaXN0ZW5lcikge1xuICAgICAgY29uc3Qgb25Db25uZWN0ID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIGNvbm5lY3RMaXN0ZW5lcihlcnIpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgICBjb25uZWN0TGlzdGVuZXIoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5DT05ORUNUSU5HKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIGhhcyByZXBvcnRlZCB0aGF0IHRoZSBjaGFyc2V0IGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdjaGFyc2V0Q2hhbmdlJywgbGlzdGVuZXI6IChjaGFyc2V0OiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBhdHRlbXB0IHRvIGNvbm5lY3QgYW5kIHZhbGlkYXRlIGhhcyBjb21wbGV0ZWQuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ2Nvbm5lY3QnLFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBlcnIgSWYgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCwgd2lsbCBiZSBmYWxzZXkuIElmIHRoZXJlIHdhcyBhXG4gICAgICogICBwcm9ibGVtICh3aXRoIGVpdGhlciBjb25uZWN0aW5nIG9yIHZhbGlkYXRpb24pLCB3aWxsIGJlIGFuIFtbRXJyb3JdXSBvYmplY3QuXG4gICAgICovXG4gICAgbGlzdGVuZXI6IChlcnI6IEVycm9yIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgcmVwb3J0ZWQgdGhhdCB0aGUgYWN0aXZlIGRhdGFiYXNlIGhhcyBjaGFuZ2VkLlxuICAgKiBUaGlzIG1heSBiZSBhcyBhIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgbG9naW4sIG9yIGEgYHVzZWAgc3RhdGVtZW50LlxuICAgKi9cbiAgb24oZXZlbnQ6ICdkYXRhYmFzZUNoYW5nZScsIGxpc3RlbmVyOiAoZGF0YWJhc2VOYW1lOiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIEEgZGVidWcgbWVzc2FnZSBpcyBhdmFpbGFibGUuIEl0IG1heSBiZSBsb2dnZWQgb3IgaWdub3JlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnZGVidWcnLCBsaXN0ZW5lcjogKG1lc3NhZ2VUZXh0OiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIEludGVybmFsIGVycm9yIG9jY3Vycy5cbiAgICovXG4gIG9uKGV2ZW50OiAnZXJyb3InLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgaGFzIGlzc3VlZCBhbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlcnJvck1lc3NhZ2UnLCBsaXN0ZW5lcjogKG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkVycm9yTWVzc2FnZVRva2VuKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgY29ubmVjdGlvbiBoYXMgZW5kZWQuXG4gICAqXG4gICAqIFRoaXMgbWF5IGJlIGFzIGEgcmVzdWx0IG9mIHRoZSBjbGllbnQgY2FsbGluZyBbW2Nsb3NlXV0sIHRoZSBzZXJ2ZXJcbiAgICogY2xvc2luZyB0aGUgY29ubmVjdGlvbiwgb3IgYSBuZXR3b3JrIGVycm9yLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlbmQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBoYXMgaXNzdWVkIGFuIGluZm9ybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBvbihldmVudDogJ2luZm9NZXNzYWdlJywgbGlzdGVuZXI6IChtZXNzYWdlOiBpbXBvcnQoJy4vdG9rZW4vdG9rZW4nKS5JbmZvTWVzc2FnZVRva2VuKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIGhhcyByZXBvcnRlZCB0aGF0IHRoZSBsYW5ndWFnZSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnbGFuZ3VhZ2VDaGFuZ2UnLCBsaXN0ZW5lcjogKGxhbmd1YWdlTmFtZTogc3RyaW5nKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgY29ubmVjdGlvbiB3YXMgcmVzZXQuXG4gICAqL1xuICBvbihldmVudDogJ3Jlc2V0Q29ubmVjdGlvbicsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHNlY3VyZSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdzZWN1cmUnLCBsaXN0ZW5lcjogKGNsZWFydGV4dDogaW1wb3J0KCd0bHMnKS5UTFNTb2NrZXQpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkge1xuICAgIHJldHVybiBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY2hhcnNldENoYW5nZScsIGNoYXJzZXQ6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY29ubmVjdCcsIGVycm9yPzogRXJyb3IpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RhdGFiYXNlQ2hhbmdlJywgZGF0YWJhc2VOYW1lOiBzdHJpbmcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RlYnVnJywgbWVzc2FnZVRleHQ6IHN0cmluZyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3InLCBlcnJvcjogRXJyb3IpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2Vycm9yTWVzc2FnZScsIG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkVycm9yTWVzc2FnZVRva2VuKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdlbmQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdpbmZvTWVzc2FnZScsIG1lc3NhZ2U6IGltcG9ydCgnLi90b2tlbi90b2tlbicpLkluZm9NZXNzYWdlVG9rZW4pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2xhbmd1YWdlQ2hhbmdlJywgbGFuZ3VhZ2VOYW1lOiBzdHJpbmcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3NlY3VyZScsIGNsZWFydGV4dDogaW1wb3J0KCd0bHMnKS5UTFNTb2NrZXQpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlcm91dGluZycpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlc2V0Q29ubmVjdGlvbicpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JldHJ5Jyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncm9sbGJhY2tUcmFuc2FjdGlvbicpOiBib29sZWFuXG5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBUaGUgW1tFdmVudF9lbmRdXSB3aWxsIGJlIGVtaXR0ZWQgb25jZSB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdGlhbGlzZUNvbm5lY3Rpb24oKSB7XG4gICAgY29uc3Qgc2lnbmFsID0gdGhpcy5jcmVhdGVDb25uZWN0VGltZXIoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RPblBvcnQodGhpcy5jb25maWcub3B0aW9ucy5wb3J0LCB0aGlzLmNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIsIHNpZ25hbCwgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2VMb29rdXAoe1xuICAgICAgICBzZXJ2ZXI6IHRoaXMuY29uZmlnLnNlcnZlcixcbiAgICAgICAgaW5zdGFuY2VOYW1lOiB0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZSEsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIHNpZ25hbDogc2lnbmFsXG4gICAgICB9KS50aGVuKChwb3J0KSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29ubmVjdE9uUG9ydChwb3J0LCB0aGlzLmNvbmZpZy5vcHRpb25zLm11bHRpU3VibmV0RmFpbG92ZXIsIHNpZ25hbCwgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0b3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckNvbm5lY3RUaW1lcigpO1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgIC8vIElnbm9yZSB0aGUgQWJvcnRFcnJvciBmb3Igbm93LCB0aGlzIGlzIHN0aWxsIGhhbmRsZWQgYnkgdGhlIGNvbm5lY3RUaW1lciBmaXJpbmdcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBuZXcgQ29ubmVjdGlvbkVycm9yKGVyci5tZXNzYWdlLCAnRUlOU1RMT09LVVAnKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhbnVwQ29ubmVjdGlvbihjbGVhbnVwVHlwZTogdHlwZW9mIENMRUFOVVBfVFlQRVtrZXlvZiB0eXBlb2YgQ0xFQU5VUF9UWVBFXSkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0VGltZXIoKTtcbiAgICAgIHRoaXMuY2xlYXJSZXF1ZXN0VGltZXIoKTtcbiAgICAgIHRoaXMuY2xlYXJSZXRyeVRpbWVyKCk7XG4gICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNsZWFudXBUeXBlID09PSBDTEVBTlVQX1RZUEUuUkVESVJFQ1QpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdyZXJvdXRpbmcnKTtcbiAgICAgIH0gZWxzZSBpZiAoY2xlYW51cFR5cGUgIT09IENMRUFOVVBfVFlQRS5SRVRSWSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdDtcbiAgICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0RXJyb3IoJ0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZXF1ZXN0IGNvbXBsZXRlZC4nLCAnRUNMT1NFJyk7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2soZXJyKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICB0aGlzLmxvZ2luRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVEZWJ1ZygpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IG5ldyBEZWJ1Zyh0aGlzLmNvbmZpZy5vcHRpb25zLmRlYnVnKTtcbiAgICBkZWJ1Zy5vbignZGVidWcnLCAobWVzc2FnZSkgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkZWJ1ZycsIG1lc3NhZ2UpO1xuICAgIH0pO1xuICAgIHJldHVybiBkZWJ1ZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZTogTWVzc2FnZSwgaGFuZGxlcjogVG9rZW5IYW5kbGVyKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCB0aGlzLmRlYnVnLCBoYW5kbGVyLCB0aGlzLmNvbmZpZy5vcHRpb25zKTtcbiAgfVxuXG4gIGNvbm5lY3RPblBvcnQocG9ydDogbnVtYmVyLCBtdWx0aVN1Ym5ldEZhaWxvdmVyOiBib29sZWFuLCBzaWduYWw6IEFib3J0U2lnbmFsLCBjdXN0b21Db25uZWN0b3I/OiAoKSA9PiBQcm9taXNlPFNvY2tldD4pIHtcbiAgICBjb25zdCBjb25uZWN0T3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnNlcnZlciA6IHRoaXMuY29uZmlnLnNlcnZlcixcbiAgICAgIHBvcnQ6IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnBvcnQgOiBwb3J0LFxuICAgICAgbG9jYWxBZGRyZXNzOiB0aGlzLmNvbmZpZy5vcHRpb25zLmxvY2FsQWRkcmVzc1xuICAgIH07XG5cbiAgICBjb25zdCBjb25uZWN0ID0gY3VzdG9tQ29ubmVjdG9yIHx8IChtdWx0aVN1Ym5ldEZhaWxvdmVyID8gY29ubmVjdEluUGFyYWxsZWwgOiBjb25uZWN0SW5TZXF1ZW5jZSk7XG5cbiAgICBjb25uZWN0KGNvbm5lY3RPcHRzLCBkbnMubG9va3VwLCBzaWduYWwpLnRoZW4oKHNvY2tldCkgPT4ge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoZXJyb3IpID0+IHsgdGhpcy5zb2NrZXRFcnJvcihlcnJvcik7IH0pO1xuICAgICAgICBzb2NrZXQub24oJ2Nsb3NlJywgKCkgPT4geyB0aGlzLnNvY2tldENsb3NlKCk7IH0pO1xuICAgICAgICBzb2NrZXQub24oJ2VuZCcsICgpID0+IHsgdGhpcy5zb2NrZXRFbmQoKTsgfSk7XG4gICAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwgS0VFUF9BTElWRV9JTklUSUFMX0RFTEFZKTtcblxuICAgICAgICB0aGlzLm1lc3NhZ2VJbyA9IG5ldyBNZXNzYWdlSU8oc29ja2V0LCB0aGlzLmNvbmZpZy5vcHRpb25zLnBhY2tldFNpemUsIHRoaXMuZGVidWcpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VJby5vbignc2VjdXJlJywgKGNsZWFydGV4dCkgPT4geyB0aGlzLmVtaXQoJ3NlY3VyZScsIGNsZWFydGV4dCk7IH0pO1xuXG4gICAgICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuXG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVidWcubG9nKCdjb25uZWN0ZWQgdG8gJyArIHRoaXMuY29uZmlnLnNlcnZlciArICc6JyArIHRoaXMuY29uZmlnLm9wdGlvbnMucG9ydCk7XG5cbiAgICAgICAgdGhpcy5zZW5kUHJlTG9naW4oKTtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5TRU5UX1BSRUxPR0lOKTtcbiAgICAgIH0pO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0VGltZXIoKTtcbiAgICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7IHRoaXMuc29ja2V0RXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsb3NlQ29ubmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUNvbm5lY3RUaW1lcigpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB0aGlzLmNvbm5lY3RUaW1lb3V0KCk7XG4gICAgfSwgdGhpcy5jb25maWcub3B0aW9ucy5jb25uZWN0VGltZW91dCk7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVDYW5jZWxUaW1lcigpIHtcbiAgICB0aGlzLmNsZWFyQ2FuY2VsVGltZXIoKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jb25maWcub3B0aW9ucy5jYW5jZWxUaW1lb3V0O1xuICAgIGlmICh0aW1lb3V0ID4gMCkge1xuICAgICAgdGhpcy5jYW5jZWxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbFRpbWVvdXQoKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlUmVxdWVzdFRpbWVyKCkge1xuICAgIHRoaXMuY2xlYXJSZXF1ZXN0VGltZXIoKTsgLy8gcmVsZWFzZSBvbGQgdGltZXIsIGp1c3QgdG8gYmUgc2FmZVxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnJlcXVlc3QgYXMgUmVxdWVzdDtcbiAgICBjb25zdCB0aW1lb3V0ID0gKHJlcXVlc3QudGltZW91dCAhPT0gdW5kZWZpbmVkKSA/IHJlcXVlc3QudGltZW91dCA6IHRoaXMuY29uZmlnLm9wdGlvbnMucmVxdWVzdFRpbWVvdXQ7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVvdXQoKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlUmV0cnlUaW1lcigpIHtcbiAgICB0aGlzLmNsZWFyUmV0cnlUaW1lcigpO1xuICAgIHRoaXMucmV0cnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXRyeVRpbWVvdXQoKTtcbiAgICB9LCB0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25SZXRyeUludGVydmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29ubmVjdFRpbWVvdXQoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsZWQgdG8gY29ubmVjdCB0byAke3RoaXMuY29uZmlnLnNlcnZlcn0ke3RoaXMuY29uZmlnLm9wdGlvbnMucG9ydCA/IGA6JHt0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnR9YCA6IGBcXFxcJHt0aGlzLmNvbmZpZy5vcHRpb25zLmluc3RhbmNlTmFtZX1gfSBpbiAke3RoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdFRpbWVvdXR9bXNgO1xuICAgIHRoaXMuZGVidWcubG9nKG1lc3NhZ2UpO1xuICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgJ0VUSU1FT1VUJykpO1xuICAgIHRoaXMuY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgnY29ubmVjdFRpbWVvdXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsVGltZW91dCgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYEZhaWxlZCB0byBjYW5jZWwgcmVxdWVzdCBpbiAke3RoaXMuY29uZmlnLm9wdGlvbnMuY2FuY2VsVGltZW91dH1tc2A7XG4gICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdzb2NrZXRFcnJvcicsIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgJ0VUSU1FT1VUJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXF1ZXN0VGltZW91dCgpIHtcbiAgICB0aGlzLnJlcXVlc3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0ITtcbiAgICByZXF1ZXN0LmNhbmNlbCgpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdC50aW1lb3V0ICE9PSB1bmRlZmluZWQpID8gcmVxdWVzdC50aW1lb3V0IDogdGhpcy5jb25maWcub3B0aW9ucy5yZXF1ZXN0VGltZW91dDtcbiAgICBjb25zdCBtZXNzYWdlID0gJ1RpbWVvdXQ6IFJlcXVlc3QgZmFpbGVkIHRvIGNvbXBsZXRlIGluICcgKyB0aW1lb3V0ICsgJ21zJztcbiAgICByZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCAnRVRJTUVPVVQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmV0cnlUaW1lb3V0KCkge1xuICAgIHRoaXMucmV0cnlUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVtaXQoJ3JldHJ5Jyk7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5DT05ORUNUSU5HKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xlYXJDb25uZWN0VGltZXIoKSB7XG4gICAgaWYgKHRoaXMuY29ubmVjdFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5jb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhckNhbmNlbFRpbWVyKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jYW5jZWxUaW1lcik7XG4gICAgICB0aGlzLmNhbmNlbFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xlYXJSZXF1ZXN0VGltZXIoKSB7XG4gICAgaWYgKHRoaXMucmVxdWVzdFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXF1ZXN0VGltZXIpO1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhclJldHJ5VGltZXIoKSB7XG4gICAgaWYgKHRoaXMucmV0cnlUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlUaW1lcik7XG4gICAgICB0aGlzLnJldHJ5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmFuc2l0aW9uVG8obmV3U3RhdGU6IFN0YXRlKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLmRlYnVnLmxvZygnU3RhdGUgaXMgYWxyZWFkeSAnICsgbmV3U3RhdGUubmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5leGl0KSB7XG4gICAgICB0aGlzLnN0YXRlLmV4aXQuY2FsbCh0aGlzLCBuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWJ1Zy5sb2coJ1N0YXRlIGNoYW5nZTogJyArICh0aGlzLnN0YXRlID8gdGhpcy5zdGF0ZS5uYW1lIDogJ3VuZGVmaW5lZCcpICsgJyAtPiAnICsgbmV3U3RhdGUubmFtZSk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuZW50ZXIpIHtcbiAgICAgIHRoaXMuc3RhdGUuZW50ZXIuYXBwbHkodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRFdmVudEhhbmRsZXI8VCBleHRlbmRzIGtleW9mIFN0YXRlWydldmVudHMnXT4oZXZlbnROYW1lOiBUKTogTm9uTnVsbGFibGU8U3RhdGVbJ2V2ZW50cyddW1RdPiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuc3RhdGUuZXZlbnRzW2V2ZW50TmFtZV07XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgJyR7ZXZlbnROYW1lfScgaW4gc3RhdGUgJyR7dGhpcy5zdGF0ZS5uYW1lfSdgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlciE7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRpc3BhdGNoRXZlbnQ8VCBleHRlbmRzIGtleW9mIFN0YXRlWydldmVudHMnXT4oZXZlbnROYW1lOiBULCAuLi5hcmdzOiBQYXJhbWV0ZXJzPE5vbk51bGxhYmxlPFN0YXRlWydldmVudHMnXVtUXT4+KSB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuc3RhdGUuZXZlbnRzW2V2ZW50TmFtZV0gYXMgKCh0aGlzOiBDb25uZWN0aW9uLCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYE5vIGV2ZW50ICcke2V2ZW50TmFtZX0nIGluIHN0YXRlICcke3RoaXMuc3RhdGUubmFtZX0nYCkpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29ja2V0RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuQ09OTkVDVElORyB8fCB0aGlzLnN0YXRlID09PSB0aGlzLlNUQVRFLlNFTlRfVExTU1NMTkVHT1RJQVRJT04pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGNvbm5lY3QgdG8gJHt0aGlzLmNvbmZpZy5zZXJ2ZXJ9OiR7dGhpcy5jb25maWcub3B0aW9ucy5wb3J0fSAtICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG4gICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UsICdFU09DS0VUJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYENvbm5lY3Rpb24gbG9zdCAtICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgdGhpcy5kZWJ1Zy5sb2cobWVzc2FnZSk7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCAnRVNPQ0tFVCcpKTtcbiAgICB9XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdzb2NrZXRFcnJvcicsIGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29ja2V0RW5kKCkge1xuICAgIHRoaXMuZGVidWcubG9nKCdzb2NrZXQgZW5kZWQnKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5GSU5BTCkge1xuICAgICAgY29uc3QgZXJyb3I6IEVycm9yV2l0aENvZGUgPSBuZXcgRXJyb3IoJ3NvY2tldCBoYW5nIHVwJyk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgdGhpcy5zb2NrZXRFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2NrZXRDbG9zZSgpIHtcbiAgICB0aGlzLmRlYnVnLmxvZygnY29ubmVjdGlvbiB0byAnICsgdGhpcy5jb25maWcuc2VydmVyICsgJzonICsgdGhpcy5jb25maWcub3B0aW9ucy5wb3J0ICsgJyBjbG9zZWQnKTtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gdGhpcy5TVEFURS5SRVJPVVRJTkcpIHtcbiAgICAgIHRoaXMuZGVidWcubG9nKCdSZXJvdXRpbmcgdG8gJyArIHRoaXMucm91dGluZ0RhdGEhLnNlcnZlciArICc6JyArIHRoaXMucm91dGluZ0RhdGEhLnBvcnQpO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3JlY29ubmVjdCcpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gdGhpcy5TVEFURS5UUkFOU0lFTlRfRkFJTFVSRV9SRVRSWSkge1xuICAgICAgY29uc3Qgc2VydmVyID0gdGhpcy5yb3V0aW5nRGF0YSA/IHRoaXMucm91dGluZ0RhdGEuc2VydmVyIDogdGhpcy5jb25maWcuc2VydmVyO1xuICAgICAgY29uc3QgcG9ydCA9IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnBvcnQgOiB0aGlzLmNvbmZpZy5vcHRpb25zLnBvcnQ7XG4gICAgICB0aGlzLmRlYnVnLmxvZygnUmV0cnkgYWZ0ZXIgdHJhbnNpZW50IGZhaWx1cmUgY29ubmVjdGluZyB0byAnICsgc2VydmVyICsgJzonICsgcG9ydCk7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgncmV0cnknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZW5kUHJlTG9naW4oKSB7XG4gICAgY29uc3QgWyAsIG1ham9yLCBtaW5vciwgYnVpbGQgXSA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLy5leGVjKHZlcnNpb24pID8/IFsgJzAuMC4wJywgJzAnLCAnMCcsICcwJyBdO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IG5ldyBQcmVsb2dpblBheWxvYWQoe1xuICAgICAgZW5jcnlwdDogdGhpcy5jb25maWcub3B0aW9ucy5lbmNyeXB0LFxuICAgICAgdmVyc2lvbjogeyBtYWpvcjogTnVtYmVyKG1ham9yKSwgbWlub3I6IE51bWJlcihtaW5vciksIGJ1aWxkOiBOdW1iZXIoYnVpbGQpLCBzdWJidWlsZDogMCB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm1lc3NhZ2VJby5zZW5kTWVzc2FnZShUWVBFLlBSRUxPR0lOLCBwYXlsb2FkLmRhdGEpO1xuICAgIHRoaXMuZGVidWcucGF5bG9hZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZW5kTG9naW43UGFja2V0KCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTG9naW43UGF5bG9hZCh7XG4gICAgICB0ZHNWZXJzaW9uOiB2ZXJzaW9uc1t0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb25dLFxuICAgICAgcGFja2V0U2l6ZTogdGhpcy5jb25maWcub3B0aW9ucy5wYWNrZXRTaXplLFxuICAgICAgY2xpZW50UHJvZ1ZlcjogMCxcbiAgICAgIGNsaWVudFBpZDogcHJvY2Vzcy5waWQsXG4gICAgICBjb25uZWN0aW9uSWQ6IDAsXG4gICAgICBjbGllbnRUaW1lWm9uZTogbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpLFxuICAgICAgY2xpZW50TGNpZDogMHgwMDAwMDQwOVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGlvbiB9ID0gdGhpcy5jb25maWc7XG4gICAgc3dpdGNoIChhdXRoZW50aWNhdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJzpcbiAgICAgICAgcGF5bG9hZC5mZWRBdXRoID0ge1xuICAgICAgICAgIHR5cGU6ICdBREFMJyxcbiAgICAgICAgICBlY2hvOiB0aGlzLmZlZEF1dGhSZXF1aXJlZCxcbiAgICAgICAgICB3b3JrZmxvdzogJ2RlZmF1bHQnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbic6XG4gICAgICAgIHBheWxvYWQuZmVkQXV0aCA9IHtcbiAgICAgICAgICB0eXBlOiAnU0VDVVJJVFlUT0tFTicsXG4gICAgICAgICAgZWNobzogdGhpcy5mZWRBdXRoUmVxdWlyZWQsXG4gICAgICAgICAgZmVkQXV0aFRva2VuOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnRva2VuXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bSc6XG4gICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnOlxuICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnOlxuICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICBwYXlsb2FkLmZlZEF1dGggPSB7XG4gICAgICAgICAgdHlwZTogJ0FEQUwnLFxuICAgICAgICAgIGVjaG86IHRoaXMuZmVkQXV0aFJlcXVpcmVkLFxuICAgICAgICAgIHdvcmtmbG93OiAnaW50ZWdyYXRlZCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ250bG0nOlxuICAgICAgICBwYXlsb2FkLnNzcGkgPSBjcmVhdGVOVExNUmVxdWVzdCh7IGRvbWFpbjogYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW4gfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXlsb2FkLnVzZXJOYW1lID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZTtcbiAgICAgICAgcGF5bG9hZC5wYXNzd29yZCA9IGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMucGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgcGF5bG9hZC5ob3N0bmFtZSA9IHRoaXMuY29uZmlnLm9wdGlvbnMud29ya3N0YXRpb25JZCB8fCBvcy5ob3N0bmFtZSgpO1xuICAgIHBheWxvYWQuc2VydmVyTmFtZSA9IHRoaXMucm91dGluZ0RhdGEgPyB0aGlzLnJvdXRpbmdEYXRhLnNlcnZlciA6IHRoaXMuY29uZmlnLnNlcnZlcjtcbiAgICBwYXlsb2FkLmFwcE5hbWUgPSB0aGlzLmNvbmZpZy5vcHRpb25zLmFwcE5hbWUgfHwgJ1RlZGlvdXMnO1xuICAgIHBheWxvYWQubGlicmFyeU5hbWUgPSBsaWJyYXJ5TmFtZTtcbiAgICBwYXlsb2FkLmxhbmd1YWdlID0gdGhpcy5jb25maWcub3B0aW9ucy5sYW5ndWFnZTtcbiAgICBwYXlsb2FkLmRhdGFiYXNlID0gdGhpcy5jb25maWcub3B0aW9ucy5kYXRhYmFzZTtcbiAgICBwYXlsb2FkLmNsaWVudElkID0gQnVmZmVyLmZyb20oWzEsIDIsIDMsIDQsIDUsIDZdKTtcblxuICAgIHBheWxvYWQucmVhZE9ubHlJbnRlbnQgPSB0aGlzLmNvbmZpZy5vcHRpb25zLnJlYWRPbmx5SW50ZW50O1xuICAgIHBheWxvYWQuaW5pdERiRmF0YWwgPSAhdGhpcy5jb25maWcub3B0aW9ucy5mYWxsYmFja1RvRGVmYXVsdERiO1xuXG4gICAgdGhpcy5yb3V0aW5nRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1lc3NhZ2VJby5zZW5kTWVzc2FnZShUWVBFLkxPR0lONywgcGF5bG9hZC50b0J1ZmZlcigpKTtcblxuICAgIHRoaXMuZGVidWcucGF5bG9hZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZW5kRmVkQXV0aFRva2VuTWVzc2FnZSh0b2tlbjogc3RyaW5nKSB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW5MZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aCh0b2tlbiwgJ3VjczInKTtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDggKyBhY2Nlc3NUb2tlbkxlbik7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgb2Zmc2V0ID0gZGF0YS53cml0ZVVJbnQzMkxFKGFjY2Vzc1Rva2VuTGVuICsgNCwgb2Zmc2V0KTtcbiAgICBvZmZzZXQgPSBkYXRhLndyaXRlVUludDMyTEUoYWNjZXNzVG9rZW5MZW4sIG9mZnNldCk7XG4gICAgZGF0YS53cml0ZSh0b2tlbiwgb2Zmc2V0LCAndWNzMicpO1xuICAgIHRoaXMubWVzc2FnZUlvLnNlbmRNZXNzYWdlKFRZUEUuRkVEQVVUSF9UT0tFTiwgZGF0YSk7XG4gICAgLy8gc2VudCB0aGUgZmVkQXV0aCB0b2tlbiBtZXNzYWdlLCB0aGUgcmVzdCBpcyBzaW1pbGFyIHRvIHN0YW5kYXJkIGxvZ2luIDdcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZW5kSW5pdGlhbFNxbCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0gbmV3IFNxbEJhdGNoUGF5bG9hZCh0aGlzLmdldEluaXRpYWxTcWwoKSwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIHRoaXMuY29uZmlnLm9wdGlvbnMpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogVFlQRS5TUUxfQkFUQ0ggfSk7XG4gICAgdGhpcy5tZXNzYWdlSW8ub3V0Z29pbmdNZXNzYWdlU3RyZWFtLndyaXRlKG1lc3NhZ2UpO1xuICAgIFJlYWRhYmxlLmZyb20ocGF5bG9hZCkucGlwZShtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0SW5pdGlhbFNxbCgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW107XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9udWxscyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFuc2lfbnVsbHMgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQW5zaU51bGxEZWZhdWx0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX251bGxfZGZsdF9vbiBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpTnVsbERlZmF1bHQgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX251bGxfZGZsdF9vbiBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpUGFkZGluZyA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9wYWRkaW5nIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lQYWRkaW5nID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV9wYWRkaW5nIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFuc2lXYXJuaW5ncyA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgYW5zaV93YXJuaW5ncyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVBbnNpV2FybmluZ3MgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBhbnNpX3dhcm5pbmdzIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUFyaXRoQWJvcnQgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFyaXRoYWJvcnQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQXJpdGhBYm9ydCA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGFyaXRoYWJvcnQgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ29uY2F0TnVsbFlpZWxkc051bGwgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGNvbmNhdF9udWxsX3lpZWxkc19udWxsIG9uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZUNvbmNhdE51bGxZaWVsZHNOdWxsID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY29uY2F0X251bGxfeWllbGRzX251bGwgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlQ3Vyc29yQ2xvc2VPbkNvbW1pdCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY3Vyc29yX2Nsb3NlX29uX2NvbW1pdCBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVDdXJzb3JDbG9zZU9uQ29tbWl0ID09PSBmYWxzZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgY3Vyc29yX2Nsb3NlX29uX2NvbW1pdCBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5kYXRlZmlyc3QgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IGRhdGVmaXJzdCAke3RoaXMuY29uZmlnLm9wdGlvbnMuZGF0ZWZpcnN0fWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgc2V0IGRhdGVmb3JtYXQgJHt0aGlzLmNvbmZpZy5vcHRpb25zLmRhdGVGb3JtYXR9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlSW1wbGljaXRUcmFuc2FjdGlvbnMgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGltcGxpY2l0X3RyYW5zYWN0aW9ucyBvbicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcub3B0aW9ucy5lbmFibGVJbXBsaWNpdFRyYW5zYWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IGltcGxpY2l0X3RyYW5zYWN0aW9ucyBvZmYnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucy5sYW5ndWFnZSAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5wdXNoKGBzZXQgbGFuZ3VhZ2UgJHt0aGlzLmNvbmZpZy5vcHRpb25zLmxhbmd1YWdlfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLmVuYWJsZU51bWVyaWNSb3VuZGFib3J0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBudW1lcmljX3JvdW5kYWJvcnQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlTnVtZXJpY1JvdW5kYWJvcnQgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCBudW1lcmljX3JvdW5kYWJvcnQgb2ZmJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5wdXNoKCdzZXQgcXVvdGVkX2lkZW50aWZpZXIgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuZW5hYmxlUXVvdGVkSWRlbnRpZmllciA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IHF1b3RlZF9pZGVudGlmaWVyIG9mZicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRleHRzaXplICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCB0ZXh0c2l6ZSAke3RoaXMuY29uZmlnLm9wdGlvbnMudGV4dHNpemV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuY29ubmVjdGlvbklzb2xhdGlvbkxldmVsICE9PSBudWxsKSB7XG4gICAgICBvcHRpb25zLnB1c2goYHNldCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgJHt0aGlzLmdldElzb2xhdGlvbkxldmVsVGV4dCh0aGlzLmNvbmZpZy5vcHRpb25zLmNvbm5lY3Rpb25Jc29sYXRpb25MZXZlbCl9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMucHVzaCgnc2V0IHhhY3RfYWJvcnQgb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMuYWJvcnRUcmFuc2FjdGlvbk9uRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICBvcHRpb25zLnB1c2goJ3NldCB4YWN0X2Fib3J0IG9mZicpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcm9jZXNzZWRJbml0aWFsU3FsKCkge1xuICAgIHRoaXMuY2xlYXJDb25uZWN0VGltZXIoKTtcbiAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBTUUwgYmF0Y2ggcmVwcmVzZW50ZWQgYnkgW1tSZXF1ZXN0XV0uXG4gICAqIFRoZXJlIGlzIG5vIHBhcmFtIHN1cHBvcnQsIGFuZCB1bmxpa2UgW1tSZXF1ZXN0LmV4ZWNTcWxdXSxcbiAgICogaXQgaXMgbm90IGxpa2VseSB0aGF0IFNRTCBTZXJ2ZXIgd2lsbCByZXVzZSB0aGUgZXhlY3V0aW9uIHBsYW4gaXQgZ2VuZXJhdGVzIGZvciB0aGUgU1FMLlxuICAgKlxuICAgKiBJbiBhbG1vc3QgYWxsIGNhc2VzLCBbW1JlcXVlc3QuZXhlY1NxbF1dIHdpbGwgYmUgYSBiZXR0ZXIgY2hvaWNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIFtbUmVxdWVzdF1dIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBleGVjU3FsQmF0Y2gocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5TUUxfQkFUQ0gsIG5ldyBTcWxCYXRjaFBheWxvYWQocmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmUhLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqICBFeGVjdXRlIHRoZSBTUUwgcmVwcmVzZW50ZWQgYnkgW1tSZXF1ZXN0XV0uXG4gICAqXG4gICAqIEFzIGBzcF9leGVjdXRlc3FsYCBpcyB1c2VkIHRvIGV4ZWN1dGUgdGhlIFNRTCwgaWYgdGhlIHNhbWUgU1FMIGlzIGV4ZWN1dGVkIG11bHRpcGxlcyB0aW1lc1xuICAgKiB1c2luZyB0aGlzIGZ1bmN0aW9uLCB0aGUgU1FMIFNlcnZlciBxdWVyeSBvcHRpbWl6ZXIgaXMgbGlrZWx5IHRvIHJldXNlIHRoZSBleGVjdXRpb24gcGxhbiBpdCBnZW5lcmF0ZXNcbiAgICogZm9yIHRoZSBmaXJzdCBleGVjdXRpb24uIFRoaXMgbWF5IGFsc28gcmVzdWx0IGluIFNRTCBzZXJ2ZXIgdHJlYXRpbmcgdGhlIHJlcXVlc3QgbGlrZSBhIHN0b3JlZCBwcm9jZWR1cmVcbiAgICogd2hpY2ggY2FuIHJlc3VsdCBpbiB0aGUgW1tFdmVudF9kb25lSW5Qcm9jXV0gb3IgW1tFdmVudF9kb25lUHJvY11dIGV2ZW50cyBiZWluZyBlbWl0dGVkIGluc3RlYWQgb2YgdGhlXG4gICAqIFtbRXZlbnRfZG9uZV1dIGV2ZW50IHlvdSBtaWdodCBleHBlY3QuIFVzaW5nIFtbZXhlY1NxbEJhdGNoXV0gd2lsbCBwcmV2ZW50IHRoaXMgZnJvbSBvY2N1cnJpbmcgYnV0IG1heSBoYXZlIGEgbmVnYXRpdmUgcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgKlxuICAgKiBCZXdhcmUgb2YgdGhlIHdheSB0aGF0IHNjb3BpbmcgcnVsZXMgYXBwbHksIGFuZCBob3cgdGhleSBtYXkgW2FmZmVjdCBsb2NhbCB0ZW1wIHRhYmxlc10oaHR0cDovL3dlYmxvZ3Muc3FsdGVhbS5jb20vbWxhZGVucC9hcmNoaXZlLzIwMDYvMTEvMDMvMTcxOTcuYXNweClcbiAgICogSWYgeW91J3JlIHJ1bm5pbmcgaW4gdG8gc2NvcGluZyBpc3N1ZXMsIHRoZW4gW1tleGVjU3FsQmF0Y2hdXSBtYXkgYmUgYSBiZXR0ZXIgY2hvaWNlLlxuICAgKiBTZWUgYWxzbyBbaXNzdWUgIzI0XShodHRwczovL2dpdGh1Yi5jb20vcGVraW0vdGVkaW91cy9pc3N1ZXMvMjQpXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGV4ZWNTcWwocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0LnZhbGlkYXRlUGFyYW1ldGVycyh0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdID0gW107XG5cbiAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgdHlwZTogVFlQRVMuTlZhckNoYXIsXG4gICAgICBuYW1lOiAnc3RhdGVtZW50JyxcbiAgICAgIHZhbHVlOiByZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZSxcbiAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgIHR5cGU6IFRZUEVTLk5WYXJDaGFyLFxuICAgICAgICBuYW1lOiAncGFyYW1zJyxcbiAgICAgICAgdmFsdWU6IHJlcXVlc3QubWFrZVBhcmFtc1BhcmFtZXRlcihyZXF1ZXN0LnBhcmFtZXRlcnMpLFxuICAgICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBwYXJhbWV0ZXJzLnB1c2goLi4ucmVxdWVzdC5wYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuUlBDX1JFUVVFU1QsIG5ldyBScGNSZXF1ZXN0UGF5bG9hZChQcm9jZWR1cmVzLlNwX0V4ZWN1dGVTcWwsIHBhcmFtZXRlcnMsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBCdWxrTG9hZCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byBidWxrLWluc2VydCBpbnRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBBIHNldCBvZiBidWxrIGxvYWQgb3B0aW9ucy5cbiAgICovXG4gIG5ld0J1bGtMb2FkKHRhYmxlOiBzdHJpbmcsIGNhbGxiYWNrOiBCdWxrTG9hZENhbGxiYWNrKTogQnVsa0xvYWRcbiAgbmV3QnVsa0xvYWQodGFibGU6IHN0cmluZywgb3B0aW9uczogQnVsa0xvYWRPcHRpb25zLCBjYWxsYmFjazogQnVsa0xvYWRDYWxsYmFjayk6IEJ1bGtMb2FkXG4gIG5ld0J1bGtMb2FkKHRhYmxlOiBzdHJpbmcsIGNhbGxiYWNrT3JPcHRpb25zOiBCdWxrTG9hZE9wdGlvbnMgfCBCdWxrTG9hZENhbGxiYWNrLCBjYWxsYmFjaz86IEJ1bGtMb2FkQ2FsbGJhY2spIHtcbiAgICBsZXQgb3B0aW9uczogQnVsa0xvYWRPcHRpb25zO1xuXG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tPck9wdGlvbnMgYXMgQnVsa0xvYWRDYWxsYmFjaztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGNhbGxiYWNrT3JPcHRpb25zIGFzIEJ1bGtMb2FkT3B0aW9ucztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcIm9wdGlvbnNcIiBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJ1bGtMb2FkKHRhYmxlLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uLCB0aGlzLmNvbmZpZy5vcHRpb25zLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIFtbQnVsa0xvYWRdXS5cbiAgICpcbiAgICogYGBganNcbiAgICogLy8gV2Ugd2FudCB0byBwZXJmb3JtIGEgYnVsayBsb2FkIGludG8gYSB0YWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICAgKiAvLyBDUkVBVEUgVEFCTEUgZW1wbG95ZWVzIChmaXJzdF9uYW1lIG52YXJjaGFyKDI1NSksIGxhc3RfbmFtZSBudmFyY2hhcigyNTUpLCBkYXlfb2ZfYmlydGggZGF0ZSk7XG4gICAqXG4gICAqIGNvbnN0IGJ1bGtMb2FkID0gY29ubmVjdGlvbi5uZXdCdWxrTG9hZCgnZW1wbG95ZWVzJywgKGVyciwgcm93Q291bnQpID0+IHtcbiAgICogICAvLyAuLi5cbiAgICogfSk7XG4gICAqXG4gICAqIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbHVtbnMgdGhhdCB3ZSB3YW50IHRvIHdyaXRlIHRvLFxuICAgKiAvLyBhbmQgdGhlaXIgZGVmaW5pdGlvbnMuIFRoZXNlIGRlZmluaXRpb25zIG11c3QgbWF0Y2ggdGhlIGFjdHVhbCB0YWJsZSxcbiAgICogLy8gb3RoZXJ3aXNlIHRoZSBidWxrIGxvYWQgd2lsbCBmYWlsLlxuICAgKiBidWxrTG9hZC5hZGRDb2x1bW4oJ2ZpcnN0X25hbWUnLCBUWVBFUy5OVmFyY2hhciwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignbGFzdF9uYW1lJywgVFlQRVMuTlZhcmNoYXIsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKiBidWxrTG9hZC5hZGRDb2x1bW4oJ2RhdGVfb2ZfYmlydGgnLCBUWVBFUy5EYXRlLCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICpcbiAgICogLy8gRXhlY3V0ZSBhIGJ1bGsgbG9hZCB3aXRoIGEgcHJlZGVmaW5lZCBsaXN0IG9mIHJvd3MuXG4gICAqIC8vXG4gICAqIC8vIE5vdGUgdGhhdCB0aGVzZSByb3dzIGFyZSBoZWxkIGluIG1lbW9yeSB1bnRpbCB0aGVcbiAgICogLy8gYnVsayBsb2FkIHdhcyBwZXJmb3JtZWQsIHNvIGlmIHlvdSBuZWVkIHRvIHdyaXRlIGEgbGFyZ2VcbiAgICogLy8gbnVtYmVyIG9mIHJvd3MgKGUuZy4gYnkgcmVhZGluZyBmcm9tIGEgQ1NWIGZpbGUpLFxuICAgKiAvLyBwYXNzaW5nIGFuIGBBc3luY0l0ZXJhYmxlYCBpcyBhZHZpc2FibGUgdG8ga2VlcCBtZW1vcnkgdXNhZ2UgbG93LlxuICAgKiBjb25uZWN0aW9uLmV4ZWNCdWxrTG9hZChidWxrTG9hZCwgW1xuICAgKiAgIHsgJ2ZpcnN0X25hbWUnOiAnU3RldmUnLCAnbGFzdF9uYW1lJzogJ0pvYnMnLCAnZGF5X29mX2JpcnRoJzogbmV3IERhdGUoJzAyLTI0LTE5NTUnKSB9LFxuICAgKiAgIHsgJ2ZpcnN0X25hbWUnOiAnQmlsbCcsICdsYXN0X25hbWUnOiAnR2F0ZXMnLCAnZGF5X29mX2JpcnRoJzogbmV3IERhdGUoJzEwLTI4LTE5NTUnKSB9XG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGJ1bGtMb2FkIEEgcHJldmlvdXNseSBjcmVhdGVkIFtbQnVsa0xvYWRdXS5cbiAgICogQHBhcmFtIHJvd3MgQSBbW0l0ZXJhYmxlXV0gb3IgW1tBc3luY0l0ZXJhYmxlXV0gdGhhdCBjb250YWlucyB0aGUgcm93cyB0aGF0IHNob3VsZCBiZSBidWxrIGxvYWRlZC5cbiAgICovXG4gIGV4ZWNCdWxrTG9hZChidWxrTG9hZDogQnVsa0xvYWQsIHJvd3M6IEFzeW5jSXRlcmFibGU8dW5rbm93bltdIHwgeyBbY29sdW1uTmFtZTogc3RyaW5nXTogdW5rbm93biB9PiB8IEl0ZXJhYmxlPHVua25vd25bXSB8IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IHVua25vd24gfT4pOiB2b2lkXG5cbiAgZXhlY0J1bGtMb2FkKGJ1bGtMb2FkOiBCdWxrTG9hZCwgcm93cz86IEFzeW5jSXRlcmFibGU8dW5rbm93bltdIHwgeyBbY29sdW1uTmFtZTogc3RyaW5nXTogdW5rbm93biB9PiB8IEl0ZXJhYmxlPHVua25vd25bXSB8IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IHVua25vd24gfT4pIHtcbiAgICBidWxrTG9hZC5leGVjdXRpb25TdGFydGVkID0gdHJ1ZTtcblxuICAgIGlmIChyb3dzKSB7XG4gICAgICBpZiAoYnVsa0xvYWQuc3RyZWFtaW5nTW9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZCBjYW4ndCBiZSBjYWxsZWQgd2l0aCBhIEJ1bGtMb2FkIHRoYXQgd2FzIHB1dCBpbiBzdHJlYW1pbmcgbW9kZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWxrTG9hZC5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbi5leGVjQnVsa0xvYWQgY2FuJ3QgYmUgY2FsbGVkIHdpdGggYSBCdWxrTG9hZCB0aGF0IGFscmVhZHkgaGFzIHJvd3Mgd3JpdHRlbiB0byBpdC5cIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd1N0cmVhbSA9IFJlYWRhYmxlLmZyb20ocm93cyk7XG5cbiAgICAgIC8vIERlc3Ryb3kgdGhlIHBhY2tldCB0cmFuc2Zvcm0gaWYgYW4gZXJyb3IgaGFwcGVucyBpbiB0aGUgcm93IHN0cmVhbSxcbiAgICAgIC8vIGUuZy4gaWYgYW4gZXJyb3IgaXMgdGhyb3duIGZyb20gd2l0aGluIGEgZ2VuZXJhdG9yIG9yIHN0cmVhbS5cbiAgICAgIHJvd1N0cmVhbS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGJ1bGtMb2FkLnJvd1RvUGFja2V0VHJhbnNmb3JtLmRlc3Ryb3koZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBEZXN0cm95IHRoZSByb3cgc3RyZWFtIGlmIGFuIGVycm9yIGhhcHBlbnMgaW4gdGhlIHBhY2tldCB0cmFuc2Zvcm0sXG4gICAgICAvLyBlLmcuIGlmIHRoZSBidWxrIGxvYWQgaXMgY2FuY2VsbGVkLlxuICAgICAgYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByb3dTdHJlYW0uZGVzdHJveShlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIHJvd1N0cmVhbS5waXBlKGJ1bGtMb2FkLnJvd1RvUGFja2V0VHJhbnNmb3JtKTtcbiAgICB9IGVsc2UgaWYgKCFidWxrTG9hZC5zdHJlYW1pbmdNb2RlKSB7XG4gICAgICAvLyBJZiB0aGUgYnVsa2xvYWQgd2FzIG5vdCBwdXQgaW50byBzdHJlYW1pbmcgbW9kZSBieSB0aGUgdXNlcixcbiAgICAgIC8vIHdlIGVuZCB0aGUgcm93VG9QYWNrZXRUcmFuc2Zvcm0gaGVyZSBmb3IgdGhlbS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiBpdCB3YXMgcHV0IGludG8gc3RyZWFtaW5nIG1vZGUsIGl0J3MgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eVxuICAgICAgLy8gdG8gZW5kIHRoZSBzdHJlYW0uXG4gICAgICBidWxrTG9hZC5yb3dUb1BhY2tldFRyYW5zZm9ybS5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgQnVsa0xvYWRQYXlsb2FkKGJ1bGtMb2FkKTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChidWxrTG9hZC5nZXRCdWxrSW5zZXJ0U3FsKCksIChlcnJvcjogKEVycm9yICYgeyBjb2RlPzogc3RyaW5nIH0pIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgYnVsa0xvYWQucmVtb3ZlTGlzdGVuZXIoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlICs9ICcgVGhpcyBpcyBsaWtlbHkgYmVjYXVzZSB0aGUgc2NoZW1hIG9mIHRoZSBCdWxrTG9hZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2NoZW1hIG9mIHRoZSB0YWJsZSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGludG8uJztcbiAgICAgICAgfVxuICAgICAgICBidWxrTG9hZC5lcnJvciA9IGVycm9yO1xuICAgICAgICBidWxrTG9hZC5jYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYWtlUmVxdWVzdChidWxrTG9hZCwgVFlQRS5CVUxLX0xPQUQsIHBheWxvYWQpO1xuICAgIH0pO1xuXG4gICAgYnVsa0xvYWQub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuXG4gICAgdGhpcy5leGVjU3FsQmF0Y2gocmVxdWVzdCk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgU1FMIHJlcHJlc2VudGVkIGJ5IHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBUaGUgcmVxdWVzdCBjYW4gdGhlbiBiZSB1c2VkIGluIHN1YnNlcXVlbnQgY2FsbHMgdG9cbiAgICogW1tleGVjdXRlXV0gYW5kIFtbdW5wcmVwYXJlXV1cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKiAgIFBhcmFtZXRlcnMgb25seSByZXF1aXJlIGEgbmFtZSBhbmQgdHlwZS4gUGFyYW1ldGVyIHZhbHVlcyBhcmUgaWdub3JlZC5cbiAgICovXG4gIHByZXBhcmUocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdID0gW107XG5cbiAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgdHlwZTogVFlQRVMuSW50LFxuICAgICAgbmFtZTogJ2hhbmRsZScsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0OiB0cnVlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgdmFsdWU6IHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGggPyByZXF1ZXN0Lm1ha2VQYXJhbXNQYXJhbWV0ZXIocmVxdWVzdC5wYXJhbWV0ZXJzKSA6IG51bGwsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5OVmFyQ2hhcixcbiAgICAgIG5hbWU6ICdzdG10JyxcbiAgICAgIHZhbHVlOiByZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZSxcbiAgICAgIG91dHB1dDogZmFsc2UsXG4gICAgICBsZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgc2NhbGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgcmVxdWVzdC5wcmVwYXJpbmcgPSB0cnVlO1xuXG4gICAgLy8gVE9ETzogV2UgbmVlZCB0byBjbGVhbiB1cCB0aGlzIGV2ZW50IGhhbmRsZXIsIG90aGVyd2lzZSB0aGlzIGxlYWtzIG1lbW9yeVxuICAgIHJlcXVlc3Qub24oJ3JldHVyblZhbHVlJywgKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKG5hbWUgPT09ICdoYW5kbGUnKSB7XG4gICAgICAgIHJlcXVlc3QuaGFuZGxlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihgVGVkaW91cyA+IFVuZXhwZWN0ZWQgb3V0cHV0IHBhcmFtZXRlciAke25hbWV9IGZyb20gc3BfcHJlcGFyZWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlJQQ19SRVFVRVNULCBuZXcgUnBjUmVxdWVzdFBheWxvYWQoUHJvY2VkdXJlcy5TcF9QcmVwYXJlLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIFNRTCBTZXJ2ZXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHByZXZpb3VzbHkgcHJlcGFyZWQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgQSBbW1JlcXVlc3RdXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0LlxuICAgKiAgIFBhcmFtZXRlcnMgb25seSByZXF1aXJlIGEgbmFtZSBhbmQgdHlwZS5cbiAgICogICBQYXJhbWV0ZXIgdmFsdWVzIGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgdW5wcmVwYXJlKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgIHR5cGU6IFRZUEVTLkludCxcbiAgICAgIG5hbWU6ICdoYW5kbGUnLFxuICAgICAgLy8gVE9ETzogQWJvcnQgaWYgYHJlcXVlc3QuaGFuZGxlYCBpcyBub3Qgc2V0XG4gICAgICB2YWx1ZTogcmVxdWVzdC5oYW5kbGUsXG4gICAgICBvdXRwdXQ6IGZhbHNlLFxuICAgICAgbGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgIHNjYWxlOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKFByb2NlZHVyZXMuU3BfVW5wcmVwYXJlLCBwYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgcHJldmlvdXNseSBwcmVwYXJlZCBTUUwsIHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBBIHByZXZpb3VzbHkgcHJlcGFyZWQgW1tSZXF1ZXN0XV0uXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJzICBBbiBvYmplY3Qgd2hvc2UgbmFtZXMgY29ycmVzcG9uZCB0byB0aGUgbmFtZXMgb2ZcbiAgICogICBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgW1tSZXF1ZXN0XV0gYmVmb3JlIGl0IHdhcyBwcmVwYXJlZC5cbiAgICogICBUaGUgb2JqZWN0J3MgdmFsdWVzIGFyZSBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlcnMnIHZhbHVlcyB3aGVuIHRoZVxuICAgKiAgIHJlcXVlc3QgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBleGVjdXRlKHJlcXVlc3Q6IFJlcXVlc3QsIHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkge1xuICAgIGNvbnN0IGV4ZWN1dGVQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gICAgZXhlY3V0ZVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICB0eXBlOiBUWVBFUy5JbnQsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIC8vIFRPRE86IEFib3J0IGlmIGByZXF1ZXN0LmhhbmRsZWAgaXMgbm90IHNldFxuICAgICAgdmFsdWU6IHJlcXVlc3QuaGFuZGxlLFxuICAgICAgb3V0cHV0OiBmYWxzZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICBzY2FsZTogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSByZXF1ZXN0LnBhcmFtZXRlcnNbaV07XG5cbiAgICAgICAgZXhlY3V0ZVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgICAgLi4ucGFyYW1ldGVyLFxuICAgICAgICAgIHZhbHVlOiBwYXJhbWV0ZXIudHlwZS52YWxpZGF0ZShwYXJhbWV0ZXJzID8gcGFyYW1ldGVyc1twYXJhbWV0ZXIubmFtZV0gOiBudWxsLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKFByb2NlZHVyZXMuU3BfRXhlY3V0ZSwgZXhlY3V0ZVBhcmFtZXRlcnMsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCB0aGlzLmNvbmZpZy5vcHRpb25zLCB0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhIHN0b3JlZCBwcm9jZWR1cmUgcmVwcmVzZW50ZWQgYnkgW1tSZXF1ZXN0XV0uXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IEEgW1tSZXF1ZXN0XV0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGNhbGxQcm9jZWR1cmUocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0LnZhbGlkYXRlUGFyYW1ldGVycyh0aGlzLmRhdGFiYXNlQ29sbGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXF1ZXN0LmVycm9yID0gZXJyb3I7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlISwgcmVxdWVzdC5wYXJhbWV0ZXJzLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbkRlc2NyaXB0b3IoKSwgdGhpcy5jb25maWcub3B0aW9ucywgdGhpcy5kYXRhYmFzZUNvbGxhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcGFyYW0gbmFtZSBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy4gUmVxdWlyZWQgd2hlbiBgaXNvbGF0aW9uTGV2ZWxgXG4gICAqICAgaXMgcHJlc2VudC5cbiAgICogQHBhcmFtIGlzb2xhdGlvbkxldmVsIFRoZSBpc29sYXRpb24gbGV2ZWwgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcnVuIHdpdGguXG4gICAqXG4gICAqICAgVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogICAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAgICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAgICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogICAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICAgKiBgU05BUFNIT1RgXG4gICAqXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgQ29ubmVjdGlvbidzIGlzb2xhdGlvbiBsZXZlbC5cbiAgICovXG4gIGJlZ2luVHJhbnNhY3Rpb24oY2FsbGJhY2s6IEJlZ2luVHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnLCBpc29sYXRpb25MZXZlbCA9IHRoaXMuY29uZmlnLm9wdGlvbnMuaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICBhc3NlcnRWYWxpZElzb2xhdGlvbkxldmVsKGlzb2xhdGlvbkxldmVsLCAnaXNvbGF0aW9uTGV2ZWwnKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUsIGlzb2xhdGlvbkxldmVsKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTRVQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMICcgKyAodHJhbnNhY3Rpb24uaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSkgKyAnO0JFR0lOIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoKys7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVuZGVmaW5lZCwgKGVycikgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KHJlcXVlc3QsIFRZUEUuVFJBTlNBQ1RJT05fTUFOQUdFUiwgdHJhbnNhY3Rpb24uYmVnaW5QYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuIFJlcXVpcmVkIHdoZW4gYGlzb2xhdGlvbkxldmVsYGlzIHByZXNlbnQuXG4gICAqL1xuICBjb21taXRUcmFuc2FjdGlvbihjYWxsYmFjazogQ29tbWl0VHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24obmFtZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ0NPTU1JVCBUUkFOICcgKyB0cmFuc2FjdGlvbi5uYW1lLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aC0tO1xuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5jb21taXRQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbGJhY2sgYSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlcmUgc2hvdWxkIGJlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbiAtIHRoYXQgaXMsIFtbYmVnaW5UcmFuc2FjdGlvbl1dXG4gICAqIHNob3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcGFyYW0gbmFtZSBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICogICBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGAgaXMgcHJlc2VudC5cbiAgICovXG4gIHJvbGxiYWNrVHJhbnNhY3Rpb24oY2FsbGJhY2s6IFJvbGxiYWNrVHJhbnNhY3Rpb25DYWxsYmFjaywgbmFtZSA9ICcnKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24obmFtZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ1JPTExCQUNLIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodW5kZWZpbmVkLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QocmVxdWVzdCwgVFlQRS5UUkFOU0FDVElPTl9NQU5BR0VSLCB0cmFuc2FjdGlvbi5yb2xsYmFja1BheWxvYWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBzYXZlcG9pbnQgd2l0aGluIGEgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZXJlIHNob3VsZCBiZSBhbiBhY3RpdmUgdHJhbnNhY3Rpb24gLSB0aGF0IGlzLCBbW2JlZ2luVHJhbnNhY3Rpb25dXVxuICAgKiBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHBhcmFtIG5hbWUgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uXFxcbiAgICogICBPcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICogICBSZXF1aXJlZCB3aGVuIGBpc29sYXRpb25MZXZlbGAgaXMgcHJlc2VudC5cbiAgICovXG4gIHNhdmVUcmFuc2FjdGlvbihjYWxsYmFjazogU2F2ZVRyYW5zYWN0aW9uQ2FsbGJhY2ssIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY1NxbEJhdGNoKG5ldyBSZXF1ZXN0KCdTQVZFIFRSQU4gJyArIHRyYW5zYWN0aW9uLm5hbWUsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoKys7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1bmRlZmluZWQsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChyZXF1ZXN0LCBUWVBFLlRSQU5TQUNUSU9OX01BTkFHRVIsIHRyYW5zYWN0aW9uLnNhdmVQYXlsb2FkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBnaXZlbiBjYWxsYmFjayBhZnRlciBzdGFydGluZyBhIHRyYW5zYWN0aW9uLCBhbmQgY29tbWl0IG9yXG4gICAqIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBhZnRlcndhcmRzLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIHRoYXQgZW1wbG95cyBbW2JlZ2luVHJhbnNhY3Rpb25dXSwgW1tjb21taXRUcmFuc2FjdGlvbl1dLFxuICAgKiBbW3JvbGxiYWNrVHJhbnNhY3Rpb25dXSwgYW5kIFtbc2F2ZVRyYW5zYWN0aW9uXV0gdG8gZ3JlYXRseSBzaW1wbGlmeSB0aGVcbiAgICogdXNlIG9mIGRhdGFiYXNlIHRyYW5zYWN0aW9ucyBhbmQgYXV0b21hdGljYWxseSBoYW5kbGUgdHJhbnNhY3Rpb24gbmVzdGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNiXG4gICAqIEBwYXJhbSBpc29sYXRpb25MZXZlbFxuICAgKiAgIFRoZSBpc29sYXRpb24gbGV2ZWwgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcnVuIHdpdGguXG4gICAqXG4gICAqICAgVGhlIGlzb2xhdGlvbiBsZXZlbHMgYXJlIGF2YWlsYWJsZSBmcm9tIGByZXF1aXJlKCd0ZWRpb3VzJykuSVNPTEFUSU9OX0xFVkVMYC5cbiAgICogICAqIGBSRUFEX1VOQ09NTUlUVEVEYFxuICAgKiAgICogYFJFQURfQ09NTUlUVEVEYFxuICAgKiAgICogYFJFUEVBVEFCTEVfUkVBRGBcbiAgICogICAqIGBTRVJJQUxJWkFCTEVgXG4gICAqICAgKiBgU05BUFNIT1RgXG4gICAqXG4gICAqICAgT3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB0aGUgQ29ubmVjdGlvbidzIGlzb2xhdGlvbiBsZXZlbC5cbiAgICovXG4gIHRyYW5zYWN0aW9uKGNiOiAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHR4RG9uZT86IDxUIGV4dGVuZHMgVHJhbnNhY3Rpb25Eb25lQ2FsbGJhY2s+KGVycjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCBkb25lOiBULCAuLi5hcmdzOiBDYWxsYmFja1BhcmFtZXRlcnM8VD4pID0+IHZvaWQpID0+IHZvaWQsIGlzb2xhdGlvbkxldmVsPzogdHlwZW9mIElTT0xBVElPTl9MRVZFTFtrZXlvZiB0eXBlb2YgSVNPTEFUSU9OX0xFVkVMXSkge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BjYmAgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlU2F2ZXBvaW50ID0gdGhpcy5pblRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IG5hbWUgPSAnX3RlZGlvdXNfJyArIChjcnlwdG8ucmFuZG9tQnl0ZXMoMTApLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgdHhEb25lOiA8VCBleHRlbmRzIFRyYW5zYWN0aW9uRG9uZUNhbGxiYWNrPihlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgZG9uZTogVCwgLi4uYXJnczogQ2FsbGJhY2tQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkID0gKGVyciwgZG9uZSwgLi4uYXJncykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhpcy5pblRyYW5zYWN0aW9uICYmIHRoaXMuc3RhdGUgPT09IHRoaXMuU1RBVEUuTE9HR0VEX0lOKSB7XG4gICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKCh0eEVycikgPT4ge1xuICAgICAgICAgICAgZG9uZSh0eEVyciB8fCBlcnIsIC4uLmFyZ3MpO1xuICAgICAgICAgIH0sIG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbmUoZXJyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1c2VTYXZlcG9pbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgICAgZG9uZShudWxsLCAuLi5hcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKHR4RXJyKSA9PiB7XG4gICAgICAgICAgZG9uZSh0eEVyciwgLi4uYXJncyk7XG4gICAgICAgIH0sIG5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodXNlU2F2ZXBvaW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlVHJhbnNhY3Rpb24oKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5leGVjU3FsQmF0Y2gobmV3IFJlcXVlc3QoJ1NFVCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgJyArIHRoaXMuZ2V0SXNvbGF0aW9uTGV2ZWxUZXh0KGlzb2xhdGlvbkxldmVsKSwgKGVycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVyciwgdHhEb25lKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHR4RG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWdpblRyYW5zYWN0aW9uKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNiKG51bGwsIHR4RG9uZSk7XG4gICAgICB9LCBuYW1lLCBpc29sYXRpb25MZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUmVxdWVzdChyZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQsIHBhY2tldFR5cGU6IG51bWJlciwgcGF5bG9hZDogKEl0ZXJhYmxlPEJ1ZmZlcj4gfCBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4pICYgeyB0b1N0cmluZzogKGluZGVudD86IHN0cmluZykgPT4gc3RyaW5nIH0pIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gdGhpcy5TVEFURS5MT0dHRURfSU4pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnUmVxdWVzdHMgY2FuIG9ubHkgYmUgbWFkZSBpbiB0aGUgJyArIHRoaXMuU1RBVEUuTE9HR0VEX0lOLm5hbWUgKyAnIHN0YXRlLCBub3QgdGhlICcgKyB0aGlzLnN0YXRlLm5hbWUgKyAnIHN0YXRlJztcbiAgICAgIHRoaXMuZGVidWcubG9nKG1lc3NhZ2UpO1xuICAgICAgcmVxdWVzdC5jYWxsYmFjayhuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsICdFSU5WQUxJRFNUQVRFJykpO1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHJlcXVlc3QuY2FsbGJhY2sobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhY2tldFR5cGUgPT09IFRZUEUuU1FMX0JBVENIKSB7XG4gICAgICAgIHRoaXMuaXNTcWxCYXRjaCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzU3FsQmF0Y2ggPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgIHJlcXVlc3QuY29ubmVjdGlvbiEgPSB0aGlzO1xuICAgICAgcmVxdWVzdC5yb3dDb3VudCEgPSAwO1xuICAgICAgcmVxdWVzdC5yb3dzISA9IFtdO1xuICAgICAgcmVxdWVzdC5yc3QhID0gW107XG5cbiAgICAgIGNvbnN0IG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBwYXlsb2FkU3RyZWFtLnVucGlwZShtZXNzYWdlKTtcbiAgICAgICAgcGF5bG9hZFN0cmVhbS5kZXN0cm95KG5ldyBSZXF1ZXN0RXJyb3IoJ0NhbmNlbGVkLicsICdFQ0FOQ0VMJykpO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaWdub3JlIGJpdCBhbmQgZW5kIHRoZSBtZXNzYWdlLlxuICAgICAgICBtZXNzYWdlLmlnbm9yZSA9IHRydWU7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHJlcXVlc3QucGF1c2VkKSB7XG4gICAgICAgICAgLy8gcmVzdW1lIHRoZSByZXF1ZXN0IGlmIGl0IHdhcyBwYXVzZWQgc28gd2UgY2FuIHJlYWQgdGhlIHJlbWFpbmluZyB0b2tlbnNcbiAgICAgICAgICByZXF1ZXN0LnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uY2UoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcblxuICAgICAgdGhpcy5jcmVhdGVSZXF1ZXN0VGltZXIoKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogcGFja2V0VHlwZSwgcmVzZXRDb25uZWN0aW9uOiB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2VJby5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfQ0xJRU5UX1JFUVVFU1QpO1xuXG4gICAgICBtZXNzYWdlLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgICByZXF1ZXN0Lm9uY2UoJ2NhbmNlbCcsIHRoaXMuX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQpO1xuXG4gICAgICAgIHRoaXMucmVzZXRDb25uZWN0aW9uT25OZXh0UmVxdWVzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHBheWxvYWQhLnRvU3RyaW5nKCcgICcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwYXlsb2FkU3RyZWFtID0gUmVhZGFibGUuZnJvbShwYXlsb2FkKTtcbiAgICAgIHBheWxvYWRTdHJlYW0ub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcGF5bG9hZFN0cmVhbS51bnBpcGUobWVzc2FnZSk7XG5cbiAgICAgICAgLy8gT25seSBzZXQgYSByZXF1ZXN0IGVycm9yIGlmIG5vIGVycm9yIHdhcyBzZXQgeWV0LlxuICAgICAgICByZXF1ZXN0LmVycm9yID8/PSBlcnJvcjtcblxuICAgICAgICBtZXNzYWdlLmlnbm9yZSA9IHRydWU7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG4gICAgICB9KTtcbiAgICAgIHBheWxvYWRTdHJlYW0ucGlwZShtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGN1cnJlbnRseSBleGVjdXRlZCByZXF1ZXN0LlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdC5jYW5jZWwoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY29ubmVjdGlvbiB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICogQ2FuIGJlIHVzZWZ1bCBmb3IgY29ubmVjdGlvbiBwb29sIGltcGxlbWVudGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICByZXNldChjYWxsYmFjazogUmVzZXRDYWxsYmFjaykge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzLmdldEluaXRpYWxTcWwoKSwgKGVycikgPT4ge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgIHRoaXMuaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlc2V0Q29ubmVjdGlvbk9uTmV4dFJlcXVlc3QgPSB0cnVlO1xuICAgIHRoaXMuZXhlY1NxbEJhdGNoKHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnNbdGhpcy50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRJc29sYXRpb25MZXZlbFRleHQoaXNvbGF0aW9uTGV2ZWw6IHR5cGVvZiBJU09MQVRJT05fTEVWRUxba2V5b2YgdHlwZW9mIElTT0xBVElPTl9MRVZFTF0pIHtcbiAgICBzd2l0Y2ggKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ3JlYWQgdW5jb21taXR0ZWQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ3JlcGVhdGFibGUgcmVhZCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnc2VyaWFsaXphYmxlJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ3NuYXBzaG90JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAncmVhZCBjb21taXR0ZWQnO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEVycm9yKGVycm9yOiBBZ2dyZWdhdGVFcnJvciB8IENvbm5lY3Rpb25FcnJvcik6IGJvb2xlYW4ge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcikge1xuICAgIGVycm9yID0gZXJyb3IuZXJyb3JzWzBdO1xuICB9XG4gIHJldHVybiAoZXJyb3IgaW5zdGFuY2VvZiBDb25uZWN0aW9uRXJyb3IpICYmICEhZXJyb3IuaXNUcmFuc2llbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbm5lY3Rpb247XG5tb2R1bGUuZXhwb3J0cyA9IENvbm5lY3Rpb247XG5cbkNvbm5lY3Rpb24ucHJvdG90eXBlLlNUQVRFID0ge1xuICBJTklUSUFMSVpFRDoge1xuICAgIG5hbWU6ICdJbml0aWFsaXplZCcsXG4gICAgZXZlbnRzOiB7fVxuICB9LFxuICBDT05ORUNUSU5HOiB7XG4gICAgbmFtZTogJ0Nvbm5lY3RpbmcnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGlzZUNvbm5lY3Rpb24oKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9QUkVMT0dJTjoge1xuICAgIG5hbWU6ICdTZW50UHJlbG9naW4nLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuXG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgbWVzc2FnZSkge1xuICAgICAgICAgIG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFttZXNzYWdlQnVmZmVyLCBkYXRhXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVsb2dpblBheWxvYWQgPSBuZXcgUHJlbG9naW5QYXlsb2FkKG1lc3NhZ2VCdWZmZXIpO1xuICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHByZWxvZ2luUGF5bG9hZC50b1N0cmluZygnICAnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByZWxvZ2luUGF5bG9hZC5mZWRBdXRoUmVxdWlyZWQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZlZEF1dGhSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlbG9naW5QYXlsb2FkLmVuY3J5cHRpb25TdHJpbmcgPT09ICdPTicgfHwgcHJlbG9naW5QYXlsb2FkLmVuY3J5cHRpb25TdHJpbmcgPT09ICdSRVEnKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5vcHRpb25zLmVuY3J5cHQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IoXCJTZXJ2ZXIgcmVxdWlyZXMgZW5jcnlwdGlvbiwgc2V0ICdlbmNyeXB0JyBjb25maWcgb3B0aW9uIHRvIHRydWUuXCIsICdFRU5DUllQVCcpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9UTFNTU0xORUdPVElBVElPTik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1lc3NhZ2VJby5zdGFydFRscyh0aGlzLnNlY3VyZUNvbnRleHRPcHRpb25zLCB0aGlzLnJvdXRpbmdEYXRhPy5zZXJ2ZXIgPz8gdGhpcy5jb25maWcuc2VydmVyLCB0aGlzLmNvbmZpZy5vcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VuZExvZ2luN1BhY2tldCgpO1xuXG4gICAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRpb24gfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICAgIHN3aXRjaCAoYXV0aGVudGljYXRpb24udHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJzpcbiAgICAgICAgICBjYXNlICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZSc6XG4gICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfRkVEQVVUSCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdudGxtJzpcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9MT0dJTjdfV0lUSF9OVExNKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlNFTlRfTE9HSU43X1dJVEhfU1RBTkRBUkRfTE9HSU4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9LFxuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIFJFUk9VVElORzoge1xuICAgIG5hbWU6ICdSZVJvdXRpbmcnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuY2xlYW51cENvbm5lY3Rpb24oQ0xFQU5VUF9UWVBFLlJFRElSRUNUKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgbWVzc2FnZTogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfSxcbiAgICAgIHJlY29ubmVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuQ09OTkVDVElORyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWToge1xuICAgIG5hbWU6ICdUUkFOU0lFTlRfRkFJTFVSRV9SRVRSWScsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jdXJUcmFuc2llbnRSZXRyeUNvdW50Kys7XG4gICAgICB0aGlzLmNsZWFudXBDb25uZWN0aW9uKENMRUFOVVBfVFlQRS5SRVRSWSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIG1lc3NhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgfSxcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9LFxuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlUmV0cnlUaW1lcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9UTFNTU0xORUdPVElBVElPTjoge1xuICAgIG5hbWU6ICdTZW50VExTU1NMTmVnb3RpYXRpb24nLFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9TVEFOREFSRF9MT0dJTjoge1xuICAgIG5hbWU6ICdTZW50TG9naW43V2l0aFN0YW5kYXJkTG9naW4nLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VJby5yZWFkTWVzc2FnZSgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvY2tldEVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVyID0gbmV3IExvZ2luN1Rva2VuSGFuZGxlcih0aGlzKTtcbiAgICAgICAgY29uc3QgdG9rZW5TdHJlYW1QYXJzZXIgPSB0aGlzLmNyZWF0ZVRva2VuU3RyZWFtUGFyc2VyKG1lc3NhZ2UsIGhhbmRsZXIpO1xuXG4gICAgICAgIGF3YWl0IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcblxuICAgICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgICAgaWYgKGhhbmRsZXIucm91dGluZ0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGluZ0RhdGEgPSBoYW5kbGVyLnJvdXRpbmdEYXRhO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5SRVJPVVRJTkcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkxPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sb2dpbkVycm9yKSB7XG4gICAgICAgICAgaWYgKGlzVHJhbnNpZW50RXJyb3IodGhpcy5sb2dpbkVycm9yKSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Zy5sb2coJ0luaXRpYXRpbmcgcmV0cnkgb24gdHJhbnNpZW50IGVycm9yJyk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLlRSQU5TSUVOVF9GQUlMVVJFX1JFVFJZKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgdGhpcy5sb2dpbkVycm9yKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBuZXcgQ29ubmVjdGlvbkVycm9yKCdMb2dpbiBmYWlsZWQuJywgJ0VMT0dJTicpKTtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgfVxuICAgICAgfSkoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9OVExNOiB7XG4gICAgbmFtZTogJ1NlbnRMb2dpbjdXaXRoTlRMTUxvZ2luJyxcbiAgICBlbnRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gbmV3IExvZ2luN1Rva2VuSGFuZGxlcih0aGlzKTtcbiAgICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG5cbiAgICAgICAgICBhd2FpdCBvbmNlKHRva2VuU3RyZWFtUGFyc2VyLCAnZW5kJyk7XG5cbiAgICAgICAgICBpZiAoaGFuZGxlci5sb2dpbkFja1JlY2VpdmVkKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlci5yb3V0aW5nRGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gaGFuZGxlci5yb3V0aW5nRGF0YTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuUkVST1VUSU5HKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkxPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnRsbXBhY2tldCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aGVudGljYXRpb24gPSB0aGlzLmNvbmZpZy5hdXRoZW50aWNhdGlvbiBhcyBOdGxtQXV0aGVudGljYXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgTlRMTVJlc3BvbnNlUGF5bG9hZCh7XG4gICAgICAgICAgICAgIGRvbWFpbjogYXV0aGVudGljYXRpb24ub3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgICAgIHVzZXJOYW1lOiBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnVzZXJOYW1lLFxuICAgICAgICAgICAgICBwYXNzd29yZDogYXV0aGVudGljYXRpb24ub3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgbnRsbXBhY2tldDogdGhpcy5udGxtcGFja2V0XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlSW8uc2VuZE1lc3NhZ2UoVFlQRS5OVExNQVVUSF9QS1QsIHBheWxvYWQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmRlYnVnLnBheWxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLnRvU3RyaW5nKCcgICcpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubnRsbXBhY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9naW5FcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNpZW50RXJyb3IodGhpcy5sb2dpbkVycm9yKSkge1xuICAgICAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnSW5pdGlhdGluZyByZXRyeSBvbiB0cmFuc2llbnQgZXJyb3InKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgdGhpcy5sb2dpbkVycm9yKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCBuZXcgQ29ubmVjdGlvbkVycm9yKCdMb2dpbiBmYWlsZWQuJywgJ0VMT0dJTicpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSkoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9MT0dJTjdfV0lUSF9GRURBVVRIOiB7XG4gICAgbmFtZTogJ1NlbnRMb2dpbjdXaXRoZmVkYXV0aCcsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTG9naW43VG9rZW5IYW5kbGVyKHRoaXMpO1xuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG4gICAgICAgIGF3YWl0IG9uY2UodG9rZW5TdHJlYW1QYXJzZXIsICdlbmQnKTtcbiAgICAgICAgaWYgKGhhbmRsZXIubG9naW5BY2tSZWNlaXZlZCkge1xuICAgICAgICAgIGlmIChoYW5kbGVyLnJvdXRpbmdEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRpbmdEYXRhID0gaGFuZGxlci5yb3V0aW5nRGF0YTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuUkVST1VUSU5HKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU5fU0VORElOR19JTklUSUFMX1NRTCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmVkQXV0aEluZm9Ub2tlbiA9IGhhbmRsZXIuZmVkQXV0aEluZm9Ub2tlbjtcblxuICAgICAgICBpZiAoZmVkQXV0aEluZm9Ub2tlbiAmJiBmZWRBdXRoSW5mb1Rva2VuLnN0c3VybCAmJiBmZWRBdXRoSW5mb1Rva2VuLnNwbikge1xuICAgICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uID0gdGhpcy5jb25maWcuYXV0aGVudGljYXRpb24gYXMgQXp1cmVBY3RpdmVEaXJlY3RvcnlQYXNzd29yZEF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lWbUF1dGhlbnRpY2F0aW9uIHwgQXp1cmVBY3RpdmVEaXJlY3RvcnlNc2lBcHBTZXJ2aWNlQXV0aGVudGljYXRpb24gfCBBenVyZUFjdGl2ZURpcmVjdG9yeVNlcnZpY2VQcmluY2lwYWxTZWNyZXQgfCBBenVyZUFjdGl2ZURpcmVjdG9yeURlZmF1bHRBdXRoZW50aWNhdGlvbjtcbiAgICAgICAgICBjb25zdCB0b2tlblNjb3BlID0gbmV3IFVSTCgnLy5kZWZhdWx0JywgZmVkQXV0aEluZm9Ub2tlbi5zcG4pLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBsZXQgY3JlZGVudGlhbHM7XG5cbiAgICAgICAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnOlxuICAgICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBVc2VybmFtZVBhc3N3b3JkQ3JlZGVudGlhbChcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnRlbmFudElkID8/ICdjb21tb24nLFxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMuY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLnBhc3N3b3JkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nOlxuICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnOlxuICAgICAgICAgICAgICBjb25zdCBtc2lBcmdzID0gYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCA/IFthdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkLCB7fV0gOiBbe31dO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBNYW5hZ2VkSWRlbnRpdHlDcmVkZW50aWFsKC4uLm1zaUFyZ3MpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCc6XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudElkID8geyBtYW5hZ2VkSWRlbnRpdHlDbGllbnRJZDogYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCB9IDoge307XG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gbmV3IERlZmF1bHRBenVyZUNyZWRlbnRpYWwoYXJncyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnOlxuICAgICAgICAgICAgICBjcmVkZW50aWFscyA9IG5ldyBDbGllbnRTZWNyZXRDcmVkZW50aWFsKFxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLm9wdGlvbnMudGVuYW50SWQsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24ub3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi5vcHRpb25zLmNsaWVudFNlY3JldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgdG9rZW5SZXNwb25zZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdG9rZW5SZXNwb25zZSA9IGF3YWl0IGNyZWRlbnRpYWxzLmdldFRva2VuKHRva2VuU2NvcGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICAgICAgICBbbmV3IENvbm5lY3Rpb25FcnJvcignU2VjdXJpdHkgdG9rZW4gY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgb3IgYXV0aG9yaXplZC4nLCAnRUZFREFVVEgnKSwgZXJyXSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCB0aGlzLmxvZ2luRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG5cbiAgICAgICAgICBjb25zdCB0b2tlbiA9IHRva2VuUmVzcG9uc2UudG9rZW47XG4gICAgICAgICAgdGhpcy5zZW5kRmVkQXV0aFRva2VuTWVzc2FnZSh0b2tlbik7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvZ2luRXJyb3IpIHtcbiAgICAgICAgICBpZiAoaXNUcmFuc2llbnRFcnJvcih0aGlzLmxvZ2luRXJyb3IpKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnLmxvZygnSW5pdGlhdGluZyByZXRyeSBvbiB0cmFuc2llbnQgZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuVFJBTlNJRU5UX0ZBSUxVUkVfUkVUUlkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCB0aGlzLmxvZ2luRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcsIG5ldyBDb25uZWN0aW9uRXJyb3IoJ0xvZ2luIGZhaWxlZC4nLCAnRUxPR0lOJykpO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgICB9XG5cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9LFxuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIExPR0dFRF9JTl9TRU5ESU5HX0lOSVRJQUxfU1FMOiB7XG4gICAgbmFtZTogJ0xvZ2dlZEluU2VuZGluZ0luaXRpYWxTcWwnLFxuICAgIGVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VuZEluaXRpYWxTcWwoKTtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgbmV3IEluaXRpYWxTcWxUb2tlbkhhbmRsZXIodGhpcykpO1xuICAgICAgICBhd2FpdCBvbmNlKHRva2VuU3RyZWFtUGFyc2VyLCAnZW5kJyk7XG5cbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZEluaXRpYWxTcWwoKTtcblxuICAgICAgfSkoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgc29ja2V0RXJyb3I6IGZ1bmN0aW9uIHNvY2tldEVycm9yKCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcbiAgICAgIH0sXG4gICAgICBjb25uZWN0VGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuRklOQUwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgTE9HR0VEX0lOOiB7XG4gICAgbmFtZTogJ0xvZ2dlZEluJyxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBTRU5UX0NMSUVOVF9SRVFVRVNUOiB7XG4gICAgbmFtZTogJ1NlbnRDbGllbnRSZXF1ZXN0JyxcbiAgICBlbnRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5tZXNzYWdlSW8ucmVhZE1lc3NhZ2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlcXVlc3QgdGltZXIgaXMgc3RvcHBlZCBvbiBmaXJzdCBkYXRhIHBhY2thZ2VcbiAgICAgICAgdGhpcy5jbGVhclJlcXVlc3RUaW1lcigpO1xuXG4gICAgICAgIGNvbnN0IHRva2VuU3RyZWFtUGFyc2VyID0gdGhpcy5jcmVhdGVUb2tlblN0cmVhbVBhcnNlcihtZXNzYWdlLCBuZXcgUmVxdWVzdFRva2VuSGFuZGxlcih0aGlzLCB0aGlzLnJlcXVlc3QhKSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGFuZCB3ZSBoYXZlIGEgYGNhbmNlbFRpbWVyYFxuICAgICAgICAvLyBkZWZpbmVkLCB3ZSBzZW5kIGEgYXR0ZW50aW9uIG1lc3NhZ2UgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHJlcXVlc3QgbWVzc2FnZSB3YXMgZnVsbHkgc2VudCBvZmYuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGFscmVhZHkgc3RhcnRlZCBjb25zdW1pbmcgdGhlIGN1cnJlbnQgbWVzc2FnZVxuICAgICAgICAvLyAoYnV0IGFsbCB0aGUgdG9rZW4gaGFuZGxlcnMgc2hvdWxkIGJlIG5vLW9wcyksIGFuZFxuICAgICAgICAvLyBuZWVkIHRvIGVuc3VyZSB0aGUgbmV4dCBtZXNzYWdlIGlzIGhhbmRsZWQgYnkgdGhlXG4gICAgICAgIC8vIGBTRU5UX0FUVEVOVElPTmAgc3RhdGUuXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3Q/LmNhbmNlbGVkICYmIHRoaXMuY2FuY2VsVGltZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5TRU5UX0FUVEVOVElPTik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvblJlc3VtZSA9ICgpID0+IHtcbiAgICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5yZXN1bWUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25QYXVzZSA9ICgpID0+IHtcbiAgICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5wYXVzZSgpO1xuXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5vbmNlKCdyZXN1bWUnLCBvblJlc3VtZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0Py5vbigncGF1c2UnLCBvblBhdXNlKTtcblxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLnJlcXVlc3QucGF1c2VkKSB7XG4gICAgICAgICAgb25QYXVzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgdG9rZW5TdHJlYW1QYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kT2ZNZXNzYWdlKTtcblxuICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHRoaXMucmVxdWVzdC5wYXVzZWQpIHtcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgcmVxdWVzdCBpZiBpdCB3YXMgcGF1c2VkIHNvIHdlIGNhbiByZWFkIHRoZSByZW1haW5pbmcgdG9rZW5zXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3QucmVzdW1lKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0Py5yZW1vdmVMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdyZXN1bWUnLCBvblJlc3VtZSk7XG5cbiAgICAgICAgICAvLyBUaGUgYF9jYW5jZWxBZnRlclJlcXVlc3RTZW50YCBjYWxsYmFjayB3aWxsIGhhdmUgc2VudCBhXG4gICAgICAgICAgLy8gYXR0ZW50aW9uIG1lc3NhZ2UsIHNvIG5vdyB3ZSBuZWVkIHRvIGFsc28gc3dpdGNoIHRvXG4gICAgICAgICAgLy8gdGhlIGBTRU5UX0FUVEVOVElPTmAgc3RhdGUgdG8gbWFrZSBzdXJlIHRoZSBhdHRlbnRpb24gYWNrXG4gICAgICAgICAgLy8gbWVzc2FnZSBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LlxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuU0VOVF9BVFRFTlRJT04pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9uRW5kT2ZNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ2NhbmNlbCcsIHRoaXMuX2NhbmNlbEFmdGVyUmVxdWVzdFNlbnQpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ2NhbmNlbCcsIG9uQ2FuY2VsKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3Q/LnJlbW92ZUxpc3RlbmVyKCdwYXVzZScsIG9uUGF1c2UpO1xuICAgICAgICAgIHRoaXMucmVxdWVzdD8ucmVtb3ZlTGlzdGVuZXIoJ3Jlc3VtZScsIG9uUmVzdW1lKTtcblxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHRoaXMuU1RBVEUuTE9HR0VEX0lOKTtcbiAgICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0IGFzIFJlcXVlc3Q7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyAmJiBzcWxSZXF1ZXN0LmVycm9yICYmIHRoaXMuaXNTcWxCYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soc3FsUmVxdWVzdC5lcnJvciwgc3FsUmVxdWVzdC5yb3dDb3VudCwgc3FsUmVxdWVzdC5yb3dzKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0b2tlblN0cmVhbVBhcnNlci5vbmNlKCdlbmQnLCBvbkVuZE9mTWVzc2FnZSk7XG4gICAgICAgIHRoaXMucmVxdWVzdD8ub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuICAgICAgfSkoKTtcblxuICAgIH0sXG4gICAgZXhpdDogZnVuY3Rpb24obmV4dFN0YXRlKSB7XG4gICAgICB0aGlzLmNsZWFyUmVxdWVzdFRpbWVyKCk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY29uc3Qgc3FsUmVxdWVzdCA9IHRoaXMucmVxdWVzdCE7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5GSU5BTCk7XG5cbiAgICAgICAgc3FsUmVxdWVzdC5jYWxsYmFjayhlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgU0VOVF9BVFRFTlRJT046IHtcbiAgICBuYW1lOiAnU2VudEF0dGVudGlvbicsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMubWVzc2FnZUlvLnJlYWRNZXNzYWdlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgQXR0ZW50aW9uVG9rZW5IYW5kbGVyKHRoaXMsIHRoaXMucmVxdWVzdCEpO1xuICAgICAgICBjb25zdCB0b2tlblN0cmVhbVBhcnNlciA9IHRoaXMuY3JlYXRlVG9rZW5TdHJlYW1QYXJzZXIobWVzc2FnZSwgaGFuZGxlcik7XG5cbiAgICAgICAgYXdhaXQgb25jZSh0b2tlblN0cmVhbVBhcnNlciwgJ2VuZCcpO1xuICAgICAgICAvLyAzLjIuNS43IFNlbnQgQXR0ZW50aW9uIFN0YXRlXG4gICAgICAgIC8vIERpc2NhcmQgYW55IGRhdGEgY29udGFpbmVkIGluIHRoZSByZXNwb25zZSwgdW50aWwgd2UgcmVjZWl2ZSB0aGUgYXR0ZW50aW9uIHJlc3BvbnNlXG4gICAgICAgIGlmIChoYW5kbGVyLmF0dGVudGlvblJlY2VpdmVkKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckNhbmNlbFRpbWVyKCk7XG5cbiAgICAgICAgICBjb25zdCBzcWxSZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0ITtcbiAgICAgICAgICB0aGlzLnJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5TVEFURS5MT0dHRURfSU4pO1xuXG4gICAgICAgICAgaWYgKHNxbFJlcXVlc3QuZXJyb3IgJiYgc3FsUmVxdWVzdC5lcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBzcWxSZXF1ZXN0LmVycm9yLmNvZGUgPT09ICdFVElNRU9VVCcpIHtcbiAgICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2soc3FsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNxbFJlcXVlc3QuY2FsbGJhY2sobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0pKCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHNvY2tldEVycm9yOiBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY29uc3Qgc3FsUmVxdWVzdCA9IHRoaXMucmVxdWVzdCE7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh0aGlzLlNUQVRFLkZJTkFMKTtcblxuICAgICAgICBzcWxSZXF1ZXN0LmNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBGSU5BTDoge1xuICAgIG5hbWU6ICdGaW5hbCcsXG4gICAgZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jbGVhbnVwQ29ubmVjdGlvbihDTEVBTlVQX1RZUEUuTk9STUFMKTtcbiAgICB9LFxuICAgIGV2ZW50czoge1xuICAgICAgY29ubmVjdFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nLCBhcyB0aGUgdGltZXIgc2hvdWxkIGJlIGNsZWFuZWQgdXAuXG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIH0sXG4gICAgICBzb2NrZXRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFHQTs7QUFFQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQW9HQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSx3QkFBd0IsR0FBRyxLQUFLLElBQXRDO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEtBQUssSUFBckM7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUMsOEJBQThCLEdBQUcsS0FBSyxJQUE1QztBQUNBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJLElBQW5DO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1DLDhCQUE4QixHQUFHLEdBQXZDO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLElBQUksSUFBaEM7QUFDQTtBQUNBO0FBQ0E7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
|