@bitgo-beta/sdk-coin-ada 2.3.14-beta.1267 → 2.3.14-beta.1268
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,WAAW,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,8 +50,6 @@ const FEE_COEFFICIENTS = {
|
|
|
50
50
|
B_COEFFICIENT: '155381',
|
|
51
51
|
/** Additional safety margin for the fee */
|
|
52
52
|
SAFETY_MARGIN: '440',
|
|
53
|
-
/* Min fee required for token transaction */
|
|
54
|
-
MIN_TOKEN_TRANSACTION_FEE: '1000000',
|
|
55
53
|
};
|
|
56
54
|
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
57
55
|
constructor(_coinConfig) {
|
|
@@ -347,15 +345,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
347
345
|
calculateFee(txDraft) {
|
|
348
346
|
const linearFee = CardanoWasm.LinearFee.new(CardanoWasm.BigNum.from_str(FEE_COEFFICIENTS.A_COEFFICIENT), CardanoWasm.BigNum.from_str(FEE_COEFFICIENTS.B_COEFFICIENT));
|
|
349
347
|
// Calculate the fee based off our dummy transaction
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* In some cases especially with token transactions the calculated fee can be very low than the fee expected from the node
|
|
353
|
-
* So, ensure a minimum fee is always set
|
|
354
|
-
*/
|
|
355
|
-
const minTokenFee = cardano_serialization_lib_nodejs_1.BigNum.from_str(FEE_COEFFICIENTS.MIN_TOKEN_TRANSACTION_FEE);
|
|
356
|
-
if (fee.less_than(minTokenFee)) {
|
|
357
|
-
fee = minTokenFee;
|
|
358
|
-
}
|
|
348
|
+
const fee = CardanoWasm.min_fee(txDraft, linearFee).checked_add(cardano_serialization_lib_nodejs_1.BigNum.from_str(FEE_COEFFICIENTS.SAFETY_MARGIN));
|
|
359
349
|
this._fee = fee;
|
|
360
350
|
}
|
|
361
351
|
prepareAdaTransactionDraft(inputs, outputs, refreshSignatures = false) {
|
|
@@ -709,4 +699,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
709
699
|
}
|
|
710
700
|
}
|
|
711
701
|
exports.TransactionBuilder = TransactionBuilder;
|
|
712
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsbURBUzhCO0FBQzlCLCtDQUFvRztBQUNwRyx1Q0FBb0M7QUFDcEMsaURBQXNEO0FBQ3RELHNGQUF3RTtBQUN4RSwrRkFBa0U7QUFFbEU7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLDZCQUE2QjtJQUM3QixhQUFhLEVBQUUsSUFBSTtJQUNuQiw2QkFBNkI7SUFDN0IsYUFBYSxFQUFFLFFBQVE7SUFDdkIsMkNBQTJDO0lBQzNDLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLDRDQUE0QztJQUM1Qyx5QkFBeUIsRUFBRSxTQUFTO0NBQ3JDLENBQUM7QUFFRixNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUEyQnJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBMUJYLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLG9CQUFlLEdBQWdCLEVBQUUsQ0FBQztRQUNsQyxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFHOUIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUVoQyxpQkFBWSxHQUFZLEVBQUUsQ0FBQztRQUdyQywyQ0FBMkM7UUFDakMscUJBQWdCLEdBQXdCLEVBQUUsQ0FBQztRQUVyRCxxREFBcUQ7UUFDN0Msd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ3BDOzs7YUFHSztRQUNHLDRCQUF1QixHQUF3QixFQUFFLENBQUM7UUFJeEQsSUFBSSxDQUFDLFdB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O0lBQ2xELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGO0FBaHhCRCxnREFneEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBVdGlsc0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBc3NldCwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uSW5wdXQsIFRyYW5zYWN0aW9uT3V0cHV0LCBXaXRoZHJhd2FsIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB1dGlsLCB7IE1JTl9BREFfRk9SX09ORV9BU1NFVCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBCaWdOdW0gfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcblxuLyoqXG4gKiBDb25zdGFudHMgZm9yIHRyYW5zYWN0aW9uIGJ1aWxkaW5nXG4gKi9cbmNvbnN0IEZFRV9DT0VGRklDSUVOVFMgPSB7XG4gIC8qKiBMaW5lYXIgZmVlIHBhcmFtZXRlciBhICovXG4gIEFfQ09FRkZJQ0lFTlQ6ICc0NCcsXG4gIC8qKiBMaW5lYXIgZmVlIHBhcmFtZXRlciBiICovXG4gIEJfQ09FRkZJQ0lFTlQ6ICcxNTUzODEnLFxuICAvKiogQWRkaXRpb25hbCBzYWZldHkgbWFyZ2luIGZvciB0aGUgZmVlICovXG4gIFNBRkVUWV9NQVJHSU46ICc0NDAnLFxuICAvKiBNaW4gZmVlIHJlcXVpcmVkIGZvciB0b2tlbiB0cmFuc2FjdGlvbiAqL1xuICBNSU5fVE9LRU5fVFJBTlNBQ1RJT05fRkVFOiAnMTAwMDAwMCcsXG59O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb24hOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zaWduZXJzOiBLZXlQYWlyW10gPSBbXTtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbklucHV0czogVHJhbnNhY3Rpb25JbnB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25PdXRwdXRzOiBUcmFuc2FjdGlvbk91dHB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfaW5pdFNpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9jaGFuZ2VBZGRyZXNzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc2VuZGVyQmFsYW5jZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3R0bCA9IDA7XG4gIHByb3RlY3RlZCBfY2VydHM6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF93aXRoZHJhd2FsczogV2l0aGRyYXdhbFtdID0gW107XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBwcm90ZWN0ZWQgX211bHRpQXNzZXRzOiBBc3NldFtdID0gW107XG4gIC8qKiBBZGRyZXNzIG9mIHRoZSB0cmFuc2FjdGlvbiByZWNpcGllbnQgKi9cbiAgcHJvdGVjdGVkIF9yZWNpcGllbnRBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBNYXAgb2Ygc2VuZGVyJ3MgYXNzZXRzIGJ5IGFzc2V0IG5hbWUgKi9cbiAgcHJvdGVjdGVkIF9zZW5kZXJBc3NldExpc3Q6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgcHJpdmF0ZSBfZmVlOiBCaWdOdW07XG4gIC8qKiBGbGFnIGluZGljYXRpbmcgaWYgdGhpcyBpcyBhIHRva2VuIHRyYW5zYWN0aW9uICovXG4gIHByaXZhdGUgX2lzVG9rZW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAvKiogRGVlcCBjbG9uZSBvZiBfc2VuZGVyQXNzZXRMaXN0IC0gZm9yIG1hbmlwdWxhdGluZyBkdXJpbmcgdHdvIGl0ZXJhdGlvbnNcbiAgICogICAtIG9uZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGZlZVxuICAgKiAgIC0gb25lIGZvciB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGJ1aWxkIHdpdGggdGhlIGNhbGN1bGF0ZWQgZmVlXG4gICAqICovXG4gIHByaXZhdGUgX211dGFibGVTZW5kZXJBc3NldExpc3Q6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fZmVlID0gQmlnTnVtLnplcm8oKTtcbiAgfVxuXG4gIGlucHV0KGk6IFRyYW5zYWN0aW9uSW5wdXQpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbklucHV0cy5wdXNoKGkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3V0cHV0KG86IFRyYW5zYWN0aW9uT3V0cHV0KTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLnB1c2gobyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3NldHMoYTogQXNzZXQpOiB0aGlzIHtcbiAgICB0aGlzLl9tdWx0aUFzc2V0cy5wdXNoKGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdHRsKHQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3R0bCA9IHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY2hhbmdlIGFkZHJlc3MgYW5kIGlucHV0IGJhbGFuY2VzIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGFkZHIgLSBUaGUgYWRkcmVzcyB3aGVyZSBjaGFuZ2Ugd2lsbCBiZSBzZW50XG4gICAqIEBwYXJhbSB0b3RhbElucHV0QmFsYW5jZSAtIFRoZSB0b3RhbCBBREEgaW5wdXQgYmFsYW5jZSBpbiBMb3ZlbGFjZVxuICAgKiBAcGFyYW0gaW5wdXRBc3NldExpc3QgLSBPcHRpb25hbCBtYXAgb2YgdG9rZW4gYXNzZXRzIGluIHRoZSBpbnB1dFxuICAgKi9cbiAgY2hhbmdlQWRkcmVzcyhhZGRyOiBzdHJpbmcsIHRvdGFsSW5wdXRCYWxhbmNlOiBzdHJpbmcsIGlucHV0QXNzZXRMaXN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IHRoaXMge1xuICAgIHRoaXMuX2NoYW5nZUFkZHJlc3MgPSBhZGRyO1xuICAgIHRoaXMuX3NlbmRlckJhbGFuY2UgPSB0b3RhbElucHV0QmFsYW5jZTtcbiAgICB0aGlzLl9zZW5kZXJBc3NldExpc3QgPSBpbnB1dEFzc2V0TGlzdCA/PyB7fTtcbiAgICB0aGlzLnNldE11dGFibGVTZW5kZXJBc3NldExpc3QoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldE11dGFibGVTZW5kZXJBc3NldExpc3QoKSB7XG4gICAgdGhpcy5fbXV0YWJsZVNlbmRlckFzc2V0TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5fc2VuZGVyQXNzZXRMaXN0KSk7XG4gIH1cblxuICBmZWUoZmVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mZWUgPSBCaWdOdW0uZnJvbV9zdHIoZmVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGlzIHRyYW5zYWN0aW9uIGFzIGEgdG9rZW4gdHJhbnNhY3Rpb25cbiAgICogRW5hYmxlcyBzcGVjaWFsIGhhbmRsaW5nIGZvciB0b2tlbiB0cmFuc2ZlcnNcbiAgICovXG4gIGlzVG9rZW5UcmFuc2FjdGlvbigpIHtcbiAgICB0aGlzLl9pc1Rva2VuVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgY29uc3QgdHhuQm9keSA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4bkJvZHkuaW5wdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0eG5Cb2R5LmlucHV0cygpLmdldChpKTtcbiAgICAgIHRoaXMuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiBpbnB1dC5pbmRleCgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhuQm9keS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHhuQm9keS5vdXRwdXRzKCkuZ2V0KGkpO1xuICAgICAgdGhpcy5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQoKS5jb2luKCkudG9fc3RyKCksXG4gICAgICAgIG11bHRpQXNzZXRzOiBvdXRwdXQuYW1vdW50KCkubXVsdGlhc3NldCgpIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eG5Cb2R5LmNlcnRzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY2VydHMgPSB0eG5Cb2R5LmNlcnRzKCkgYXMgQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZXJ0cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIHRoaXMuX2NlcnRzLnB1c2goY2VydHMuZ2V0KGkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHhuQm9keS53aXRoZHJhd2FscygpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gdHhuQm9keS53aXRoZHJhd2FscygpIGFzIENhcmRhbm9XYXNtLldpdGhkcmF3YWxzO1xuICAgICAgY29uc3Qga2V5cyA9IHdpdGhkcmF3YWxzLmtleXMoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBrZXlzLmdldChpKSBhcyBDYXJkYW5vV2FzbS5SZXdhcmRBZGRyZXNzO1xuICAgICAgICBjb25zdCByZXdhcmQgPSB3aXRoZHJhd2Fscy5nZXQocmV3YXJkQWRkcmVzcykgYXMgQ2FyZGFub1dhc20uQmlnTnVtO1xuICAgICAgICB0aGlzLl93aXRoZHJhd2Fscy5wdXNoKHsgc3Rha2VBZGRyZXNzOiByZXdhcmRBZGRyZXNzLnRvX2FkZHJlc3MoKS50b19iZWNoMzIoKSwgdmFsdWU6IHJld2FyZC50b19zdHIoKSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl90dGwgPSB0eC50cmFuc2FjdGlvbi5ib2R5KCkudHRsKCkgYXMgbnVtYmVyO1xuICAgIHRoaXMuX2ZlZSA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKS5mZWUoKTtcblxuICAgIGlmICh0eC50cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkpIHtcbiAgICAgIGNvbnN0IHZrZXlzID0gdHgudHJhbnNhY3Rpb24ud2l0bmVzc19zZXQoKS52a2V5cygpISBhcyBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2a2V5cy5sZW4oKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZrZXkgPSB2a2V5cy5nZXQoaSk7XG4gICAgICAgIHRoaXMuX2luaXRTaWduYXR1cmVzLnB1c2goe1xuICAgICAgICAgIHB1YmxpY0tleTogeyBwdWI6IHZrZXkudmtleSgpLnB1YmxpY19rZXkoKS50b19oZXgoKSB9LFxuICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20odmtleS5zaWduYXR1cmUoKS50b19oZXgoKSwgJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgdHJhbnNhY3Rpb24gdGhhdCBpbmNsdWRlcyB0b2tlbiBhc3NldHNcbiAgICogQHJldHVybnMgVGhlIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NUb2tlbkJ1aWxkKCk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBpbnB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0cy5uZXcoKTtcbiAgICBsZXQgb3V0cHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0cy5uZXcoKTtcbiAgICB0aGlzLmFkZElucHV0cyhpbnB1dHMpO1xuICAgIC8vIEZlZSBpcyBuZXZlciBzZXQgc28gZmFyIGZyb20gSU1TXG4gICAgaWYgKHRoaXMuX2ZlZS5pc196ZXJvKCkpIHtcbiAgICAgIHRoaXMuYWRkT3V0cHV0cyhvdXRwdXRzKTtcbiAgICAgIGNvbnN0IHR4RHJhZnQgPSB0aGlzLnByZXBhcmVBZGFUcmFuc2FjdGlvbkRyYWZ0KGlucHV0cywgb3V0cHV0cywgZmFsc2UpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVGZWUodHhEcmFmdCk7XG4gICAgICB0aGlzLnNldEZlZUluVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgb3V0cHV0cyB0byBhZGQgdGhlbSBiYWNrIHdpdGggdGhlIGNvcnJlY3QgY2hhbmdlXG4gICAgb3V0cHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0cy5uZXcoKTtcbiAgICB0aGlzLnNldE11dGFibGVTZW5kZXJBc3NldExpc3QoKTtcbiAgICB0aGlzLmFkZE91dHB1dHMob3V0cHV0cyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udHJhbnNhY3Rpb24gPSB0aGlzLnByZXBhcmVBZGFUcmFuc2FjdGlvbkRyYWZ0KGlucHV0cywgb3V0cHV0cywgdHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0cmFuc2FjdGlvbiBpbnB1dHMgdG8gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBpbnB1dHMgLSBUaGUgaW5wdXRzIGNvbGxlY3Rpb24gdG8gYWRkIHRvXG4gICAqL1xuICBwcml2YXRlIGFkZElucHV0cyhpbnB1dHMpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbklucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgaW5wdXRzLmFkZChcbiAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25JbnB1dC5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25IYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQsICdoZXgnKSksXG4gICAgICAgICAgaW5wdXQudHJhbnNhY3Rpb25faW5kZXhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG91dHB1dHMgdG8gdGhlIHRyYW5zYWN0aW9uIGluY2x1ZGluZyB0b2tlbiBvdXRwdXRzIGFuZCBjaGFuZ2VcbiAgICogQHBhcmFtIG91dHB1dHMgLSBUaGUgb3V0cHV0cyBjb2xsZWN0aW9uIHRvIGFkZCB0b1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRPdXRwdXRzKG91dHB1dHMpIHtcbiAgICBjb25zdCB1dHhvQmFsYW5jZSA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9zZW5kZXJCYWxhbmNlKTsgLy8gVG90YWwgVVRYTyBiYWxhbmNlXG4gICAgY29uc3QgY2hhbmdlID0gdXR4b0JhbGFuY2UuY2hlY2tlZF9zdWIodGhpcy5fZmVlKTtcbiAgICBjb25zdCBjaGFuZ2VBZnRlclJlY2VpdmVyRGVkdWN0aW9ucyA9IHRoaXMuYWRkUmVjZWl2ZXJPdXRwdXRzKG91dHB1dHMsIGNoYW5nZSk7XG4gICAgdGhpcy5hZGRDaGFuZ2VPdXRwdXQoY2hhbmdlQWZ0ZXJSZWNlaXZlckRlZHVjdGlvbnMsIG91dHB1dHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcmVjZWl2ZXIgb3V0cHV0cyB0byB0aGUgdHJhbnNhY3Rpb24gYW5kIGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmluZyBjaGFuZ2VcbiAgICogQHBhcmFtIG91dHB1dHMgLSBUcmFuc2FjdGlvbiBvdXRwdXRzIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIGNoYW5nZSAtIEN1cnJlbnQgY2hhbmdlIGFtb3VudCBpbiBBREFcbiAgICogQHJldHVybnMgUmVtYWluaW5nIGNoYW5nZSBhZnRlciBhZGRpbmcgcmVjZWl2ZXIgb3V0cHV0c1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRSZWNlaXZlck91dHB1dHMob3V0cHV0cywgY2hhbmdlKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgaWYgKCFvdXRwdXQuYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG91dHB1dDogbWlzc2luZyBhZGRyZXNzJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY2VpdmVyQWRkcmVzcyA9IG91dHB1dC5hZGRyZXNzO1xuICAgICAgY29uc3QgcmVjZWl2ZXJBbW91bnQgPSBvdXRwdXQuYW1vdW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWNlaXZlckFtb3VudEJOID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHJlY2VpdmVyQW1vdW50KTtcbiAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfc3ViKHJlY2VpdmVyQW1vdW50Qk4pO1xuXG4gICAgICAgIGlmIChjaGFuZ2UubGVzc190aGFuKENhcmRhbm9XYXNtLkJpZ051bS56ZXJvKCkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAgICdJbnN1ZmZpY2llbnQgZnVuZHM6IG5vdCBlbm91Z2ggQURBIHRvIGNvdmVyIHJlY2VpdmVyIG91dHB1dCBhbW91bnRzIGFuZCBmZWVzJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtdWx0aUFzc2V0cyA9IG91dHB1dC5tdWx0aUFzc2V0cyBhcyBBc3NldDtcbiAgICAgICAgaWYgKG11bHRpQXNzZXRzKSB7XG4gICAgICAgICAgY29uc3QgcG9saWN5SWQgPSBtdWx0aUFzc2V0cy5wb2xpY3lfaWQ7XG4gICAgICAgICAgY29uc3QgYXNzZXROYW1lID0gbXVsdGlBc3NldHMuYXNzZXRfbmFtZTtcbiAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IG11bHRpQXNzZXRzLnF1YW50aXR5O1xuICAgICAgICAgIGNvbnN0IGZpbmdlcnByaW50ID0gbXVsdGlBc3NldHMuZmluZ2VycHJpbnQgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgY29uc3QgY3VycmVudFF0eSA9IHRoaXMuX211dGFibGVTZW5kZXJBc3NldExpc3RbZmluZ2VycHJpbnRdLnF1YW50aXR5O1xuICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1F0eSA9IEJpZ0ludChjdXJyZW50UXR5KSAtIEJpZ0ludChxdWFudGl0eSk7XG4gICAgICAgICAgdGhpcy5fbXV0YWJsZVNlbmRlckFzc2V0TGlzdFtmaW5nZXJwcmludF0ucXVhbnRpdHkgPSAocmVtYWluaW5nUXR5ID4gMG4gPyByZW1haW5pbmdRdHkgOiAwbikudG9TdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fbXV0YWJsZVNlbmRlckFzc2V0TGlzdFtmaW5nZXJwcmludF0ucXVhbnRpdHkpLmlzX3plcm8oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW5zdWZmaWNpZW50IHF0eTogbm90IGVub3VnaCB0b2tlbiBxdHkgdG8gY292ZXIgcmVjZWl2ZXIgb3V0cHV0Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yQXNzZXRPdXRwdXQgPSB0aGlzLmFkZFRva2Vuc1RvT3V0cHV0KGNoYW5nZSwgb3V0cHV0cywgcmVjZWl2ZXJBZGRyZXNzLCB7XG4gICAgICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICAgICAgYXNzZXRfbmFtZTogYXNzZXROYW1lLFxuICAgICAgICAgICAgcXVhbnRpdHksXG4gICAgICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihtaW5BbW91bnROZWVkZWRGb3JBc3NldE91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEVycm9yIHByb2Nlc3Npbmcgb3V0cHV0OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2hhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdG9rZW5zIHRvIGEgdHJhbnNhY3Rpb24gb3V0cHV0XG4gICAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgY3VycmVudCBjaGFuZ2UgYW1vdW50IGluIExvdmVsYWNlXG4gICAqIEBwYXJhbSBvdXRwdXRzIC0gVGhlIG91dHB1dHMgY29sbGVjdGlvbiB0byBhZGQgdG9cbiAgICogQHBhcmFtIGFkZHJlc3MgLSBUaGUgcmVjaXBpZW50IGFkZHJlc3NcbiAgICogQHBhcmFtIGFzc2V0IC0gVGhlIGFzc2V0IHRvIGFkZFxuICAgKiBAcmV0dXJucyBUaGUgbWluaW11bSBBREEgYW1vdW50IG5lZWRlZCBmb3IgdGhpcyBhc3NldCBvdXRwdXRcbiAgICovXG4gIHByaXZhdGUgYWRkVG9rZW5zVG9PdXRwdXQoY2hhbmdlOiBCaWdOdW0sIG91dHB1dHM6IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0cywgYWRkcmVzcywgYXNzZXQ6IEFzc2V0KTogQmlnTnVtIHtcbiAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihNSU5fQURBX0ZPUl9PTkVfQVNTRVQpO1xuICAgIGlmIChjaGFuZ2UubGVzc190aGFuKG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEluc3VmZmljaWVudCBmdW5kczogbmVlZCBhIG1pbmltdW0gb2YgJHtNSU5fQURBX0ZPUl9PTkVfQVNTRVR9IGxvdmVsYWNlIHBlciBvdXRwdXQgdG8gY29uc3RydWN0IHRva2VuIHRyYW5zYWN0aW9uc2BcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRUb2tlbnMoYXNzZXQsIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LCBvdXRwdXRzLCBhZGRyZXNzKTtcbiAgICByZXR1cm4gbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRva2VuIG91dHB1dHMgZm9yIGEgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGFzc2V0IC0gVGhlIGFzc2V0IHRvIGluY2x1ZGUgaW4gdGhlIG91dHB1dFxuICAgKiBAcGFyYW0gbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQgLSBNaW5pbXVtIEFEQSByZXF1aXJlZCBmb3IgdGhpcyBhc3NldCBvdXRwdXRcbiAgICogQHBhcmFtIG91dHB1dHMgLSBUcmFuc2FjdGlvbiBvdXRwdXRzIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIGFkZHJlc3MgLSBSZWNpcGllbnQgYWRkcmVzc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFRva2Vucyhhc3NldDogQXNzZXQsIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LCBvdXRwdXRzLCBhZGRyZXNzKSB7XG4gICAgbGV0IHR4T3V0cHV0QnVpbGRlciA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0QnVpbGRlci5uZXcoKTtcbiAgICBjb25zdCB0b0FkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3MoYWRkcmVzcyk7XG4gICAgdHhPdXRwdXRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLndpdGhfYWRkcmVzcyh0b0FkZHJlc3MpO1xuICAgIGxldCB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIubmV4dCgpO1xuICAgIGNvbnN0IGFzc2V0TmFtZSA9IENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNzZXQuYXNzZXRfbmFtZSwgJ2hleCcpKTtcbiAgICBjb25zdCBwb2xpY3lJZCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShhc3NldC5wb2xpY3lfaWQsICdoZXgnKSk7XG4gICAgY29uc3QgbXVsdGlBc3NldCA9IENhcmRhbm9XYXNtLk11bHRpQXNzZXQubmV3KCk7XG4gICAgY29uc3QgYXNzZXRzID0gQ2FyZGFub1dhc20uQXNzZXRzLm5ldygpO1xuICAgIGFzc2V0cy5pbnNlcnQoYXNzZXROYW1lLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoYXNzZXQucXVhbnRpdHkpKTtcbiAgICBtdWx0aUFzc2V0Lmluc2VydChwb2xpY3lJZCwgYXNzZXRzKTtcblxuICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LCBtdWx0aUFzc2V0KTtcblxuICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgb3V0cHV0cy5hZGQodHhPdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2Ugb3V0cHV0IHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gY2hhbmdlIC0gVGhlIGNoYW5nZSBhbW91bnQgaW4gTG92ZWxhY2VcbiAgICogQHBhcmFtIG91dHB1dHMgLSBUaGUgb3V0cHV0cyBjb2xsZWN0aW9uIHRvIGFkZCB0b1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRDaGFuZ2VPdXRwdXQoY2hhbmdlLCBvdXRwdXRzKSB7XG4gICAgY29uc3QgY2hhbmdlQWRkcmVzcyA9IHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyh0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9tdXRhYmxlU2VuZGVyQXNzZXRMaXN0KS5mb3JFYWNoKChmaW5nZXJwcmludCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXQgPSB0aGlzLl9tdXRhYmxlU2VuZGVyQXNzZXRMaXN0W2ZpbmdlcnByaW50XTtcbiAgICAgIGNvbnN0IGNoYW5nZVF0eSA9IGFzc2V0LnF1YW50aXR5O1xuICAgICAgY29uc3QgcG9saWN5SWQgPSBhc3NldC5wb2xpY3lfaWQ7XG4gICAgICBjb25zdCBhc3NldE5hbWUgPSBhc3NldC5hc3NldF9uYW1lO1xuXG4gICAgICBpZiAoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKGNoYW5nZVF0eSkuaXNfemVybygpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yQXNzZXRPdXRwdXQgPSB0aGlzLmFkZFRva2Vuc1RvT3V0cHV0KGNoYW5nZSwgb3V0cHV0cywgdGhpcy5fY2hhbmdlQWRkcmVzcywge1xuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc3NldE5hbWUsXG4gICAgICAgIHF1YW50aXR5OiBjaGFuZ2VRdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSk7XG4gICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9zdWIobWluQW1vdW50TmVlZGVkRm9yQXNzZXRPdXRwdXQpO1xuICAgIH0pO1xuICAgIGlmICghY2hhbmdlLmlzX3plcm8oKSkge1xuICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNhbGN1bGF0ZWQgZmVlIGluIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzZXRGZWVJblRyYW5zYWN0aW9uKCkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmZlZSh0aGlzLl9mZWUudG9fc3RyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHRyYW5zYWN0aW9uIGZlZSBiYXNlZCBvbiB0cmFuc2FjdGlvbiBzaXplXG4gICAqIEBwYXJhbSB0eERyYWZ0IC0gRHJhZnQgdHJhbnNhY3Rpb24gdG8gY2FsY3VsYXRlIGZlZSBmb3JcbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlRmVlKHR4RHJhZnQpIHtcbiAgICBjb25zdCBsaW5lYXJGZWUgPSBDYXJkYW5vV2FzbS5MaW5lYXJGZWUubmV3KFxuICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKEZFRV9DT0VGRklDSUVOVFMuQV9DT0VGRklDSUVOVCksXG4gICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoRkVFX0NPRUZGSUNJRU5UUy5CX0NPRUZGSUNJRU5UKVxuICAgICk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGZlZSBiYXNlZCBvZmYgb3VyIGR1bW15IHRyYW5zYWN0aW9uXG4gICAgbGV0IGZlZSA9IENhcmRhbm9XYXNtLm1pbl9mZWUodHhEcmFmdCwgbGluZWFyRmVlKS5jaGVja2VkX2FkZChCaWdOdW0uZnJvbV9zdHIoRkVFX0NPRUZGSUNJRU5UUy5TQUZFVFlfTUFSR0lOKSk7XG4gICAgLyoqXG4gICAgICogSW4gc29tZSBjYXNlcyBlc3BlY2lhbGx5IHdpdGggdG9rZW4gdHJhbnNhY3Rpb25zIHRoZSBjYWxjdWxhdGVkIGZlZSBjYW4gYmUgdmVyeSBsb3cgdGhhbiB0aGUgZmVlIGV4cGVjdGVkIGZyb20gdGhlIG5vZGVcbiAgICAgKiBTbywgZW5zdXJlIGEgbWluaW11bSBmZWUgaXMgYWx3YXlzIHNldFxuICAgICAqL1xuICAgIGNvbnN0IG1pblRva2VuRmVlID0gQmlnTnVtLmZyb21fc3RyKEZFRV9DT0VGRklDSUVOVFMuTUlOX1RPS0VOX1RSQU5TQUNUSU9OX0ZFRSk7XG4gICAgaWYgKGZlZS5sZXNzX3RoYW4obWluVG9rZW5GZWUpKSB7XG4gICAgICBmZWUgPSBtaW5Ub2tlbkZlZTtcbiAgICB9XG4gICAgdGhpcy5fZmVlID0gZmVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQWRhVHJhbnNhY3Rpb25EcmFmdChpbnB1dHMsIG91dHB1dHMsIHJlZnJlc2hTaWduYXR1cmVzID0gZmFsc2UpIHtcbiAgICBjb25zdCB0eEJvZHkgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuICAgIHR4Qm9keS5zZXRfdHRsKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl90dGwudG9TdHJpbmcoKSkpO1xuICAgIGNvbnN0IHR4SGFzaCA9IENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHhCb2R5KTtcblxuICAgIC8vIHdlIGFkZCB3aXRuZXNzZXMgb25jZSBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBzaWduZXJzIGZvciBjYWxjdWxhdGluZyB0aGUgZmVlXG4gICAgY29uc3Qgd2l0bmVzc1NldCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uV2l0bmVzc1NldC5uZXcoKTtcbiAgICBjb25zdCB2a2V5V2l0bmVzc2VzID0gQ2FyZGFub1dhc20uVmtleXdpdG5lc3Nlcy5uZXcoKTtcbiAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKFxuICAgICAgICB0eEhhc2gsXG4gICAgICAgIENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZnJvbV9ub3JtYWxfYnl0ZXMoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpXG4gICAgICApO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgIH0pO1xuICAgIGlmIChyZWZyZXNoU2lnbmF0dXJlcykge1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHRoaXMuZ2V0QWxsU2lnbmF0dXJlcygpLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpKTtcbiAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQoQ2FyZGFub1dhc20uVmtleXdpdG5lc3MubmV3KHZrZXksIGVkMjU1U2lnKSk7XG4gICAgICAvLyBSZXN0b3JpbmcgdGhlIGJlaGF2aW91ciBmcm9tIHRoZSBvcmlnaW5hbCBidWlsZEltcGxlbWVudGF0aW9uXG4gICAgICBpZiAocmVmcmVzaFNpZ25hdHVyZXMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlLnB1c2goc2lnbmF0dXJlLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghcmVmcmVzaFNpZ25hdHVyZXMgJiYgdmtleVdpdG5lc3Nlcy5sZW4oKSA9PT0gMCkge1xuICAgICAgY29uc3QgcHJ2ID0gQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5nZW5lcmF0ZV9lZDI1NTE5KCk7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKHR4SGFzaCwgcHJ2KTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHdpdG5lc3NTZXQuc2V0X3ZrZXlzKHZrZXlXaXRuZXNzZXMpO1xuXG4gICAgLy8gYWRkIGluIGNlcnRpZmljYXRlcyB0byBnZXQgbW9jayBzaXplXG4gICAgY29uc3QgZHJhZnRDZXJ0cyA9IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcy5uZXcoKTtcbiAgICBmb3IgKGNvbnN0IGNlcnQgb2YgdGhpcy5fY2VydHMpIHtcbiAgICAgIGRyYWZ0Q2VydHMuYWRkKGNlcnQpO1xuICAgIH1cbiAgICB0eEJvZHkuc2V0X2NlcnRzKGRyYWZ0Q2VydHMpO1xuXG4gICAgY29uc3QgdHhEcmFmdCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eEJvZHksIHdpdG5lc3NTZXQpO1xuICAgIHJldHVybiB0eERyYWZ0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAodGhpcy5faXNUb2tlblRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVG9rZW5CdWlsZCgpO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0cy5uZXcoKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbklucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgaW5wdXRzLmFkZChcbiAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25JbnB1dC5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25IYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQsICdoZXgnKSksXG4gICAgICAgICAgaW5wdXQudHJhbnNhY3Rpb25faW5kZXhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBsZXQgb3V0cHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0cy5uZXcoKTtcbiAgICBsZXQgdG90YWxBbW91bnRUb1NlbmQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uemVybygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihvdXRwdXQuYW1vdW50KTtcbiAgICAgIG91dHB1dHMuYWRkKFxuICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcodXRpbC5nZXRXYWxsZXRBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSwgQ2FyZGFub1dhc20uVmFsdWUubmV3KGFtb3VudCkpXG4gICAgICApO1xuICAgICAgdG90YWxBbW91bnRUb1NlbmQgPSB0b3RhbEFtb3VudFRvU2VuZC5jaGVja2VkX2FkZChhbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2ZlZS5pc196ZXJvKCkpIHtcbiAgICAgIC8vIGVzdGltYXRlIGZlZVxuICAgICAgLy8gYWRkIGV4dHJhIG91dHB1dCBmb3IgdGhlIGNoYW5nZVxuICAgICAgaWYgKHRoaXMuX2NoYW5nZUFkZHJlc3MgJiYgdGhpcy5fc2VuZGVyQmFsYW5jZSkge1xuICAgICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gdXRpbC5nZXRXYWxsZXRBZGRyZXNzKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgICBjb25zdCB1dHhvQmFsYW5jZSA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9zZW5kZXJCYWxhbmNlKTtcblxuICAgICAgICBjb25zdCBhZGp1c3RtZW50ID0gQmlnTnVtLmZyb21fc3RyKCcyMDAwMDAwJyk7XG4gICAgICAgIGxldCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpLmNoZWNrZWRfc3ViKHRvdGFsQW1vdW50VG9TZW5kKTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpIHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9zdWIoYWRqdXN0bWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKSB7XG4gICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKGFkanVzdG1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcgfHwgdGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSkge1xuICAgICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdG90YWxBbW91bnRUb1NlbmQgaXMgMCwgaXRzIGNvbnNvbGlkYXRpb25cbiAgICAgICAgaWYgKHRvdGFsQW1vdW50VG9TZW5kLnRvX3N0cigpID09ICcwJykge1xuICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIG11bHRpLWFzc2V0IGNvbnNvbGlkYXRpb25cbiAgICAgICAgICBpZiAodGhpcy5fbXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdG90YWxOdW1iZXJPZkFzc2V0cyA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9tdWx0aUFzc2V0cy5sZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihNSU5fQURBX0ZPUl9PTkVfQVNTRVQpO1xuICAgICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMgPVxuICAgICAgICAgICAgICBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dC5jaGVja2VkX211bCh0b3RhbE51bWJlck9mQXNzZXRzKTtcblxuICAgICAgICAgICAgaWYgKCFjaGFuZ2UubGVzc190aGFuKG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzKSkge1xuICAgICAgICAgICAgICB0aGlzLl9tdWx0aUFzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB0eE91dHB1dEJ1aWxkZXIgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dEJ1aWxkZXIubmV3KCk7XG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlQWRkcmVzcyBpcyB0aGUgcm9vdCBhZGRyZXNzLCB3aGljaCBpcyB3aGVyZSB3ZSB3YW50IHRoZSB0b2tlbnMgYXNzZXRzIHRvIGJlIHNlbnQgdG9cbiAgICAgICAgICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3ModGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgdHhPdXRwdXRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLndpdGhfYWRkcmVzcyh0b0FkZHJlc3MpO1xuICAgICAgICAgICAgICAgIGxldCB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNzZXQuYXNzZXRfbmFtZSwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2xpY3lJZCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShhc3NldC5wb2xpY3lfaWQsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXVsdGlBc3NldCA9IENhcmRhbm9XYXNtLk11bHRpQXNzZXQubmV3KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzZXRzID0gQ2FyZGFub1dhc20uQXNzZXRzLm5ldygpO1xuICAgICAgICAgICAgICAgIGFzc2V0cy5pbnNlcnQoYXNzZXROYW1lLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoYXNzZXQucXVhbnRpdHkpKTtcbiAgICAgICAgICAgICAgICBtdWx0aUFzc2V0Lmluc2VydChwb2xpY3lJZCwgYXNzZXRzKTtcblxuICAgICAgICAgICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KFxuICAgICAgICAgICAgICAgICAgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsXG4gICAgICAgICAgICAgICAgICBtdWx0aUFzc2V0XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgICAgICAgb3V0cHV0cy5hZGQodHhPdXRwdXQpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAvLyBmaW5hbGx5IHNlbmQgdGhlIHJlbWFpbmluZyBBREEgaW4gaXRzIG93biBvdXRwdXRcbiAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nT3V0cHV0QW1vdW50ID0gY2hhbmdlLmNoZWNrZWRfc3ViKG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzKTtcbiAgICAgICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgICAgIGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgICAgICAgQ2FyZGFub1dhc20uVmFsdWUubmV3KHJlbWFpbmluZ091dHB1dEFtb3VudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRva2VucyB0byBjb25zb2xpZGF0ZSwgeW91IG9ubHkgaGF2ZSAxIG91dHB1dCB3aGljaCBpcyBBREEgYWxvbmVcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGEgY29uc29saWRhdGUgcmVxdWVzdCwgd2hhdGV2ZXIgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgc2VudCBiYWNrIHRvIHRoZSByb290YWRkcmVzcyBpcyBhZGRlZCBhcyBhIHNlcGFyYXRlIG91dHB1dCBoZXJlXG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR4Qm9keSA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uQm9keS5uZXdfdHhfYm9keShpbnB1dHMsIG91dHB1dHMsIHRoaXMuX2ZlZSk7XG4gICAgICB0eEJvZHkuc2V0X3R0bChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fdHRsLnRvU3RyaW5nKCkpKTtcbiAgICAgIGNvbnN0IHR4SGFzaCA9IENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHhCb2R5KTtcblxuICAgICAgLy8gd2UgYWRkIHdpdG5lc3NlcyBvbmNlIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgYXBwcm9wcmlhdGUgYW1vdW50IG9mIHNpZ25lcnMgZm9yIGNhbGN1bGF0aW5nIHRoZSBmZWVcbiAgICAgIGNvbnN0IHdpdG5lc3NTZXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbldpdG5lc3NTZXQubmV3KCk7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzc2VzID0gQ2FyZGFub1dhc20uVmtleXdpdG5lc3Nlcy5uZXcoKTtcbiAgICAgIHRoaXMuX3NpZ25lcnMuZm9yRWFjaCgoa2V5UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKFxuICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmZyb21fbm9ybWFsX2J5dGVzKEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKVxuICAgICAgICApO1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ2V0QWxsU2lnbmF0dXJlcygpLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCB2a2V5ID0gQ2FyZGFub1dhc20uVmtleS5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZWQyNTVTaWcgPSBDYXJkYW5vV2FzbS5FZDI1NTE5U2lnbmF0dXJlLmZyb21fYnl0ZXMoc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgfSk7XG4gICAgICBpZiAodmtleVdpdG5lc3Nlcy5sZW4oKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBwcnYgPSBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmdlbmVyYXRlX2VkMjU1MTkoKTtcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyh0eEhhc2gsIHBydik7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aXRuZXNzU2V0LnNldF92a2V5cyh2a2V5V2l0bmVzc2VzKTtcblxuICAgICAgLy8gYWRkIGluIHdpdGhkcmF3YWwgaWYgdGhpcyBpcyBhIHdpdGhkcmF3YWwgdHhcbiAgICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gQ2FyZGFub1dhc20uV2l0aGRyYXdhbHMubmV3KCk7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHdpdGhkcmF3YWwuc3Rha2VBZGRyZXNzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0eEJvZHkuc2V0X3dpdGhkcmF3YWxzKHdpdGhkcmF3YWxzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGluIGNlcnRpZmljYXRlcyB0byBnZXQgbW9jayBzaXplXG4gICAgICBjb25zdCBkcmFmdENlcnRzID0gQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzLm5ldygpO1xuICAgICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICAgIGRyYWZ0Q2VydHMuYWRkKGNlcnQpO1xuICAgICAgfVxuICAgICAgdHhCb2R5LnNldF9jZXJ0cyhkcmFmdENlcnRzKTtcblxuICAgICAgY29uc3QgdHhEcmFmdCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eEJvZHksIHdpdG5lc3NTZXQpO1xuICAgICAgY29uc3QgbGluZWFyRmVlID0gQ2FyZGFub1dhc20uTGluZWFyRmVlLm5ldyhcbiAgICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCc0NCcpLFxuICAgICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoJzE1NTM4MScpXG4gICAgICApO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgdGhlIGZlZSBiYXNlZCBvZmYgb3VyIGR1bW15IHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBmZWUgPSBDYXJkYW5vV2FzbS5taW5fZmVlKHR4RHJhZnQsIGxpbmVhckZlZSkuY2hlY2tlZF9hZGQoQmlnTnVtLmZyb21fc3RyKCc0NDAnKSk7XG4gICAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmZlZSh0aGlzLl9mZWUudG9fc3RyKCkpO1xuICAgIC8vIG5vdyBjYWxjdWxhdGUgdGhlIGNoYW5nZSBiYXNlZCBvZmYgb2YgPHV0eG9CYWxhbmNlPiAtIDxmZWU+IC0gPGFtb3VudFRvU2VuZD5cbiAgICAvLyByZXNldCB0aGUgb3V0cHV0cyBjb2xsZWN0aW9uIGJlY2F1c2Ugbm93IG91ciBsYXN0IG91dHB1dCBoYXMgY2hhbmdlZFxuICAgIG91dHB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dHMubmV3KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgY29uc3QgbXVsdGlBc3NldHMgPSBvdXRwdXQubXVsdGlBc3NldHMgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldDtcbiAgICAgIGlmIChtdWx0aUFzc2V0cykge1xuICAgICAgICBjb25zdCBwb2xpY3lJZCA9IG11bHRpQXNzZXRzLmtleXMoKS5nZXQoMCk7XG4gICAgICAgIGNvbnN0IGFzc2V0cyA9IG11bHRpQXNzZXRzLmdldChwb2xpY3lJZCk7XG4gICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IGFzc2V0cyEua2V5cygpLmdldCgwKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhc3NldHMhLmdldChhc3NldE5hbWUpO1xuICAgICAgICBsZXQgdHhPdXRwdXRCdWlsZGVyID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRCdWlsZGVyLm5ldygpO1xuICAgICAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIob3V0cHV0LmFtb3VudCk7XG4gICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyhvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgICAgIGNvbnN0IG11bHRpQXNzZXQgPSBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0Lm5ldygpO1xuICAgICAgICBjb25zdCBhc3NldCA9IENhcmRhbm9XYXNtLkFzc2V0cy5uZXcoKTtcbiAgICAgICAgYXNzZXQuaW5zZXJ0KGFzc2V0TmFtZSwgcXVhbnRpdHkhKTtcbiAgICAgICAgbXVsdGlBc3NldC5pbnNlcnQocG9saWN5SWQsIGFzc2V0KTtcbiAgICAgICAgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLndpdGhfY29pbl9hbmRfYXNzZXQob3V0cHV0QW1vdW50LCBtdWx0aUFzc2V0KTtcbiAgICAgICAgY29uc3QgdHhPdXRwdXQgPSB0eE91dHB1dEFtb3VudEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgb3V0cHV0cy5hZGQodHhPdXRwdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgdXRpbC5nZXRXYWxsZXRBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSxcbiAgICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIob3V0cHV0LmFtb3VudCkpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLl9jaGFuZ2VBZGRyZXNzICYmIHRoaXMuX3NlbmRlckJhbGFuY2UpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3ModGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICBjb25zdCB1dHhvQmFsYW5jZSA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9zZW5kZXJCYWxhbmNlKTtcblxuICAgICAgY29uc3QgYWRqdXN0bWVudCA9IEJpZ051bS5mcm9tX3N0cignMjAwMDAwMCcpO1xuICAgICAgbGV0IGNoYW5nZSA9IHV0eG9CYWxhbmNlLmNoZWNrZWRfc3ViKHRoaXMuX2ZlZSkuY2hlY2tlZF9zdWIodG90YWxBbW91bnRUb1NlbmQpO1xuICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpIHtcbiAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfc3ViKGFkanVzdG1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpIHtcbiAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKGFkanVzdG1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3IHx8IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0pIHtcbiAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdG90YWxBbW91bnRUb1NlbmQgaXMgMCwgaXRzIGNvbnNvbGlkYXRpb25cbiAgICAgIGlmICh0b3RhbEFtb3VudFRvU2VuZC50b19zdHIoKSA9PSAnMCcpIHtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3IgbXVsdGktYXNzZXQgY29uc29saWRhdGlvblxuICAgICAgICBpZiAodGhpcy5fbXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHRvdGFsTnVtYmVyT2ZBc3NldHMgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fbXVsdGlBc3NldHMubGVuZ3RoLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCcxNTAwMDAwJyk7XG4gICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMgPSBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dC5jaGVja2VkX211bCh0b3RhbE51bWJlck9mQXNzZXRzKTtcblxuICAgICAgICAgIGlmICghY2hhbmdlLmxlc3NfdGhhbihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cykpIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpQXNzZXRzLmZvckVhY2goKGFzc2V0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB0eE91dHB1dEJ1aWxkZXIgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dEJ1aWxkZXIubmV3KCk7XG4gICAgICAgICAgICAgIC8vIGNoYW5nZUFkZHJlc3MgaXMgdGhlIHJvb3QgYWRkcmVzcywgd2hpY2ggaXMgd2hlcmUgd2Ugd2FudCB0aGUgdG9rZW5zIGFzc2V0cyB0byBiZSBzZW50IHRvXG4gICAgICAgICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyh0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgICAgICAgICAgdHhPdXRwdXRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLndpdGhfYWRkcmVzcyh0b0FkZHJlc3MpO1xuICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXNzZXROYW1lID0gQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc3NldC5hc3NldF9uYW1lLCAnaGV4JykpO1xuICAgICAgICAgICAgICBjb25zdCBwb2xpY3lJZCA9IENhcmRhbm9XYXNtLlNjcmlwdEhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShhc3NldC5wb2xpY3lfaWQsICdoZXgnKSk7XG4gICAgICAgICAgICAgIGNvbnN0IG11bHRpQXNzZXQgPSBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0Lm5ldygpO1xuICAgICAgICAgICAgICBjb25zdCBhc3NldHMgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgICAgICAgICAgIGFzc2V0cy5pbnNlcnQoYXNzZXROYW1lLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoYXNzZXQucXVhbnRpdHkpKTtcbiAgICAgICAgICAgICAgbXVsdGlBc3NldC5pbnNlcnQocG9saWN5SWQsIGFzc2V0cyk7XG5cbiAgICAgICAgICAgICAgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLndpdGhfY29pbl9hbmRfYXNzZXQoXG4gICAgICAgICAgICAgICAgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsXG4gICAgICAgICAgICAgICAgbXVsdGlBc3NldFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBmaW5hbGx5IHNlbmQgdGhlIHJlbWFpbmluZyBBREEgaW4gaXRzIG93biBvdXRwdXRcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ091dHB1dEFtb3VudCA9IGNoYW5nZS5jaGVja2VkX3N1YihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoXG4gICAgICAgICAgICAgIGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhyZW1haW5pbmdPdXRwdXRBbW91bnQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kczogbmVlZCBhIG1pbmltdW0gb2YgMS41IEFEQSBwZXIgb3V0cHV0IHRvIGNvbnN0cnVjdCB0b2tlbiBjb25zb2xpZGF0aW9uJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRva2VucyB0byBjb25zb2xpZGF0ZSwgeW91IG9ubHkgaGF2ZSAxIG91dHB1dCB3aGljaCBpcyBBREEgYWxvbmVcbiAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoY2hhbmdlQWRkcmVzcywgQ2FyZGFub1dhc20uVmFsdWUubmV3KGNoYW5nZSkpO1xuICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXNuJ3QgYSBjb25zb2xpZGF0ZSByZXF1ZXN0LCB3aGF0ZXZlciBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSBzZW50IGJhY2sgdG8gdGhlIHJvb3RhZGRyZXNzIGlzIGFkZGVkIGFzIGEgc2VwYXJhdGUgb3V0cHV0IGhlcmVcbiAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0eFJhdyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uQm9keS5uZXdfdHhfYm9keShpbnB1dHMsIG91dHB1dHMsIHRoaXMuX2ZlZSk7XG5cbiAgICBjb25zdCBjZXJ0cyA9IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcy5uZXcoKTtcbiAgICBmb3IgKGNvbnN0IGNlcnQgb2YgdGhpcy5fY2VydHMpIHtcbiAgICAgIGNlcnRzLmFkZChjZXJ0KTtcbiAgICB9XG4gICAgdHhSYXcuc2V0X2NlcnRzKGNlcnRzKTtcblxuICAgIC8vIGFkZCBpbiB3aXRoZHJhd2FsIGlmIHRoaXMgaXMgYSB3aXRoZHJhd2FsIHR4XG4gICAgaWYgKHRoaXMuX3dpdGhkcmF3YWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gQ2FyZGFub1dhc20uV2l0aGRyYXdhbHMubmV3KCk7XG4gICAgICB0aGlzLl93aXRoZHJhd2Fscy5mb3JFYWNoKCh3aXRoZHJhd2FsOiBXaXRoZHJhd2FsKSA9PiB7XG4gICAgICAgIGNvbnN0IHJld2FyZEFkZHJlc3MgPSBDYXJkYW5vV2FzbS5SZXdhcmRBZGRyZXNzLmZyb21fYWRkcmVzcyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHdpdGhkcmF3YWwuc3Rha2VBZGRyZXNzKVxuICAgICAgICApO1xuICAgICAgICB3aXRoZHJhd2Fscy5pbnNlcnQocmV3YXJkQWRkcmVzcyEsIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih3aXRoZHJhd2FsLnZhbHVlKSk7XG4gICAgICB9KTtcblxuICAgICAgdHhSYXcuc2V0X3dpdGhkcmF3YWxzKHdpdGhkcmF3YWxzKTtcbiAgICB9XG5cbiAgICB0eFJhdy5zZXRfdHRsKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl90dGwudG9TdHJpbmcoKSkpO1xuICAgIGNvbnN0IHR4UmF3SGFzaCA9IENhcmRhbm9XYXNtLmhhc2hfdHJhbnNhY3Rpb24odHhSYXcpO1xuXG4gICAgLy8gbm93IGFkZCB0aGUgd2l0bmVzc2VzIGFnYWluIHRoaXMgdGltZSBmb3IgcmVhbC4gV2UgbmVlZCB0byBkbyB0aGlzIGFnYWluXG4gICAgLy8gYmVjYXVzZSBub3cgdGhhdCB3ZSd2ZSBhZGRlZCBvdXIgcmVhbCBmZWUgYW5kIGNoYW5nZSBvdXRwdXQsIHdlIGhhdmUgYSBkaWZmZXJlbmNlIHRyYW5zYWN0aW9uIGhhc2hcbiAgICBjb25zdCB3aXRuZXNzU2V0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25XaXRuZXNzU2V0Lm5ldygpO1xuICAgIGNvbnN0IHZrZXlXaXRuZXNzZXMgPSBDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzc2VzLm5ldygpO1xuICAgIHRoaXMuX3NpZ25lcnMuZm9yRWFjaCgoa2V5UGFpcikgPT4ge1xuICAgICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgIGNvbnN0IHZrZXlXaXRuZXNzID0gQ2FyZGFub1dhc20ubWFrZV92a2V5X3dpdG5lc3MoXG4gICAgICAgIHR4UmF3SGFzaCxcbiAgICAgICAgQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5mcm9tX25vcm1hbF9ieXRlcyhCdWZmZXIuZnJvbShwcnYsICdoZXgnKSlcbiAgICAgICk7XG4gICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgfSk7XG5cbiAgICAvLyBDbGVhciB0aGUgY29zbWV0aWMgc2lnbmF0dXJlIGFycmF5IGluIG5hdGl2ZSB0eG4gd3JhcHBlciB0byBwcmV2ZW50IGR1cGxpY2F0ZSB3aGVuIGJ1aWxkZXIgaXMgaW5pdGVkIGZyb20gYSBwYXJ0aWFsbHkgd2l0bmVzc2VkIHR4blxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPSAwO1xuICAgIHRoaXMuZ2V0QWxsU2lnbmF0dXJlcygpLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpKTtcbiAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQoQ2FyZGFub1dhc20uVmtleXdpdG5lc3MubmV3KHZrZXksIGVkMjU1U2lnKSk7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUucHVzaChzaWduYXR1cmUuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgfSk7XG4gICAgd2l0bmVzc1NldC5zZXRfdmtleXModmtleVdpdG5lc3Nlcyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udHJhbnNhY3Rpb24gPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5uZXcodHhSYXcsIHdpdG5lc3NTZXQpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lcnMucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KSk7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlsLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdpbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEtleSB2YWxpZGF0aW9uIGZhaWxlZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24uZnJvbV9ieXRlcyhyYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24udHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsU2lnbmF0dXJlcygpOiBTaWduYXR1cmVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRTaWduYXR1cmVzLmNvbmNhdCh0aGlzLl9zaWduYXR1cmVzKTtcbiAgfVxufVxuIl19
|
|
702
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsbURBUzhCO0FBQzlCLCtDQUFvRztBQUNwRyx1Q0FBb0M7QUFDcEMsaURBQXNEO0FBQ3RELHNGQUF3RTtBQUN4RSwrRkFBa0U7QUFFbEU7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLDZCQUE2QjtJQUM3QixhQUFhLEVBQUUsSUFBSTtJQUNuQiw2QkFBNkI7SUFDN0IsYUFBYSxFQUFFLFFBQVE7SUFDdkIsMkNBQTJDO0lBQzNDLGFBQWEsRUFBRSxLQUFLO0NBQ3JCLENBQUM7QUFFRixNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUEyQnJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBMUJYLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLG9CQUFlLEdBQWdCLEVBQUUsQ0FBQztRQUNsQyxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFHOUIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUVoQyxpQkFBWSxHQUFZLEVBQUUsQ0FBQztRQUdyQywyQ0FBMkM7UUFDakMscUJBQWdCLEdBQXdCLEVBQUUsQ0FBQztRQUVyRCxxREFBcUQ7UUFDN0Msd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ3BDOzs7YUFHSztRQUNHLDRCQUF1QixHQUF3QixFQUFFLENBQUM7UUFJeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENB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LENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsc0JBQXNCLENBQUMsY0FBbUI7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXdCO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDbEIsWUFBWSxDQUFDLFNBQXdCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRjtBQXh3QkQsZ0RBd3dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVXRpbHNFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXNzZXQsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbklucHV0LCBUcmFuc2FjdGlvbk91dHB1dCwgV2l0aGRyYXdhbCB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgdXRpbCwgeyBNSU5fQURBX0ZPUl9PTkVfQVNTRVQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCAqIGFzIENhcmRhbm9XYXNtIGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0IHsgQmlnTnVtIH0gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5cbi8qKlxuICogQ29uc3RhbnRzIGZvciB0cmFuc2FjdGlvbiBidWlsZGluZ1xuICovXG5jb25zdCBGRUVfQ09FRkZJQ0lFTlRTID0ge1xuICAvKiogTGluZWFyIGZlZSBwYXJhbWV0ZXIgYSAqL1xuICBBX0NPRUZGSUNJRU5UOiAnNDQnLFxuICAvKiogTGluZWFyIGZlZSBwYXJhbWV0ZXIgYiAqL1xuICBCX0NPRUZGSUNJRU5UOiAnMTU1MzgxJyxcbiAgLyoqIEFkZGl0aW9uYWwgc2FmZXR5IG1hcmdpbiBmb3IgdGhlIGZlZSAqL1xuICBTQUZFVFlfTUFSR0lOOiAnNDQwJyxcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbiE6IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3NpZ25lcnM6IEtleVBhaXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uSW5wdXRzOiBUcmFuc2FjdGlvbklucHV0W10gPSBbXTtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbk91dHB1dHM6IFRyYW5zYWN0aW9uT3V0cHV0W10gPSBbXTtcbiAgcHJvdGVjdGVkIF9pbml0U2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmVzOiBTaWduYXR1cmVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX2NoYW5nZUFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zZW5kZXJCYWxhbmNlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfdHRsID0gMDtcbiAgcHJvdGVjdGVkIF9jZXJ0czogQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3dpdGhkcmF3YWxzOiBXaXRoZHJhd2FsW10gPSBbXTtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHByb3RlY3RlZCBfbXVsdGlBc3NldHM6IEFzc2V0W10gPSBbXTtcbiAgLyoqIEFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uIHJlY2lwaWVudCAqL1xuICBwcm90ZWN0ZWQgX3JlY2lwaWVudEFkZHJlc3M6IHN0cmluZztcbiAgLyoqIE1hcCBvZiBzZW5kZXIncyBhc3NldHMgYnkgYXNzZXQgbmFtZSAqL1xuICBwcm90ZWN0ZWQgX3NlbmRlckFzc2V0TGlzdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBwcml2YXRlIF9mZWU6IEJpZ051bTtcbiAgLyoqIEZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIGlzIGEgdG9rZW4gdHJhbnNhY3Rpb24gKi9cbiAgcHJpdmF0ZSBfaXNUb2tlblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIC8qKiBEZWVwIGNsb25lIG9mIF9zZW5kZXJBc3NldExpc3QgLSBmb3IgbWFuaXB1bGF0aW5nIGR1cmluZyB0d28gaXRlcmF0aW9uc1xuICAgKiAgIC0gb25lIGZvciBjYWxjdWxhdGluZyB0aGUgZmVlXG4gICAqICAgLSBvbmUgZm9yIHRoZSBhY3R1YWwgdHJhbnNhY3Rpb24gYnVpbGQgd2l0aCB0aGUgY2FsY3VsYXRlZCBmZWVcbiAgICogKi9cbiAgcHJpdmF0ZSBfbXV0YWJsZVNlbmRlckFzc2V0TGlzdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9mZWUgPSBCaWdOdW0uemVybygpO1xuICB9XG5cbiAgaW5wdXQoaTogVHJhbnNhY3Rpb25JbnB1dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uSW5wdXRzLnB1c2goaSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvdXRwdXQobzogVHJhbnNhY3Rpb25PdXRwdXQpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk91dHB1dHMucHVzaChvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzc2V0cyhhOiBBc3NldCk6IHRoaXMge1xuICAgIHRoaXMuX211bHRpQXNzZXRzLnB1c2goYSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0dGwodDogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fdHRsID0gdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjaGFuZ2UgYWRkcmVzcyBhbmQgaW5wdXQgYmFsYW5jZXMgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gYWRkciAtIFRoZSBhZGRyZXNzIHdoZXJlIGNoYW5nZSB3aWxsIGJlIHNlbnRcbiAgICogQHBhcmFtIHRvdGFsSW5wdXRCYWxhbmNlIC0gVGhlIHRvdGFsIEFEQSBpbnB1dCBiYWxhbmNlIGluIExvdmVsYWNlXG4gICAqIEBwYXJhbSBpbnB1dEFzc2V0TGlzdCAtIE9wdGlvbmFsIG1hcCBvZiB0b2tlbiBhc3NldHMgaW4gdGhlIGlucHV0XG4gICAqL1xuICBjaGFuZ2VBZGRyZXNzKGFkZHI6IHN0cmluZywgdG90YWxJbnB1dEJhbGFuY2U6IHN0cmluZywgaW5wdXRBc3NldExpc3Q/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdGhpcyB7XG4gICAgdGhpcy5fY2hhbmdlQWRkcmVzcyA9IGFkZHI7XG4gICAgdGhpcy5fc2VuZGVyQmFsYW5jZSA9IHRvdGFsSW5wdXRCYWxhbmNlO1xuICAgIHRoaXMuX3NlbmRlckFzc2V0TGlzdCA9IGlucHV0QXNzZXRMaXN0ID8/IHt9O1xuICAgIHRoaXMuc2V0TXV0YWJsZVNlbmRlckFzc2V0TGlzdCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0TXV0YWJsZVNlbmRlckFzc2V0TGlzdCgpIHtcbiAgICB0aGlzLl9tdXRhYmxlU2VuZGVyQXNzZXRMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9zZW5kZXJBc3NldExpc3QpKTtcbiAgfVxuXG4gIGZlZShmZWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS5mcm9tX3N0cihmZWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoaXMgdHJhbnNhY3Rpb24gYXMgYSB0b2tlbiB0cmFuc2FjdGlvblxuICAgKiBFbmFibGVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRva2VuIHRyYW5zZmVyc1xuICAgKi9cbiAgaXNUb2tlblRyYW5zYWN0aW9uKCkge1xuICAgIHRoaXMuX2lzVG9rZW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICBjb25zdCB0eG5Cb2R5ID0gdHgudHJhbnNhY3Rpb24uYm9keSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhuQm9keS5pbnB1dHMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHR4bkJvZHkuaW5wdXRzKCkuZ2V0KGkpO1xuICAgICAgdGhpcy5pbnB1dCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiBCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IGlucHV0LmluZGV4KCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eG5Cb2R5Lm91dHB1dHMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0eG5Cb2R5Lm91dHB1dHMoKS5nZXQoaSk7XG4gICAgICB0aGlzLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzKCkudG9fYmVjaDMyKCksXG4gICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudCgpLmNvaW4oKS50b19zdHIoKSxcbiAgICAgICAgbXVsdGlBc3NldHM6IG91dHB1dC5hbW91bnQoKS5tdWx0aWFzc2V0KCkgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR4bkJvZHkuY2VydHMoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjZXJ0cyA9IHR4bkJvZHkuY2VydHMoKSBhcyBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlcnRzLmxlbigpOyBpKyspIHtcbiAgICAgICAgdGhpcy5fY2VydHMucHVzaChjZXJ0cy5nZXQoaSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eG5Cb2R5LndpdGhkcmF3YWxzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdhbHMgPSB0eG5Cb2R5LndpdGhkcmF3YWxzKCkgYXMgQ2FyZGFub1dhc20uV2l0aGRyYXdhbHM7XG4gICAgICBjb25zdCBrZXlzID0gd2l0aGRyYXdhbHMua2V5cygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IGtleXMuZ2V0KGkpIGFzIENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IHJld2FyZCA9IHdpdGhkcmF3YWxzLmdldChyZXdhcmRBZGRyZXNzKSBhcyBDYXJkYW5vV2FzbS5CaWdOdW07XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLnB1c2goeyBzdGFrZUFkZHJlc3M6IHJld2FyZEFkZHJlc3MudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpLCB2YWx1ZTogcmV3YXJkLnRvX3N0cigpIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3R0bCA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKS50dGwoKSBhcyBudW1iZXI7XG4gICAgdGhpcy5fZmVlID0gdHgudHJhbnNhY3Rpb24uYm9keSgpLmZlZSgpO1xuXG4gICAgaWYgKHR4LnRyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSkge1xuICAgICAgY29uc3QgdmtleXMgPSB0eC50cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkhIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZrZXlzLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmtleSA9IHZrZXlzLmdldChpKTtcbiAgICAgICAgdGhpcy5faW5pdFNpZ25hdHVyZXMucHVzaCh7XG4gICAgICAgICAgcHVibGljS2V5OiB7IHB1YjogdmtleS52a2V5KCkucHVibGljX2tleSgpLnRvX2hleCgpIH0sXG4gICAgICAgICAgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbSh2a2V5LnNpZ25hdHVyZSgpLnRvX2hleCgpLCAnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSB0cmFuc2FjdGlvbiB0aGF0IGluY2x1ZGVzIHRva2VuIGFzc2V0c1xuICAgKiBAcmV0dXJucyBUaGUgYnVpbHQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1Rva2VuQnVpbGQoKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGlucHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSW5wdXRzLm5ldygpO1xuICAgIGxldCBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIHRoaXMuYWRkSW5wdXRzKGlucHV0cyk7XG4gICAgLy8gRmVlIGlzIG5ldmVyIHNldCBzbyBmYXIgZnJvbSBJTVNcbiAgICBpZiAodGhpcy5fZmVlLmlzX3plcm8oKSkge1xuICAgICAgdGhpcy5hZGRPdXRwdXRzKG91dHB1dHMpO1xuICAgICAgY29uc3QgdHhEcmFmdCA9IHRoaXMucHJlcGFyZUFkYVRyYW5zYWN0aW9uRHJhZnQoaW5wdXRzLCBvdXRwdXRzLCBmYWxzZSk7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUZlZSh0eERyYWZ0KTtcbiAgICAgIHRoaXMuc2V0RmVlSW5UcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICAvLyBSZXNldCBvdXRwdXRzIHRvIGFkZCB0aGVtIGJhY2sgd2l0aCB0aGUgY29ycmVjdCBjaGFuZ2VcbiAgICBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIHRoaXMuc2V0TXV0YWJsZVNlbmRlckFzc2V0TGlzdCgpO1xuICAgIHRoaXMuYWRkT3V0cHV0cyhvdXRwdXRzKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi50cmFuc2FjdGlvbiA9IHRoaXMucHJlcGFyZUFkYVRyYW5zYWN0aW9uRHJhZnQoaW5wdXRzLCBvdXRwdXRzLCB0cnVlKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRyYW5zYWN0aW9uIGlucHV0cyB0byB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGlucHV0cyAtIFRoZSBpbnB1dHMgY29sbGVjdGlvbiB0byBhZGQgdG9cbiAgICovXG4gIHByaXZhdGUgYWRkSW5wdXRzKGlucHV0cykge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uSW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dHMuYWRkKFxuICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCwgJ2hleCcpKSxcbiAgICAgICAgICBpbnB1dC50cmFuc2FjdGlvbl9pbmRleFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb3V0cHV0cyB0byB0aGUgdHJhbnNhY3Rpb24gaW5jbHVkaW5nIHRva2VuIG91dHB1dHMgYW5kIGNoYW5nZVxuICAgKiBAcGFyYW0gb3V0cHV0cyAtIFRoZSBvdXRwdXRzIGNvbGxlY3Rpb24gdG8gYWRkIHRvXG4gICAqL1xuICBwcml2YXRlIGFkZE91dHB1dHMob3V0cHV0cykge1xuICAgIGNvbnN0IHV0eG9CYWxhbmNlID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3NlbmRlckJhbGFuY2UpOyAvLyBUb3RhbCBVVFhPIGJhbGFuY2VcbiAgICBjb25zdCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpO1xuICAgIGNvbnN0IGNoYW5nZUFmdGVyUmVjZWl2ZXJEZWR1Y3Rpb25zID0gdGhpcy5hZGRSZWNlaXZlck91dHB1dHMob3V0cHV0cywgY2hhbmdlKTtcbiAgICB0aGlzLmFkZENoYW5nZU91dHB1dChjaGFuZ2VBZnRlclJlY2VpdmVyRGVkdWN0aW9ucywgb3V0cHV0cyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyByZWNlaXZlciBvdXRwdXRzIHRvIHRoZSB0cmFuc2FjdGlvbiBhbmQgY2FsY3VsYXRlcyB0aGUgcmVtYWluaW5nIGNoYW5nZVxuICAgKiBAcGFyYW0gb3V0cHV0cyAtIFRyYW5zYWN0aW9uIG91dHB1dHMgY29sbGVjdGlvblxuICAgKiBAcGFyYW0gY2hhbmdlIC0gQ3VycmVudCBjaGFuZ2UgYW1vdW50IGluIEFEQVxuICAgKiBAcmV0dXJucyBSZW1haW5pbmcgY2hhbmdlIGFmdGVyIGFkZGluZyByZWNlaXZlciBvdXRwdXRzXG4gICAqL1xuICBwcml2YXRlIGFkZFJlY2VpdmVyT3V0cHV0cyhvdXRwdXRzLCBjaGFuZ2UpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk91dHB1dHMuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBpZiAoIW91dHB1dC5hZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgb3V0cHV0OiBtaXNzaW5nIGFkZHJlc3MnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjZWl2ZXJBZGRyZXNzID0gb3V0cHV0LmFkZHJlc3M7XG4gICAgICBjb25zdCByZWNlaXZlckFtb3VudCA9IG91dHB1dC5hbW91bnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyQW1vdW50Qk4gPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIocmVjZWl2ZXJBbW91bnQpO1xuICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9zdWIocmVjZWl2ZXJBbW91bnRCTik7XG5cbiAgICAgICAgaWYgKGNoYW5nZS5sZXNzX3RoYW4oQ2FyZGFub1dhc20uQmlnTnVtLnplcm8oKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kczogbm90IGVub3VnaCBBREEgdG8gY292ZXIgcmVjZWl2ZXIgb3V0cHV0IGFtb3VudHMgYW5kIGZlZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG11bHRpQXNzZXRzID0gb3V0cHV0Lm11bHRpQXNzZXRzIGFzIEFzc2V0O1xuICAgICAgICBpZiAobXVsdGlBc3NldHMpIHtcbiAgICAgICAgICBjb25zdCBwb2xpY3lJZCA9IG11bHRpQXNzZXRzLnBvbGljeV9pZDtcbiAgICAgICAgICBjb25zdCBhc3NldE5hbWUgPSBtdWx0aUFzc2V0cy5hc3NldF9uYW1lO1xuICAgICAgICAgIGNvbnN0IHF1YW50aXR5ID0gbXVsdGlBc3NldHMucXVhbnRpdHk7XG4gICAgICAgICAgY29uc3QgZmluZ2VycHJpbnQgPSBtdWx0aUFzc2V0cy5maW5nZXJwcmludCBhcyBzdHJpbmc7XG5cbiAgICAgICAgICBjb25zdCBjdXJyZW50UXR5ID0gdGhpcy5fbXV0YWJsZVNlbmRlckFzc2V0TGlzdFtmaW5nZXJwcmludF0ucXVhbnRpdHk7XG4gICAgICAgICAgY29uc3QgcmVtYWluaW5nUXR5ID0gQmlnSW50KGN1cnJlbnRRdHkpIC0gQmlnSW50KHF1YW50aXR5KTtcbiAgICAgICAgICB0aGlzLl9tdXRhYmxlU2VuZGVyQXNzZXRMaXN0W2ZpbmdlcnByaW50XS5xdWFudGl0eSA9IChyZW1haW5pbmdRdHkgPiAwbiA/IHJlbWFpbmluZ1F0eSA6IDBuKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9tdXRhYmxlU2VuZGVyQXNzZXRMaXN0W2ZpbmdlcnByaW50XS5xdWFudGl0eSkuaXNfemVybygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnN1ZmZpY2llbnQgcXR5OiBub3QgZW5vdWdoIHRva2VuIHF0eSB0byBjb3ZlciByZWNlaXZlciBvdXRwdXQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JBc3NldE91dHB1dCA9IHRoaXMuYWRkVG9rZW5zVG9PdXRwdXQoY2hhbmdlLCBvdXRwdXRzLCByZWNlaXZlckFkZHJlc3MsIHtcbiAgICAgICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgICAgICBhc3NldF9uYW1lOiBhc3NldE5hbWUsXG4gICAgICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfc3ViKG1pbkFtb3VudE5lZWRlZEZvckFzc2V0T3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcikge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgRXJyb3IgcHJvY2Vzc2luZyBvdXRwdXQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0b2tlbnMgdG8gYSB0cmFuc2FjdGlvbiBvdXRwdXRcbiAgICogQHBhcmFtIGNoYW5nZSAtIFRoZSBjdXJyZW50IGNoYW5nZSBhbW91bnQgaW4gTG92ZWxhY2VcbiAgICogQHBhcmFtIG91dHB1dHMgLSBUaGUgb3V0cHV0cyBjb2xsZWN0aW9uIHRvIGFkZCB0b1xuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSByZWNpcGllbnQgYWRkcmVzc1xuICAgKiBAcGFyYW0gYXNzZXQgLSBUaGUgYXNzZXQgdG8gYWRkXG4gICAqIEByZXR1cm5zIFRoZSBtaW5pbXVtIEFEQSBhbW91bnQgbmVlZGVkIGZvciB0aGlzIGFzc2V0IG91dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRUb2tlbnNUb091dHB1dChjaGFuZ2U6IEJpZ051bSwgb3V0cHV0czogQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLCBhZGRyZXNzLCBhc3NldDogQXNzZXQpOiBCaWdOdW0ge1xuICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKE1JTl9BREFfRk9SX09ORV9BU1NFVCk7XG4gICAgaWYgKGNoYW5nZS5sZXNzX3RoYW4obWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW5zdWZmaWNpZW50IGZ1bmRzOiBuZWVkIGEgbWluaW11bSBvZiAke01JTl9BREFfRk9SX09ORV9BU1NFVH0gbG92ZWxhY2UgcGVyIG91dHB1dCB0byBjb25zdHJ1Y3QgdG9rZW4gdHJhbnNhY3Rpb25zYFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5idWlsZFRva2Vucyhhc3NldCwgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsIG91dHB1dHMsIGFkZHJlc3MpO1xuICAgIHJldHVybiBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdG9rZW4gb3V0cHV0cyBmb3IgYSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gYXNzZXQgLSBUaGUgYXNzZXQgdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCAtIE1pbmltdW0gQURBIHJlcXVpcmVkIGZvciB0aGlzIGFzc2V0IG91dHB1dFxuICAgKiBAcGFyYW0gb3V0cHV0cyAtIFRyYW5zYWN0aW9uIG91dHB1dHMgY29sbGVjdGlvblxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFJlY2lwaWVudCBhZGRyZXNzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVG9rZW5zKGFzc2V0OiBBc3NldCwgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsIG91dHB1dHMsIGFkZHJlc3MpIHtcbiAgICBsZXQgdHhPdXRwdXRCdWlsZGVyID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRCdWlsZGVyLm5ldygpO1xuICAgIGNvbnN0IHRvQWRkcmVzcyA9IHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyhhZGRyZXNzKTtcbiAgICB0eE91dHB1dEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIud2l0aF9hZGRyZXNzKHRvQWRkcmVzcyk7XG4gICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgY29uc3QgYXNzZXROYW1lID0gQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc3NldC5hc3NldF9uYW1lLCAnaGV4JykpO1xuICAgIGNvbnN0IHBvbGljeUlkID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKGFzc2V0LnBvbGljeV9pZCwgJ2hleCcpKTtcbiAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICBjb25zdCBhc3NldHMgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgYXNzZXRzLmluc2VydChhc3NldE5hbWUsIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihhc3NldC5xdWFudGl0eSkpO1xuICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldHMpO1xuXG4gICAgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLndpdGhfY29pbl9hbmRfYXNzZXQobWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQsIG11bHRpQXNzZXQpO1xuXG4gICAgY29uc3QgdHhPdXRwdXQgPSB0eE91dHB1dEFtb3VudEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBvdXRwdXRzLmFkZCh0eE91dHB1dCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoYW5nZSBvdXRwdXQgdG8gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgY2hhbmdlIGFtb3VudCBpbiBMb3ZlbGFjZVxuICAgKiBAcGFyYW0gb3V0cHV0cyAtIFRoZSBvdXRwdXRzIGNvbGxlY3Rpb24gdG8gYWRkIHRvXG4gICAqL1xuICBwcml2YXRlIGFkZENoYW5nZU91dHB1dChjaGFuZ2UsIG91dHB1dHMpIHtcbiAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gdXRpbC5nZXRXYWxsZXRBZGRyZXNzKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuX211dGFibGVTZW5kZXJBc3NldExpc3QpLmZvckVhY2goKGZpbmdlcnByaW50KSA9PiB7XG4gICAgICBjb25zdCBhc3NldCA9IHRoaXMuX211dGFibGVTZW5kZXJBc3NldExpc3RbZmluZ2VycHJpbnRdO1xuICAgICAgY29uc3QgY2hhbmdlUXR5ID0gYXNzZXQucXVhbnRpdHk7XG4gICAgICBjb25zdCBwb2xpY3lJZCA9IGFzc2V0LnBvbGljeV9pZDtcbiAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IGFzc2V0LmFzc2V0X25hbWU7XG5cbiAgICAgIGlmIChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoY2hhbmdlUXR5KS5pc196ZXJvKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JBc3NldE91dHB1dCA9IHRoaXMuYWRkVG9rZW5zVG9PdXRwdXQoY2hhbmdlLCBvdXRwdXRzLCB0aGlzLl9jaGFuZ2VBZGRyZXNzLCB7XG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzc2V0TmFtZSxcbiAgICAgICAgcXVhbnRpdHk6IGNoYW5nZVF0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9KTtcbiAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihtaW5BbW91bnROZWVkZWRGb3JBc3NldE91dHB1dCk7XG4gICAgfSk7XG4gICAgaWYgKCFjaGFuZ2UuaXNfemVybygpKSB7XG4gICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoY2hhbmdlQWRkcmVzcywgQ2FyZGFub1dhc20uVmFsdWUubmV3KGNoYW5nZSkpO1xuICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY2FsY3VsYXRlZCBmZWUgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHNldEZlZUluVHJhbnNhY3Rpb24oKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uZmVlKHRoaXMuX2ZlZS50b19zdHIoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgdHJhbnNhY3Rpb24gZmVlIGJhc2VkIG9uIHRyYW5zYWN0aW9uIHNpemVcbiAgICogQHBhcmFtIHR4RHJhZnQgLSBEcmFmdCB0cmFuc2FjdGlvbiB0byBjYWxjdWxhdGUgZmVlIGZvclxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVGZWUodHhEcmFmdCkge1xuICAgIGNvbnN0IGxpbmVhckZlZSA9IENhcmRhbm9XYXNtLkxpbmVhckZlZS5uZXcoXG4gICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoRkVFX0NPRUZGSUNJRU5UUy5BX0NPRUZGSUNJRU5UKSxcbiAgICAgIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihGRUVfQ09FRkZJQ0lFTlRTLkJfQ09FRkZJQ0lFTlQpXG4gICAgKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZmVlIGJhc2VkIG9mZiBvdXIgZHVtbXkgdHJhbnNhY3Rpb25cbiAgICBjb25zdCBmZWUgPSBDYXJkYW5vV2FzbS5taW5fZmVlKHR4RHJhZnQsIGxpbmVhckZlZSkuY2hlY2tlZF9hZGQoQmlnTnVtLmZyb21fc3RyKEZFRV9DT0VGRklDSUVOVFMuU0FGRVRZX01BUkdJTikpO1xuICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUFkYVRyYW5zYWN0aW9uRHJhZnQoaW5wdXRzLCBvdXRwdXRzLCByZWZyZXNoU2lnbmF0dXJlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgdHhCb2R5ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25Cb2R5Lm5ld190eF9ib2R5KGlucHV0cywgb3V0cHV0cywgdGhpcy5fZmVlKTtcbiAgICB0eEJvZHkuc2V0X3R0bChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fdHRsLnRvU3RyaW5nKCkpKTtcbiAgICBjb25zdCB0eEhhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4Qm9keSk7XG5cbiAgICAvLyB3ZSBhZGQgd2l0bmVzc2VzIG9uY2Ugc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBhcHByb3ByaWF0ZSBhbW91bnQgb2Ygc2lnbmVycyBmb3IgY2FsY3VsYXRpbmcgdGhlIGZlZVxuICAgIGNvbnN0IHdpdG5lc3NTZXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbldpdG5lc3NTZXQubmV3KCk7XG4gICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgdGhpcy5fc2lnbmVycy5mb3JFYWNoKChrZXlQYWlyKSA9PiB7XG4gICAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgdHhIYXNoLFxuICAgICAgICBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmZyb21fbm9ybWFsX2J5dGVzKEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKVxuICAgICAgKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICB9KTtcbiAgICBpZiAocmVmcmVzaFNpZ25hdHVyZXMpIHtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPSAwO1xuICAgIH1cbiAgICB0aGlzLmdldEFsbFNpZ25hdHVyZXMoKS5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHZrZXkgPSBDYXJkYW5vV2FzbS5Wa2V5Lm5ldyhDYXJkYW5vV2FzbS5QdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUucHVibGljS2V5LnB1YiwgJ2hleCcpKSk7XG4gICAgICBjb25zdCBlZDI1NVNpZyA9IENhcmRhbm9XYXNtLkVkMjU1MTlTaWduYXR1cmUuZnJvbV9ieXRlcyhzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgLy8gUmVzdG9yaW5nIHRoZSBiZWhhdmlvdXIgZnJvbSB0aGUgb3JpZ2luYWwgYnVpbGRJbXBsZW1lbnRhdGlvblxuICAgICAgaWYgKHJlZnJlc2hTaWduYXR1cmVzKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZS5wdXNoKHNpZ25hdHVyZS5zaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXJlZnJlc2hTaWduYXR1cmVzICYmIHZrZXlXaXRuZXNzZXMubGVuKCkgPT09IDApIHtcbiAgICAgIGNvbnN0IHBydiA9IENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZ2VuZXJhdGVfZWQyNTUxOSgpO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyh0eEhhc2gsIHBydik7XG4gICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICBpZiAodGhpcy5fdHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgfVxuICAgIH1cbiAgICB3aXRuZXNzU2V0LnNldF92a2V5cyh2a2V5V2l0bmVzc2VzKTtcblxuICAgIC8vIGFkZCBpbiBjZXJ0aWZpY2F0ZXMgdG8gZ2V0IG1vY2sgc2l6ZVxuICAgIGNvbnN0IGRyYWZ0Q2VydHMgPSBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXMubmV3KCk7XG4gICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICBkcmFmdENlcnRzLmFkZChjZXJ0KTtcbiAgICB9XG4gICAgdHhCb2R5LnNldF9jZXJ0cyhkcmFmdENlcnRzKTtcblxuICAgIGNvbnN0IHR4RHJhZnQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5uZXcodHhCb2R5LCB3aXRuZXNzU2V0KTtcbiAgICByZXR1cm4gdHhEcmFmdDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKHRoaXMuX2lzVG9rZW5UcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Rva2VuQnVpbGQoKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25JbnB1dHMubmV3KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25JbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgIGlucHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSW5wdXQubmV3KFxuICAgICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSGFzaC5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKGlucHV0LnRyYW5zYWN0aW9uX2lkLCAnaGV4JykpLFxuICAgICAgICAgIGlucHV0LnRyYW5zYWN0aW9uX2luZGV4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgbGV0IG91dHB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dHMubmV3KCk7XG4gICAgbGV0IHRvdGFsQW1vdW50VG9TZW5kID0gQ2FyZGFub1dhc20uQmlnTnVtLnplcm8oKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk91dHB1dHMuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIob3V0cHV0LmFtb3VudCk7XG4gICAgICBvdXRwdXRzLmFkZChcbiAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyhvdXRwdXQuYWRkcmVzcyksIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhhbW91bnQpKVxuICAgICAgKTtcbiAgICAgIHRvdGFsQW1vdW50VG9TZW5kID0gdG90YWxBbW91bnRUb1NlbmQuY2hlY2tlZF9hZGQoYW1vdW50KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9mZWUuaXNfemVybygpKSB7XG4gICAgICAvLyBlc3RpbWF0ZSBmZWVcbiAgICAgIC8vIGFkZCBleHRyYSBvdXRwdXQgZm9yIHRoZSBjaGFuZ2VcbiAgICAgIGlmICh0aGlzLl9jaGFuZ2VBZGRyZXNzICYmIHRoaXMuX3NlbmRlckJhbGFuY2UpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlQWRkcmVzcyA9IHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyh0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgICAgY29uc3QgdXR4b0JhbGFuY2UgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSk7XG5cbiAgICAgICAgY29uc3QgYWRqdXN0bWVudCA9IEJpZ051bS5mcm9tX3N0cignMjAwMDAwMCcpO1xuICAgICAgICBsZXQgY2hhbmdlID0gdXR4b0JhbGFuY2UuY2hlY2tlZF9zdWIodGhpcy5fZmVlKS5jaGVja2VkX3N1Yih0b3RhbEFtb3VudFRvU2VuZCk7XG4gICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfc3ViKGFkanVzdG1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSkge1xuICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChhZGp1c3RtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3IHx8IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0pIHtcbiAgICAgICAgICB0aGlzLl93aXRoZHJhd2Fscy5mb3JFYWNoKCh3aXRoZHJhd2FsOiBXaXRoZHJhd2FsKSA9PiB7XG4gICAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRvdGFsQW1vdW50VG9TZW5kIGlzIDAsIGl0cyBjb25zb2xpZGF0aW9uXG4gICAgICAgIGlmICh0b3RhbEFtb3VudFRvU2VuZC50b19zdHIoKSA9PSAnMCcpIHtcbiAgICAgICAgICAvLyBzdXBwb3J0IGZvciBtdWx0aS1hc3NldCBjb25zb2xpZGF0aW9uXG4gICAgICAgICAgaWYgKHRoaXMuX211bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTnVtYmVyT2ZBc3NldHMgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fbXVsdGlBc3NldHMubGVuZ3RoLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoTUlOX0FEQV9GT1JfT05FX0FTU0VUKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzID1cbiAgICAgICAgICAgICAgbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQuY2hlY2tlZF9tdWwodG90YWxOdW1iZXJPZkFzc2V0cyk7XG5cbiAgICAgICAgICAgIGlmICghY2hhbmdlLmxlc3NfdGhhbihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cykpIHtcbiAgICAgICAgICAgICAgdGhpcy5fbXVsdGlBc3NldHMuZm9yRWFjaCgoYXNzZXQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRCdWlsZGVyID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRCdWlsZGVyLm5ldygpO1xuICAgICAgICAgICAgICAgIC8vIGNoYW5nZUFkZHJlc3MgaXMgdGhlIHJvb3QgYWRkcmVzcywgd2hpY2ggaXMgd2hlcmUgd2Ugd2FudCB0aGUgdG9rZW5zIGFzc2V0cyB0byBiZSBzZW50IHRvXG4gICAgICAgICAgICAgICAgY29uc3QgdG9BZGRyZXNzID0gdXRpbC5nZXRXYWxsZXRBZGRyZXNzKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NldE5hbWUgPSBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzc2V0LmFzc2V0X25hbWUsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9saWN5SWQgPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oYXNzZXQucG9saWN5X2lkLCAnaGV4JykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpQXNzZXQgPSBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0Lm5ldygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0cyA9IENhcmRhbm9XYXNtLkFzc2V0cy5uZXcoKTtcbiAgICAgICAgICAgICAgICBhc3NldHMuaW5zZXJ0KGFzc2V0TmFtZSwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKGFzc2V0LnF1YW50aXR5KSk7XG4gICAgICAgICAgICAgICAgbXVsdGlBc3NldC5pbnNlcnQocG9saWN5SWQsIGFzc2V0cyk7XG5cbiAgICAgICAgICAgICAgICB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEFtb3VudEJ1aWxkZXIud2l0aF9jb2luX2FuZF9hc3NldChcbiAgICAgICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LFxuICAgICAgICAgICAgICAgICAgbXVsdGlBc3NldFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0eE91dHB1dCA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgLy8gZmluYWxseSBzZW5kIHRoZSByZW1haW5pbmcgQURBIGluIGl0cyBvd24gb3V0cHV0XG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ091dHB1dEFtb3VudCA9IGNoYW5nZS5jaGVja2VkX3N1YihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyk7XG4gICAgICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhyZW1haW5pbmdPdXRwdXRBbW91bnQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdG8gY29uc29saWRhdGUsIHlvdSBvbmx5IGhhdmUgMSBvdXRwdXQgd2hpY2ggaXMgQURBIGFsb25lXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoY2hhbmdlQWRkcmVzcywgQ2FyZGFub1dhc20uVmFsdWUubmV3KGNoYW5nZSkpO1xuICAgICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpc24ndCBhIGNvbnNvbGlkYXRlIHJlcXVlc3QsIHdoYXRldmVyIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIHNlbnQgYmFjayB0byB0aGUgcm9vdGFkZHJlc3MgaXMgYWRkZWQgYXMgYSBzZXBhcmF0ZSBvdXRwdXQgaGVyZVxuICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0eEJvZHkgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuICAgICAgdHhCb2R5LnNldF90dGwoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3R0bC50b1N0cmluZygpKSk7XG4gICAgICBjb25zdCB0eEhhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4Qm9keSk7XG5cbiAgICAgIC8vIHdlIGFkZCB3aXRuZXNzZXMgb25jZSBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBzaWduZXJzIGZvciBjYWxjdWxhdGluZyB0aGUgZmVlXG4gICAgICBjb25zdCB3aXRuZXNzU2V0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25XaXRuZXNzU2V0Lm5ldygpO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5mcm9tX25vcm1hbF9ieXRlcyhCdWZmZXIuZnJvbShwcnYsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmdldEFsbFNpZ25hdHVyZXMoKS5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KFxuICAgICAgICAgIENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZChDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzcy5uZXcodmtleSwgZWQyNTVTaWcpKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHZrZXlXaXRuZXNzZXMubGVuKCkgPT09IDApIHtcbiAgICAgICAgY29uc3QgcHJ2ID0gQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5nZW5lcmF0ZV9lZDI1NTE5KCk7XG4gICAgICAgIGNvbnN0IHZrZXlXaXRuZXNzID0gQ2FyZGFub1dhc20ubWFrZV92a2V5X3dpdG5lc3ModHhIYXNoLCBwcnYpO1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2l0bmVzc1NldC5zZXRfdmtleXModmtleVdpdG5lc3Nlcyk7XG5cbiAgICAgIC8vIGFkZCBpbiB3aXRoZHJhd2FsIGlmIHRoaXMgaXMgYSB3aXRoZHJhd2FsIHR4XG4gICAgICBpZiAodGhpcy5fd2l0aGRyYXdhbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB3aXRoZHJhd2FscyA9IENhcmRhbm9XYXNtLldpdGhkcmF3YWxzLm5ldygpO1xuICAgICAgICB0aGlzLl93aXRoZHJhd2Fscy5mb3JFYWNoKCh3aXRoZHJhd2FsOiBXaXRoZHJhd2FsKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3MuZnJvbV9hZGRyZXNzKFxuICAgICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih3aXRoZHJhd2FsLnN0YWtlQWRkcmVzcylcbiAgICAgICAgICApO1xuICAgICAgICAgIHdpdGhkcmF3YWxzLmluc2VydChyZXdhcmRBZGRyZXNzISwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhCb2R5LnNldF93aXRoZHJhd2Fscyh3aXRoZHJhd2Fscyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBpbiBjZXJ0aWZpY2F0ZXMgdG8gZ2V0IG1vY2sgc2l6ZVxuICAgICAgY29uc3QgZHJhZnRDZXJ0cyA9IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcy5uZXcoKTtcbiAgICAgIGZvciAoY29uc3QgY2VydCBvZiB0aGlzLl9jZXJ0cykge1xuICAgICAgICBkcmFmdENlcnRzLmFkZChjZXJ0KTtcbiAgICAgIH1cbiAgICAgIHR4Qm9keS5zZXRfY2VydHMoZHJhZnRDZXJ0cyk7XG5cbiAgICAgIGNvbnN0IHR4RHJhZnQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5uZXcodHhCb2R5LCB3aXRuZXNzU2V0KTtcbiAgICAgIGNvbnN0IGxpbmVhckZlZSA9IENhcmRhbm9XYXNtLkxpbmVhckZlZS5uZXcoXG4gICAgICAgIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cignNDQnKSxcbiAgICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCcxNTUzODEnKVxuICAgICAgKTtcblxuICAgICAgLy8gY2FsY3VsYXRlIHRoZSBmZWUgYmFzZWQgb2ZmIG91ciBkdW1teSB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgZmVlID0gQ2FyZGFub1dhc20ubWluX2ZlZSh0eERyYWZ0LCBsaW5lYXJGZWUpLmNoZWNrZWRfYWRkKEJpZ051bS5mcm9tX3N0cignNDQwJykpO1xuICAgICAgdGhpcy5fZmVlID0gZmVlO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5mZWUodGhpcy5fZmVlLnRvX3N0cigpKTtcbiAgICAvLyBub3cgY2FsY3VsYXRlIHRoZSBjaGFuZ2UgYmFzZWQgb2ZmIG9mIDx1dHhvQmFsYW5jZT4gLSA8ZmVlPiAtIDxhbW91bnRUb1NlbmQ+XG4gICAgLy8gcmVzZXQgdGhlIG91dHB1dHMgY29sbGVjdGlvbiBiZWNhdXNlIG5vdyBvdXIgbGFzdCBvdXRwdXQgaGFzIGNoYW5nZWRcbiAgICBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IG11bHRpQXNzZXRzID0gb3V0cHV0Lm11bHRpQXNzZXRzIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQ7XG4gICAgICBpZiAobXVsdGlBc3NldHMpIHtcbiAgICAgICAgY29uc3QgcG9saWN5SWQgPSBtdWx0aUFzc2V0cy5rZXlzKCkuZ2V0KDApO1xuICAgICAgICBjb25zdCBhc3NldHMgPSBtdWx0aUFzc2V0cy5nZXQocG9saWN5SWQpO1xuICAgICAgICBjb25zdCBhc3NldE5hbWUgPSBhc3NldHMhLmtleXMoKS5nZXQoMCk7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gYXNzZXRzIS5nZXQoYXNzZXROYW1lKTtcbiAgICAgICAgbGV0IHR4T3V0cHV0QnVpbGRlciA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0QnVpbGRlci5uZXcoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpO1xuICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICB0eE91dHB1dEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIud2l0aF9hZGRyZXNzKHRvQWRkcmVzcyk7XG4gICAgICAgIGxldCB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIubmV4dCgpO1xuICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgY29uc3QgYXNzZXQgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgICAgIGFzc2V0Lmluc2VydChhc3NldE5hbWUsIHF1YW50aXR5ISk7XG4gICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldCk7XG4gICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KG91dHB1dEFtb3VudCwgbXVsdGlBc3NldCk7XG4gICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dHMuYWRkKFxuICAgICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICAgIHV0aWwuZ2V0V2FsbGV0QWRkcmVzcyhvdXRwdXQuYWRkcmVzcyksXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5fY2hhbmdlQWRkcmVzcyAmJiB0aGlzLl9zZW5kZXJCYWxhbmNlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gdXRpbC5nZXRXYWxsZXRBZGRyZXNzKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgY29uc3QgdXR4b0JhbGFuY2UgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSk7XG5cbiAgICAgIGNvbnN0IGFkanVzdG1lbnQgPSBCaWdOdW0uZnJvbV9zdHIoJzIwMDAwMDAnKTtcbiAgICAgIGxldCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpLmNoZWNrZWRfc3ViKHRvdGFsQW1vdW50VG9TZW5kKTtcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyB8fCB0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltKSB7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRvdGFsQW1vdW50VG9TZW5kIGlzIDAsIGl0cyBjb25zb2xpZGF0aW9uXG4gICAgICBpZiAodG90YWxBbW91bnRUb1NlbmQudG9fc3RyKCkgPT0gJzAnKSB7XG4gICAgICAgIC8vIHN1cHBvcnQgZm9yIG11bHRpLWFzc2V0IGNvbnNvbGlkYXRpb25cbiAgICAgICAgaWYgKHRoaXMuX211bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCB0b3RhbE51bWJlck9mQXNzZXRzID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX211bHRpQXNzZXRzLmxlbmd0aC50b1N0cmluZygpKTtcbiAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cignMTUwMDAwMCcpO1xuICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzID0gbWluQW1vdW50TmVlZGVkRm9yT25lQXNzZXRPdXRwdXQuY2hlY2tlZF9tdWwodG90YWxOdW1iZXJPZkFzc2V0cyk7XG5cbiAgICAgICAgICBpZiAoIWNoYW5nZS5sZXNzX3RoYW4obWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpKSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aUFzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRCdWlsZGVyID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRCdWlsZGVyLm5ldygpO1xuICAgICAgICAgICAgICAvLyBjaGFuZ2VBZGRyZXNzIGlzIHRoZSByb290IGFkZHJlc3MsIHdoaWNoIGlzIHdoZXJlIHdlIHdhbnQgdGhlIHRva2VucyBhc3NldHMgdG8gYmUgc2VudCB0b1xuICAgICAgICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSB1dGlsLmdldFdhbGxldEFkZHJlc3ModGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNzZXQuYXNzZXRfbmFtZSwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgY29uc3QgcG9saWN5SWQgPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oYXNzZXQucG9saWN5X2lkLCAnaGV4JykpO1xuICAgICAgICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXNzZXRzID0gQ2FyZGFub1dhc20uQXNzZXRzLm5ldygpO1xuICAgICAgICAgICAgICBhc3NldHMuaW5zZXJ0KGFzc2V0TmFtZSwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKGFzc2V0LnF1YW50aXR5KSk7XG4gICAgICAgICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldHMpO1xuXG4gICAgICAgICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KFxuICAgICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LFxuICAgICAgICAgICAgICAgIG11bHRpQXNzZXRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCB0eE91dHB1dCA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgICAgICBvdXRwdXRzLmFkZCh0eE91dHB1dCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gZmluYWxseSBzZW5kIHRoZSByZW1haW5pbmcgQURBIGluIGl0cyBvd24gb3V0cHV0XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdPdXRwdXRBbW91bnQgPSBjaGFuZ2UuY2hlY2tlZF9zdWIobWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcocmVtYWluaW5nT3V0cHV0QW1vdW50KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICdJbnN1ZmZpY2llbnQgZnVuZHM6IG5lZWQgYSBtaW5pbXVtIG9mIDEuNSBBREEgcGVyIG91dHB1dCB0byBjb25zdHJ1Y3QgdG9rZW4gY29uc29saWRhdGlvbidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdG8gY29uc29saWRhdGUsIHlvdSBvbmx5IGhhdmUgMSBvdXRwdXQgd2hpY2ggaXMgQURBIGFsb25lXG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGEgY29uc29saWRhdGUgcmVxdWVzdCwgd2hhdGV2ZXIgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgc2VudCBiYWNrIHRvIHRoZSByb290YWRkcmVzcyBpcyBhZGRlZCBhcyBhIHNlcGFyYXRlIG91dHB1dCBoZXJlXG4gICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHhSYXcgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuXG4gICAgY29uc3QgY2VydHMgPSBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXMubmV3KCk7XG4gICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICBjZXJ0cy5hZGQoY2VydCk7XG4gICAgfVxuICAgIHR4UmF3LnNldF9jZXJ0cyhjZXJ0cyk7XG5cbiAgICAvLyBhZGQgaW4gd2l0aGRyYXdhbCBpZiB0aGlzIGlzIGEgd2l0aGRyYXdhbCB0eFxuICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IENhcmRhbm9XYXNtLldpdGhkcmF3YWxzLm5ldygpO1xuICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih3aXRoZHJhd2FsLnN0YWtlQWRkcmVzcylcbiAgICAgICAgKTtcbiAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHR4UmF3LnNldF93aXRoZHJhd2Fscyh3aXRoZHJhd2Fscyk7XG4gICAgfVxuXG4gICAgdHhSYXcuc2V0X3R0bChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fdHRsLnRvU3RyaW5nKCkpKTtcbiAgICBjb25zdCB0eFJhd0hhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4UmF3KTtcblxuICAgIC8vIG5vdyBhZGQgdGhlIHdpdG5lc3NlcyBhZ2FpbiB0aGlzIHRpbWUgZm9yIHJlYWwuIFdlIG5lZWQgdG8gZG8gdGhpcyBhZ2FpblxuICAgIC8vIGJlY2F1c2Ugbm93IHRoYXQgd2UndmUgYWRkZWQgb3VyIHJlYWwgZmVlIGFuZCBjaGFuZ2Ugb3V0cHV0LCB3ZSBoYXZlIGEgZGlmZmVyZW5jZSB0cmFuc2FjdGlvbiBoYXNoXG4gICAgY29uc3Qgd2l0bmVzc1NldCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uV2l0bmVzc1NldC5uZXcoKTtcbiAgICBjb25zdCB2a2V5V2l0bmVzc2VzID0gQ2FyZGFub1dhc20uVmtleXdpdG5lc3Nlcy5uZXcoKTtcbiAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKFxuICAgICAgICB0eFJhd0hhc2gsXG4gICAgICAgIENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZnJvbV9ub3JtYWxfYnl0ZXMoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpXG4gICAgICApO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGNvc21ldGljIHNpZ25hdHVyZSBhcnJheSBpbiBuYXRpdmUgdHhuIHdyYXBwZXIgdG8gcHJldmVudCBkdXBsaWNhdGUgd2hlbiBidWlsZGVyIGlzIGluaXRlZCBmcm9tIGEgcGFydGlhbGx5IHdpdG5lc3NlZCB0eG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID0gMDtcbiAgICB0aGlzLmdldEFsbFNpZ25hdHVyZXMoKS5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHZrZXkgPSBDYXJkYW5vV2FzbS5Wa2V5Lm5ldyhDYXJkYW5vV2FzbS5QdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUucHVibGljS2V5LnB1YiwgJ2hleCcpKSk7XG4gICAgICBjb25zdCBlZDI1NVNpZyA9IENhcmRhbm9XYXNtLkVkMjU1MTlTaWduYXR1cmUuZnJvbV9ieXRlcyhzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlLnB1c2goc2lnbmF0dXJlLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIH0pO1xuICAgIHdpdG5lc3NTZXQuc2V0X3ZrZXlzKHZrZXlXaXRuZXNzZXMpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnRyYW5zYWN0aW9uID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24ubmV3KHR4UmF3LCB3aXRuZXNzU2V0KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXJzLnB1c2gobmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBLZXkgdmFsaWRhdGlvbiBmYWlsZWRgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLmZyb21fYnl0ZXMocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgcHVibGljS2V5LCBzaWduYXR1cmUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFNpZ25hdHVyZXMoKTogU2lnbmF0dXJlW10ge1xuICAgIHJldHVybiB0aGlzLl9pbml0U2lnbmF0dXJlcy5jb25jYXQodGhpcy5fc2lnbmF0dXJlcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -70,7 +70,7 @@ describe('ADA Token Operations', async () => {
|
|
|
70
70
|
const expectedChangeAda = (totalInput -
|
|
71
71
|
1500000 /* min ada for change token utxo */ -
|
|
72
72
|
1500000 /* min ada for recipient token utxo*/ -
|
|
73
|
-
|
|
73
|
+
173597) /* fee */
|
|
74
74
|
.toString();
|
|
75
75
|
const expectedChangeToken = '80';
|
|
76
76
|
const txBuilder = factory.getTransferBuilder();
|
|
@@ -145,7 +145,7 @@ describe('ADA Token Operations', async () => {
|
|
|
145
145
|
1500000 /* min ada for change token utxo */ -
|
|
146
146
|
1500000 /* min ada for recipient token utxo*/ -
|
|
147
147
|
1500000 /* min ada for unsupported token change utxo */ -
|
|
148
|
-
|
|
148
|
+
179889) /* fee */
|
|
149
149
|
.toString();
|
|
150
150
|
const expectedChangeToken = '80';
|
|
151
151
|
const txBuilder = factory.getTransferBuilder();
|
|
@@ -283,4 +283,4 @@ describe('ADA Token Operations', async () => {
|
|
|
283
283
|
await txBuilder.build().should.rejectedWith('Insufficient qty: not enough token qty to cover receiver output');
|
|
284
284
|
});
|
|
285
285
|
});
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5XaXRoZHJhd2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuV2l0aGRyYXdhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsdURBQXlDO0FBQ3pDLG1DQUFzRDtBQUN0RCxpREFBNEM7QUFDNUMsc0ZBQXdFO0FBR3hFLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sUUFBUSxHQUFHLDBEQUEwRCxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNyQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxNQUFNLFdBQVcsR0FBRyw4Q0FBOEMsQ0FBQztJQUVuRSxNQUFNLG1CQUFtQixHQUFHLDBEQUEwRCxDQUFDO0lBQ3ZGLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN6RixNQUFNLGVBQWUs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ZUFBZTtZQUN4QixNQUFNLEVBQUUsR0FBRyxFQUFFLDJFQUEyRTtZQUN4RixXQUFXLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLFFBQVE7Z0JBQ1IsV0FBVzthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFL0IsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO0lBQ2pILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuXG5kZXNjcmliZSgnQURBIFRva2VuIE9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhZGEnKSk7XG5cbiAgY29uc3QgcmVjZWl2ZXJBZGRyZXNzID0gdGVzdERhdGEucmF3VHgub3V0cHV0QWRkcmVzczIuYWRkcmVzcztcbiAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IHRlc3REYXRhLnJhd1R4Lm91dHB1dEFkZHJlc3MxLmFkZHJlc3M7XG5cbiAgY29uc3QgcG9saWN5SWQgPSAnZTE2YzJkYzhhZTkzN2U4ZDM3OTBjN2ZkNzE2OGQ3Yjk5NDYyMWJhMTRjYTExNDE1ZjM5ZmVkNzInO1xuICBjb25zdCBwb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleChwb2xpY3lJZCk7XG4gIGNvbnN0IGFzc2V0TmFtZSA9ICd0YWRhOndhdGVyJztcbiAgY29uc3QgbmFtZSA9ICdXQVRFUic7XG4gIGNvbnN0IGFzY2lpRW5jb2RlZE5hbWUgPSBCdWZmZXIuZnJvbShuYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGZpbmdlcnByaW50ID0gJ2Fzc2V0MW42OXhmNjBkMDc2MHh2bjh2MmZmZDVmcnZzbTBjbDJyOGhmamY2JztcblxuICBjb25zdCB1bnN1cHBvcnRlZFBvbGljeUlkID0gJzI3OWM5MDlmMzQ4ZTUzM2RhNTgwODg5OGY4N2Y5YTE0YmIyYzNkZmJiYWNjY2Q2MzFkOTI3YTNmJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRQb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleCh1bnN1cHBvcnRlZFBvbGljeUlkKTtcbiAgY29uc3QgdW5zdXBwb3J0ZWROYW1lID0gJ0JJVEdPJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRBc2NpaUVuY29kZWROYW1lID0gQnVmZmVyLmZyb20odW5zdXBwb3J0ZWROYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHVuc3VwcG9ydGVkRmluZ2VycHJpbnQgPSAnYXNzZXQxbThoMGdrN2Y2eDVqNXFnMHg1bTRxNWY1ajVxZzB4NW00cTVmNWonO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIHRva2VuICR7YXNzZXROYW1lfSAtIGFkYSArICR7YXNzZXROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VBZGEgPSAoXG4gICAgICB0b3RhbElucHV0IC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgY2hhbmdlIHRva2VuIHV0eG8gKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciByZWNpcGllbnQgdG9rZW4gdXR4byovIC1cbiAgICAgIDEwMDAwMDBcbiAgICApIC8qIGZlZSAqL1xuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VUb2tlbiA9ICc4MCc7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG5cbiAgICAvLyBDaGVjayBvdXRwdXRzIChzaG91bGQgaW5jbHVkZSBtdWx0aS1hc3NldCBhbmQgcmVndWxhciBjaGFuZ2UpXG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBPbmUgb3V0cHV0IHNob3VsZCBoYXZlIHRoZSBtdWx0aS1hc3NldCBjaGFuZ2UgYW5kIHRoZSBvdGhlciBmb3IgdGhlIHRyYW5zZmVyXG4gICAgY29uc3QgYXNzZXRPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpO1xuICAgIGFzc2V0T3V0cHV0IS5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgLy8gVmVyaWZ5IGlucHV0cyBhbmQgb3V0cHV0c1xuICAgIGNvbnN0IGlucHV0ID0gdHhEYXRhLmlucHV0c1swXTtcbiAgICBpbnB1dC50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnKTtcbiAgICBpbnB1dC50cmFuc2FjdGlvbl9pbmRleC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNlaXZlciBvdXRwdXRcbiAgICBjb25zdCByZWNlaXZlck91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjZWl2ZXJBZGRyZXNzKTtcbiAgICByZWNlaXZlck91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHJlY2VpdmVyT3V0cHV0WzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChyZWNlaXZlck91dHB1dFswXS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKHF1YW50aXR5KTtcblxuICAgIC8vIFZhbGlkYXRlIGNoYW5nZSBvdXRwdXRzIChvbmUgd2l0aCBhc3NldCBhbmQgb25lIHdpdGhvdXQpXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBzZW5kZXJBZGRyZXNzKTtcbiAgICBjaGFuZ2VPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICBjb25zdCBjaGFuZ2VXaXRoQXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhBc3NldCk7XG4gICAgY2hhbmdlV2l0aEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxNTAwMDAwJyk7IC8vIE1pbmltdW0gQURBIGZvciBhc3NldCBvdXRwdXRcbiAgICAoY2hhbmdlV2l0aEFzc2V0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlVG9rZW4pO1xuXG4gICAgY29uc3QgY2hhbmdlV2l0aG91dEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzID09PSB1bmRlZmluZWQpO1xuICAgIHNob3VsZC5leGlzdChjaGFuZ2VXaXRob3V0QXNzZXQpO1xuICAgIGNoYW5nZVdpdGhvdXRBc3NldCEuYW1vdW50LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZUFkYSk7IC8vIFJlbWFpbmluZyBBREEgYWZ0ZXIgZmVlcyBhbmQgbWluIEFEQXNcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggdG9rZW4gJHthc3NldE5hbWV9IC0gYWRhICsgJHthc3NldE5hbWV9ICsgdW5zdXBwb3J0ZWQgdG9rZW5gLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVhbnRpdHkgPSAnMjAnO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAyMDAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICAgIFt1bnN1cHBvcnRlZEZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMDAwJyxcbiAgICAgICAgcG9saWN5X2lkOiB1bnN1cHBvcnRlZFBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiB1bnN1cHBvcnRlZEFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VBZGEgPSAoXG4gICAgICB0b3RhbElucHV0IC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgY2hhbmdlIHRva2VuIHV0eG8gKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciByZWNpcGllbnQgdG9rZW4gdXR4byovIC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgdW5zdXBwb3J0ZWQgdG9rZW4gY2hhbmdlIHV0eG8gKi8gLVxuICAgICAgMTAwMDAwMFxuICAgICkgLyogZmVlICovXG4gICAgICAudG9TdHJpbmcoKTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZVRva2VuID0gJzgwJztcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuXG4gICAgLy8gQ2hlY2sgb3V0cHV0cyAoc2hvdWxkIGluY2x1ZGUgbXVsdGktYXNzZXQgYW5kIHJlZ3VsYXIgY2hhbmdlKVxuICAgIHR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoNCk7XG4gICAgdHhEYXRhLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgLy8gT25lIG91dHB1dCBzaG91bGQgaGF2ZSB0aGUgbXVsdGktYXNzZXQgY2hhbmdlIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSB0cmFuc2ZlclxuICAgIGNvbnN0IGFzc2V0T3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBhc3NldE91dHB1dCEubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcblxuICAgIC8vIFZlcmlmeSBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICB0eERhdGEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLnNob3VsZC5lcXVhbCgnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScpO1xuICAgIHR4RGF0YS5pbnB1dHNbMF0udHJhbnNhY3Rpb25faW5kZXguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgdHhEYXRhLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjInKTtcbiAgICB0eERhdGEuaW5wdXRzWzFdLnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dFxuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgY2hhbmdlIG91dHB1dHMgKG9uZSB3aXRoIHN1cHBvcnRlZCB0b2tlbiwgb25lIHdpdGggdW5zdXBwb3J0ZWQgdG9rZW4gYW5kIG9uZSBmb3IgcHVyZSBhZGEpXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSBzZW5kZXJBZGRyZXNzKTtcbiAgICBjaGFuZ2VPdXRwdXQubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcblxuICAgIGNvbnN0IGNoYW5nZVdpdGhBc3NldCA9IGNoYW5nZU91dHB1dC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzICE9PSB1bmRlZmluZWQpO1xuICAgIGNoYW5nZVdpdGhBc3NldC5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIGxldCB0b2tlbnMgPSAwO1xuICAgIGNoYW5nZVdpdGhBc3NldC5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIG91dHB1dCEuYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgICBjb25zdCBzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSA9IChvdXRwdXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgICAuZ2V0X2Fzc2V0KHBvbGljeVNjcmlwdEhhc2gsIENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKSlcbiAgICAgICAgLnRvX3N0cigpO1xuICAgICAgY29uc3QgdW5zdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSA9IChvdXRwdXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgICAuZ2V0X2Fzc2V0KFxuICAgICAgICAgIHVuc3VwcG9ydGVkUG9saWN5U2NyaXB0SGFzaCxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKHVuc3VwcG9ydGVkQXNjaWlFbmNvZGVkTmFtZSwgJ2hleCcpKVxuICAgICAgICApXG4gICAgICAgIC50b19zdHIoKTtcbiAgICAgIGlmIChzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSAhPT0gJzAnKSB7XG4gICAgICAgIHN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZVRva2VuKTtcbiAgICAgICAgdG9rZW5zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnN1cHBvcnRlZFRva2VuQ2hhbmdlUXR5IS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHRva2VucysrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRva2Vucy5zaG91bGQuZXF1YWwoMik7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRob3V0QXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgPT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhvdXRBc3NldCk7XG4gICAgY2hhbmdlV2l0aG91dEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlQWRhKTsgLy8gUmVtYWluaW5nIEFEQSBhZnRlciBmZWVzIGFuZCBtaW4gQURBc1xuICB9KTtcblxuICBpdChgc2hvdWxkIGZhaWwgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoICR7YXNzZXROYW1lfSB0b2tlbiBhbmQgaW5zdWZmaWNpZW50IG1pbmltdW0gQURBYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDtcbiAgICBjb25zdCB0b3RhbEFzc2V0TGlzdCA9IHtcbiAgICAgIFtmaW5nZXJwcmludF06IHtcbiAgICAgICAgcXVhbnRpdHk6ICcxMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlclxuICAgICAgLmJ1aWxkKClcbiAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKFxuICAgICAgICAnSW5zdWZmaWNpZW50IGZ1bmRzOiBuZWVkIGEgbWluaW11bSBvZiAxNTAwMDAwIGxvdmVsYWNlIHBlciBvdXRwdXQgdG8gY29uc3RydWN0IHRva2VuIHRyYW5zYWN0aW9ucydcbiAgICAgICk7XG4gIH0pO1xuXG4gIGl0KGBzaG91bGQgZmFpbCB0byBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggJHthc3NldE5hbWV9IGFuZCBpbnN1ZmZpY2llbnQgdG9rZW4gcXR5YCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1YW50aXR5ID0gJzIwJztcbiAgICBjb25zdCB0b3RhbElucHV0ID0gMjAwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnNScsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIub3V0cHV0KHtcbiAgICAgIGFkZHJlc3M6IHJlY2VpdmVyQWRkcmVzcyxcbiAgICAgIGFtb3VudDogJzAnLCAvLyBTZXQgQURBIGFtb3VudCB0byAwIGZvciB0b2tlbiB0cmFuc2ZlciAobWluIEFEQSBpcyBoYW5kbGVkIGluIHNkayBidWlsZClcbiAgICAgIG11bHRpQXNzZXRzOiB7XG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIHF1YW50aXR5LFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0eEJ1aWxkZXIuY2hhbmdlQWRkcmVzcyhzZW5kZXJBZGRyZXNzLCB0b3RhbElucHV0LnRvU3RyaW5nKCksIHRvdGFsQXNzZXRMaXN0KTtcbiAgICB0eEJ1aWxkZXIudHRsKDgwMDAwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmlzVG9rZW5UcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnSW5zdWZmaWNpZW50IHF0eTogbm90IGVub3VnaCB0b2tlbiBxdHkgdG8gY292ZXIgcmVjZWl2ZXIgb3V0cHV0Jyk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5XaXRoZHJhd2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3Rva2VuV2l0aGRyYXdhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsdURBQXlDO0FBQ3pDLG1DQUFzRDtBQUN0RCxpREFBNEM7QUFDNUMsc0ZBQXdFO0FBR3hFLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sUUFBUSxHQUFHLDBEQUEwRCxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNyQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxNQUFNLFdBQVcsR0FBRyw4Q0FBOEMsQ0FBQztJQUVuRSxNQUFNLG1CQUFtQixHQUFHLDBEQUEwRCxDQUFDO0lBQ3ZGLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN6RixNQUFNLGVBQWUs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ZUFBZTtZQUN4QixNQUFNLEVBQUUsR0FBRyxFQUFFLDJFQUEyRTtZQUN4RixXQUFXLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLFFBQVE7Z0JBQ1IsV0FBVzthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFL0IsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO0lBQ2pILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuXG5kZXNjcmliZSgnQURBIFRva2VuIE9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhZGEnKSk7XG5cbiAgY29uc3QgcmVjZWl2ZXJBZGRyZXNzID0gdGVzdERhdGEucmF3VHgub3V0cHV0QWRkcmVzczIuYWRkcmVzcztcbiAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IHRlc3REYXRhLnJhd1R4Lm91dHB1dEFkZHJlc3MxLmFkZHJlc3M7XG5cbiAgY29uc3QgcG9saWN5SWQgPSAnZTE2YzJkYzhhZTkzN2U4ZDM3OTBjN2ZkNzE2OGQ3Yjk5NDYyMWJhMTRjYTExNDE1ZjM5ZmVkNzInO1xuICBjb25zdCBwb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleChwb2xpY3lJZCk7XG4gIGNvbnN0IGFzc2V0TmFtZSA9ICd0YWRhOndhdGVyJztcbiAgY29uc3QgbmFtZSA9ICdXQVRFUic7XG4gIGNvbnN0IGFzY2lpRW5jb2RlZE5hbWUgPSBCdWZmZXIuZnJvbShuYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGZpbmdlcnByaW50ID0gJ2Fzc2V0MW42OXhmNjBkMDc2MHh2bjh2MmZmZDVmcnZzbTBjbDJyOGhmamY2JztcblxuICBjb25zdCB1bnN1cHBvcnRlZFBvbGljeUlkID0gJzI3OWM5MDlmMzQ4ZTUzM2RhNTgwODg5OGY4N2Y5YTE0YmIyYzNkZmJiYWNjY2Q2MzFkOTI3YTNmJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRQb2xpY3lTY3JpcHRIYXNoID0gQ2FyZGFub1dhc20uU2NyaXB0SGFzaC5mcm9tX2hleCh1bnN1cHBvcnRlZFBvbGljeUlkKTtcbiAgY29uc3QgdW5zdXBwb3J0ZWROYW1lID0gJ0JJVEdPJztcbiAgY29uc3QgdW5zdXBwb3J0ZWRBc2NpaUVuY29kZWROYW1lID0gQnVmZmVyLmZyb20odW5zdXBwb3J0ZWROYW1lLCAnYXNjaWknKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHVuc3VwcG9ydGVkRmluZ2VycHJpbnQgPSAnYXNzZXQxbThoMGdrN2Y2eDVqNXFnMHg1bTRxNWY1ajVxZzB4NW00cTVmNWonO1xuXG4gIGl0KGBzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIHRva2VuICR7YXNzZXROYW1lfSAtIGFkYSArICR7YXNzZXROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VBZGEgPSAoXG4gICAgICB0b3RhbElucHV0IC1cbiAgICAgIDE1MDAwMDAgLyogbWluIGFkYSBmb3IgY2hhbmdlIHRva2VuIHV0eG8gKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciByZWNpcGllbnQgdG9rZW4gdXR4byovIC1cbiAgICAgIDE3MzU5N1xuICAgICkgLyogZmVlICovXG4gICAgICAudG9TdHJpbmcoKTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZVRva2VuID0gJzgwJztcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIC8vIENoZWNrIG91dHB1dHMgKHNob3VsZCBpbmNsdWRlIG11bHRpLWFzc2V0IGFuZCByZWd1bGFyIGNoYW5nZSlcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIE9uZSBvdXRwdXQgc2hvdWxkIGhhdmUgdGhlIG11bHRpLWFzc2V0IGNoYW5nZSBhbmQgdGhlIG90aGVyIGZvciB0aGUgdHJhbnNmZXJcbiAgICBjb25zdCBhc3NldE91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgYXNzZXRPdXRwdXQhLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAvLyBWZXJpZnkgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgY29uc3QgaW5wdXQgPSB0eERhdGEuaW5wdXRzWzBdO1xuICAgIGlucHV0LnRyYW5zYWN0aW9uX2lkLnNob3VsZC5lcXVhbCgnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScpO1xuICAgIGlucHV0LnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmVyIG91dHB1dFxuICAgIGNvbnN0IHJlY2VpdmVyT3V0cHV0ID0gdHhEYXRhLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSByZWNlaXZlckFkZHJlc3MpO1xuICAgIHJlY2VpdmVyT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVjZWl2ZXJPdXRwdXRbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTUwMDAwMCcpOyAvLyBNaW5pbXVtIEFEQSBmb3IgYXNzZXQgb3V0cHV0XG4gICAgKHJlY2VpdmVyT3V0cHV0WzBdLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwocXVhbnRpdHkpO1xuXG4gICAgLy8gVmFsaWRhdGUgY2hhbmdlIG91dHB1dHMgKG9uZSB3aXRoIGFzc2V0IGFuZCBvbmUgd2l0aG91dClcbiAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSB0eERhdGEub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmFkZHJlc3MgPT09IHNlbmRlckFkZHJlc3MpO1xuICAgIGNoYW5nZU91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIGNvbnN0IGNoYW5nZVdpdGhBc3NldCA9IGNoYW5nZU91dHB1dC5maW5kKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBzaG91bGQuZXhpc3QoY2hhbmdlV2l0aEFzc2V0KTtcbiAgICBjaGFuZ2VXaXRoQXNzZXQhLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChjaGFuZ2VXaXRoQXNzZXQhLm11bHRpQXNzZXRzISBhcyBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0KVxuICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAudG9fc3RyKClcbiAgICAgIC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VUb2tlbik7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRob3V0QXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmluZCgob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgPT09IHVuZGVmaW5lZCk7XG4gICAgc2hvdWxkLmV4aXN0KGNoYW5nZVdpdGhvdXRBc3NldCk7XG4gICAgY2hhbmdlV2l0aG91dEFzc2V0IS5hbW91bnQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkQ2hhbmdlQWRhKTsgLy8gUmVtYWluaW5nIEFEQSBhZnRlciBmZWVzIGFuZCBtaW4gQURBc1xuICB9KTtcblxuICBpdChgc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCB0b2tlbiAke2Fzc2V0TmFtZX0gLSBhZGEgKyAke2Fzc2V0TmFtZX0gKyB1bnN1cHBvcnRlZCB0b2tlbmAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzEwMCcsXG4gICAgICAgIHBvbGljeV9pZDogcG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IGFzY2lpRW5jb2RlZE5hbWUsXG4gICAgICB9LFxuICAgICAgW3Vuc3VwcG9ydGVkRmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwMDAnLFxuICAgICAgICBwb2xpY3lfaWQ6IHVuc3VwcG9ydGVkUG9saWN5SWQsXG4gICAgICAgIGFzc2V0X25hbWU6IHVuc3VwcG9ydGVkQXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBleHBlY3RlZENoYW5nZUFkYSA9IChcbiAgICAgIHRvdGFsSW5wdXQgLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciBjaGFuZ2UgdG9rZW4gdXR4byAqLyAtXG4gICAgICAxNTAwMDAwIC8qIG1pbiBhZGEgZm9yIHJlY2lwaWVudCB0b2tlbiB1dHhvKi8gLVxuICAgICAgMTUwMDAwMCAvKiBtaW4gYWRhIGZvciB1bnN1cHBvcnRlZCB0b2tlbiBjaGFuZ2UgdXR4byAqLyAtXG4gICAgICAxNzk4ODlcbiAgICApIC8qIGZlZSAqL1xuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRDaGFuZ2VUb2tlbiA9ICc4MCc7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbnB1dCh7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnLFxuICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IDEsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMicsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcblxuICAgIC8vIENoZWNrIG91dHB1dHMgKHNob3VsZCBpbmNsdWRlIG11bHRpLWFzc2V0IGFuZCByZWd1bGFyIGNoYW5nZSlcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDQpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIC8vIE9uZSBvdXRwdXQgc2hvdWxkIGhhdmUgdGhlIG11bHRpLWFzc2V0IGNoYW5nZSBhbmQgdGhlIG90aGVyIGZvciB0aGUgdHJhbnNmZXJcbiAgICBjb25zdCBhc3NldE91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgYXNzZXRPdXRwdXQhLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICAvLyBWZXJpZnkgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgdHhEYXRhLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZC5zaG91bGQuZXF1YWwoJzM2NzdlNzVjN2JhNjk5YmZkYzZjZDU3ZDQyZjI0NmY4NmY2M2FlZmQ3NjAyNTAwNmFjNzgzMTNmYWQyYmJhMjEnKTtcbiAgICB0eERhdGEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LnNob3VsZC5lcXVhbCgxKTtcblxuICAgIHR4RGF0YS5pbnB1dHNbMV0udHJhbnNhY3Rpb25faWQuc2hvdWxkLmVxdWFsKCczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIyJyk7XG4gICAgdHhEYXRhLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pbmRleC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNlaXZlciBvdXRwdXRcbiAgICBjb25zdCByZWNlaXZlck91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjZWl2ZXJBZGRyZXNzKTtcbiAgICByZWNlaXZlck91dHB1dC5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHJlY2VpdmVyT3V0cHV0WzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgIChyZWNlaXZlck91dHB1dFswXS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgIC5nZXRfYXNzZXQocG9saWN5U2NyaXB0SGFzaCwgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbShhc2NpaUVuY29kZWROYW1lLCAnaGV4JykpKVxuICAgICAgLnRvX3N0cigpXG4gICAgICAuc2hvdWxkLmVxdWFsKHF1YW50aXR5KTtcblxuICAgIC8vIFZhbGlkYXRlIGNoYW5nZSBvdXRwdXRzIChvbmUgd2l0aCBzdXBwb3J0ZWQgdG9rZW4sIG9uZSB3aXRoIHVuc3VwcG9ydGVkIHRva2VuIGFuZCBvbmUgZm9yIHB1cmUgYWRhKVxuICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IHR4RGF0YS5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gc2VuZGVyQWRkcmVzcyk7XG4gICAgY2hhbmdlT3V0cHV0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICBjb25zdCBjaGFuZ2VXaXRoQXNzZXQgPSBjaGFuZ2VPdXRwdXQuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5tdWx0aUFzc2V0cyAhPT0gdW5kZWZpbmVkKTtcbiAgICBjaGFuZ2VXaXRoQXNzZXQubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICBsZXQgdG9rZW5zID0gMDtcbiAgICBjaGFuZ2VXaXRoQXNzZXQuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBvdXRwdXQhLmFtb3VudC5zaG91bGQuZXF1YWwoJzE1MDAwMDAnKTsgLy8gTWluaW11bSBBREEgZm9yIGFzc2V0IG91dHB1dFxuICAgICAgY29uc3Qgc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgPSAob3V0cHV0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgICAgLmdldF9hc3NldChwb2xpY3lTY3JpcHRIYXNoLCBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSkpXG4gICAgICAgIC50b19zdHIoKTtcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgPSAob3V0cHV0IS5tdWx0aUFzc2V0cyEgYXMgQ2FyZGFub1dhc20uTXVsdGlBc3NldClcbiAgICAgICAgLmdldF9hc3NldChcbiAgICAgICAgICB1bnN1cHBvcnRlZFBvbGljeVNjcmlwdEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbSh1bnN1cHBvcnRlZEFzY2lpRW5jb2RlZE5hbWUsICdoZXgnKSlcbiAgICAgICAgKVxuICAgICAgICAudG9fc3RyKCk7XG4gICAgICBpZiAoc3VwcG9ydGVkVG9rZW5DaGFuZ2VRdHkgIT09ICcwJykge1xuICAgICAgICBzdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRDaGFuZ2VUb2tlbik7XG4gICAgICAgIHRva2VucysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRUb2tlbkNoYW5nZVF0eSEuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgICB0b2tlbnMrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0b2tlbnMuc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgY29uc3QgY2hhbmdlV2l0aG91dEFzc2V0ID0gY2hhbmdlT3V0cHV0LmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm11bHRpQXNzZXRzID09PSB1bmRlZmluZWQpO1xuICAgIHNob3VsZC5leGlzdChjaGFuZ2VXaXRob3V0QXNzZXQpO1xuICAgIGNoYW5nZVdpdGhvdXRBc3NldCEuYW1vdW50LnNob3VsZC5lcXVhbChleHBlY3RlZENoYW5nZUFkYSk7IC8vIFJlbWFpbmluZyBBREEgYWZ0ZXIgZmVlcyBhbmQgbWluIEFEQXNcbiAgfSk7XG5cbiAgaXQoYHNob3VsZCBmYWlsIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCAke2Fzc2V0TmFtZX0gdG9rZW4gYW5kIGluc3VmZmljaWVudCBtaW5pbXVtIEFEQWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDA7XG4gICAgY29uc3QgdG90YWxBc3NldExpc3QgPSB7XG4gICAgICBbZmluZ2VycHJpbnRdOiB7XG4gICAgICAgIHF1YW50aXR5OiAnMTAwJyxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5vdXRwdXQoe1xuICAgICAgYWRkcmVzczogcmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMCcsIC8vIFNldCBBREEgYW1vdW50IHRvIDAgZm9yIHRva2VuIHRyYW5zZmVyIChtaW4gQURBIGlzIGhhbmRsZWQgaW4gc2RrIGJ1aWxkKVxuICAgICAgbXVsdGlBc3NldHM6IHtcbiAgICAgICAgYXNzZXRfbmFtZTogYXNjaWlFbmNvZGVkTmFtZSxcbiAgICAgICAgcG9saWN5X2lkOiBwb2xpY3lJZCxcbiAgICAgICAgcXVhbnRpdHksXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHRvdGFsSW5wdXQudG9TdHJpbmcoKSwgdG90YWxBc3NldExpc3QpO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuaXNUb2tlblRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXJcbiAgICAgIC5idWlsZCgpXG4gICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aChcbiAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kczogbmVlZCBhIG1pbmltdW0gb2YgMTUwMDAwMCBsb3ZlbGFjZSBwZXIgb3V0cHV0IHRvIGNvbnN0cnVjdCB0b2tlbiB0cmFuc2FjdGlvbnMnXG4gICAgICApO1xuICB9KTtcblxuICBpdChgc2hvdWxkIGZhaWwgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoICR7YXNzZXROYW1lfSBhbmQgaW5zdWZmaWNpZW50IHRva2VuIHF0eWAsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBxdWFudGl0eSA9ICcyMCc7XG4gICAgY29uc3QgdG90YWxJbnB1dCA9IDIwMDAwMDAwO1xuICAgIGNvbnN0IHRvdGFsQXNzZXRMaXN0ID0ge1xuICAgICAgW2ZpbmdlcnByaW50XToge1xuICAgICAgICBxdWFudGl0eTogJzUnLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLm91dHB1dCh7XG4gICAgICBhZGRyZXNzOiByZWNlaXZlckFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICcwJywgLy8gU2V0IEFEQSBhbW91bnQgdG8gMCBmb3IgdG9rZW4gdHJhbnNmZXIgKG1pbiBBREEgaXMgaGFuZGxlZCBpbiBzZGsgYnVpbGQpXG4gICAgICBtdWx0aUFzc2V0czoge1xuICAgICAgICBhc3NldF9uYW1lOiBhc2NpaUVuY29kZWROYW1lLFxuICAgICAgICBwb2xpY3lfaWQ6IHBvbGljeUlkLFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgZmluZ2VycHJpbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgdG90YWxJbnB1dC50b1N0cmluZygpLCB0b3RhbEFzc2V0TGlzdCk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIHR4QnVpbGRlci5pc1Rva2VuVHJhbnNhY3Rpb24oKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0luc3VmZmljaWVudCBxdHk6IG5vdCBlbm91Z2ggdG9rZW4gcXR5IHRvIGNvdmVyIHJlY2VpdmVyIG91dHB1dCcpO1xuICB9KTtcbn0pO1xuIl19
|