@bitgo/sdk-coin-avaxp 5.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.0.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@5.0.0...@bitgo/sdk-coin-avaxp@5.0.1) (2024-04-08)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **sdk-coin-avaxp:** fix hard coded amount and default fee percentage ([5153f3d](https://github.com/BitGo/BitGoJS/commit/5153f3d572c0fe827b7d90e5e109acbd59b9c3ca))
11
+
6
12
  # [5.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@3.22.4...@bitgo/sdk-coin-avaxp@5.0.0) (2024-04-05)
7
13
 
8
14
  ### Bug Fixes
@@ -383,7 +383,7 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
383
383
  const { inputs, stakeOutputs, changeOutputs, utxos, credentials } = this.calculateUtxos();
384
384
  const baseTx = avalanchejs_1.avaxSerial.BaseTx.fromNative(this.transaction._networkID, this.transaction._blockchainID, changeOutputs, inputs, new Uint8Array() // default empty memo
385
385
  );
386
- const subnetValidator = avalanchejs_1.pvmSerial.SubnetValidator.fromNative(this._nodeID, this._startTime, this._endTime, BigInt(1e9), avalanchejs_1.networkIDs.PrimaryNetworkID);
386
+ const subnetValidator = avalanchejs_1.pvmSerial.SubnetValidator.fromNative(this._nodeID, this._startTime, this._endTime, this._stakeAmount, avalanchejs_1.networkIDs.PrimaryNetworkID);
387
387
  const signer = new avalanchejs_1.pvmSerial.Signer(new avalanchejs_1.pvmSerial.ProofOfPossession(avalanchejs_1.utils.hexToBuffer(this._blsPublicKey), avalanchejs_1.utils.hexToBuffer(this._blsSignature)));
388
388
  const outputOwners = new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses]
389
389
  .sort((a, b) => avalanchejs_1.utils.bytesCompare(a, b))
@@ -391,7 +391,7 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
391
391
  // TODO(CR-1073): check this value
392
392
  // Shares 10,000 times percentage of reward taken from delegators
393
393
  // https://docs.avax.network/reference/avalanchego/p-chain/txn-format#unsigned-add-validator-tx
394
- const shares = new avalanchejs_1.Int(1e4 * 20);
394
+ const shares = new avalanchejs_1.Int(1e4 * 2);
395
395
  const addressMaps = [...this.transaction._fromAddresses]
396
396
  .sort((a, b) => avalanchejs_1.utils.bytesCompare(a, b))
397
397
  .map((address) => new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(address), 0]]));
@@ -444,4 +444,4 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
444
444
  }
445
445
  }
446
446
  exports.PermissionlessValidatorTxBuilder = PermissionlessValidatorTxBuilder;
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQWtCNEI7QUFDNUIsOENBUXlCO0FBR3pCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBV3RFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBZmIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQU9yQixrQkFBYSxHQUFHLEtBQUssQ0FBQztJQVNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUMxRSxNQUFNLElBQUksZ0NBQXFCLENBQzdCLHNDQUFzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFD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SSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztDQUNGO0FBbGtCRCw0RUFra0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRkcmVzcyxcbiAgYXZheFNlcmlhbCxcbiAgdXRpbHMgYXMgQXZheFV0aWxzLFxuICBCaWdJbnRQcixcbiAgQ3JlZGVudGlhbCxcbiAgSWQsXG4gIElucHV0LFxuICBJbnQsXG4gIG5ldHdvcmtJRHMsXG4gIE91dHB1dE93bmVycyxcbiAgcHZtU2VyaWFsLFxuICBUcmFuc2ZlcklucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgVHlwZVN5bWJvbHMsXG4gIFVuc2lnbmVkVHgsXG4gIFV0eG8sXG4gIHV0aWxzIGFzIGF2YXhVdGlscyxcbn0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRCTFNQdWJsaWNLZXksXG4gIGlzVmFsaWRCTFNTaWduYXR1cmUsXG4gIE5vdFN1cHBvcnRlZCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyByZWNvdmVyVXR4b3MgfSBmcm9tICcuL3V0eG9FbmdpbmUnO1xuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwdWJsaWMgX3NpZ25lcjogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50O1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQ7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBsb2NrdGltZVxuICAgKiBAcGFyYW0gbG9ja3RpbWVcbiAgICovXG4gIHZhbGlkYXRlTG9ja3RpbWUobG9ja3RpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChsb2NrdGltZSA8IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbG9ja3RpbWUgbXVzdCBiZSAwIG9yIGhpZ2hlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBkZWxlZ2F0aW9uIGZlZSBpcyBhdCBsZWFzdCB0aGUgbWluRGVsZWdhdGlvbkZlZVxuICAgKiBAcGFyYW0gZGVsZWdhdGlvbkZlZVJhdGUgbnVtYmVyXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKGRlbGVnYXRpb25GZWVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZGVsZWdhdGlvbkZlZVJhdGUgPCBOdW1iZXIodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5EZWxlZ2F0aW9uRmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYERlbGVnYXRpb24gZmVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gJHt0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pbkRlbGVnYXRpb25GZWV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIFVUWE8gaGFzIGV4cGVjdGVkIGZpZWxkcy5cbiAgICogQHBhcmFtIFVUWE9cbiAgICovXG4gIHZhbGlkYXRlVXR4byh2YWx1ZTogRGVjb2RlZFV0eG9PYmopOiB2b2lkIHtcbiAgICBbJ291dHB1dElEJywgJ2Ftb3VudCcsICd0eGlkJywgJ291dHB1dGlkeCddLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVXR4b3MgcmVxdWlyZWQgJHtmaWVsZH1gKTtcbiAgICB9KTtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogQWRkcmVzc2VzIHdoZXJlIHJld2FyZCBzaG91bGQgYmUgZGVwb3NpdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBhZGRyZXNzIC0gc2luZ2xlIGFkZHJlc3Mgb3IgYXJyYXkgb2YgYWRkcmVzc2VzIHRvIHJlY2VpdmUgcmV3YXJkc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzcyBpbnN0YW5jZW9mIEFycmF5ID8gYWRkcmVzcyA6IFthZGRyZXNzXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9yZXdhcmRBZGRyZXNzZXMgPSByZXdhcmRBZGRyZXNzZXMubWFwKHV0aWxzLnBhcnNlQWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBBdmF4VXRpbHMuZ2V0TWFuYWdlckZvclZNKCdQVk0nKTtcbiAgICBjb25zdCBbY29kZWMsIHJlc3RdID0gbWFuYWdlci5nZXRDb2RlY0Zyb21CdWZmZXIoQXZheFV0aWxzLmhleFRvQnVmZmVyKHJhd1RyYW5zYWN0aW9uKSk7XG4gICAgY29uc3QgdHggPSBjb2RlYy5VbnBhY2tQcmVmaXg8cHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg+KHJlc3QpWzBdO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmJ1aWxkQXZheFRyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIGlmICh0aGlzLmhhc1NpZ25lcigpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleVBhaXIgb2YgdGhpcy5fc2lnbmVyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uc2lnbihrZXlQYWlyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG5vZGVJRFxuICAgKi9cbiAgbm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU5vZGVJRChub2RlSUQpO1xuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYmxzUHVibGljS2V5XG4gICAqL1xuICBibHNQdWJsaWNLZXkoYmxzUHVibGljS2V5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpc1ZhbGlkQkxTUHVibGljS2V5KGJsc1B1YmxpY0tleSk7XG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gYmxzUHVibGljS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBibHNTaWduYXR1cmVcbiAgICovXG4gIGJsc1NpZ25hdHVyZShibHNTaWduYXR1cmU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlzVmFsaWRCTFNTaWduYXR1cmUoYmxzU2lnbmF0dXJlKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSBibHNTaWduYXR1cmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3RpbWUgaXMgYSBsb25nIHRoYXQgY29udGFpbnMgdGhlIHVuaXggdGltZXN0YW1wIHRoYXQgdGhpcyBvdXRwdXQgY2FuIGJlIHNwZW50IGFmdGVyLlxuICAgKiBUaGUgdW5peCB0aW1lc3RhbXAgaXMgc3BlY2lmaWMgdG8gdGhlIHNlY29uZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBsb2NrdGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2t0aW1lKEJpZ0ludCh2YWx1ZSkpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9sb2NrdGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkZWxlZ2F0aW9uRmVlUmF0ZVxuICAgKiBAcGFyYW0gdmFsdWUgbnVtYmVyXG4gICAqL1xuICBkZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHN0YXJ0IHRpbWUgb2Ygc3Rha2luZyBwZXJpb2RcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzdGFydFRpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZW5kIHRpbWUgb2Ygc3Rha2luZyBwZXJpb2RcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBlbmRUaW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9lbmRUaW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHN0YWtlQW1vdW50KHZhbHVlOiBiaWdpbnQgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB2YWx1ZUJpZ0ludCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6IEJpZ0ludCh2YWx1ZSk7XG4gICAgdGhpcy52YWxpZGF0ZVN0YWtlQW1vdW50KHZhbHVlQmlnSW50KTtcbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IHZhbHVlQmlnSW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvcnJlY3QgTm9kZUlEIGlzIHVzZWRcbiAgICogQHBhcmFtIG5vZGVJRFxuICAgKi9cbiAgdmFsaWRhdGVOb2RlSUQobm9kZUlEOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGVJRCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub2RlSUQnKTtcbiAgICB9XG4gICAgaWYgKG5vZGVJRC5zbGljZSgwLCA2KSAhPT0gJ05vZGVJRCcpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgTm9kZUlEIHRhZycpO1xuICAgIH1cbiAgICBpZiAoIShBdmF4VXRpbHMuYmFzZTU4LmRlY29kZShub2RlSUQuc2xpY2UoNykpLmxlbmd0aCA9PT0gMjQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBOb2RlSUQgaXMgbm90IGluIGNiNTggZm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHN0YWtlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSBzdGFydFRpbWVcbiAgICogQHBhcmFtIGVuZFRpbWVcbiAgICovXG4gIHZhbGlkYXRlU3Rha2VEdXJhdGlvbihzdGFydFRpbWU6IGJpZ2ludCwgZW5kVGltZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKGVuZFRpbWUgPCBzdGFydFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0VuZCBkYXRlIGNhbm5vdCBiZSBsZXNzIHRoYW4gc3RhcnQgZGF0ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzdGFrZSBhbW91bnRcbiAgICogQHBhcmFtIGFtb3VudFxuICAgKi9cbiAgdmFsaWRhdGVTdGFrZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGNvbnN0IG1pblN0YWtlID0gQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluU3Rha2UpO1xuICAgIGlmIChhbW91bnQgPCBtaW5TdGFrZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWluaW11bSBzdGFraW5nIGFtb3VudCBpcyAnICsgTnVtYmVyKG1pblN0YWtlKSAvIDEwMDAwMDAwMDAgKyAnIEFWQVguJyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgY29uc3QgcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCA9ICh0eCBhcyBVbnNpZ25lZFR4KS50eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXS5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgaWYgKG91dHB1dHNbMF0uZ2V0QXNzZXRJZCgpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsc1B1YmxpY0tleSA9IEF2YXhVdGlscy5idWZmZXJUb0hleChcbiAgICAgIChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnNpZ25lciBhcyBwdm1TZXJpYWwuU2lnbmVyKS5wcm9vZi5wdWJsaWNLZXlcbiAgICApO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHRoaXMudHJhbnNhY3Rpb24uX2Jsc1B1YmxpY0tleTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibHNTaWduYXR1cmUgPSBBdmF4VXRpbHMuYnVmZmVyVG9IZXgoXG4gICAgICAocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zaWduZXIgYXMgcHZtU2VyaWFsLlNpZ25lcikucHJvb2Yuc2lnbmF0dXJlXG4gICAgKTtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB0aGlzLnRyYW5zYWN0aW9uLl9ibHNTaWduYXR1cmU7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG91dHB1dC5vdXRwdXRPd25lcnMubG9ja3RpbWUudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBvdXRwdXQub3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX25vZGVJRCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5ub2RlSWQudG9TdHJpbmcoKTtcbiAgICB0aGlzLl9ub2RlSUQgPSB0aGlzLnRyYW5zYWN0aW9uLl9ub2RlSUQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLnN0YXJ0VGltZS52YWx1ZSgpO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLmVuZFRpbWUudmFsdWUoKTtcbiAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gb3V0cHV0Lm91dHB1dE93bmVycy5hZGRycy5tYXAoKGEpID0+IGEudG9CeXRlcygpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9zdGFrZUFtb3VudCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3Rha2VbMF0ub3V0cHV0LmFtb3VudCgpO1xuICAgIHRoaXMuc3Rha2VBbW91bnQocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdGFrZVswXS5vdXRwdXQuYW1vdW50KCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gcmVjb3ZlclV0eG9zKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguZ2V0SW5wdXRzKCkpO1xuICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICBjb25zb2xlLmxvZygndXR4b3M6ICcsIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zKTtcbiAgICBjb25zb2xlLmxvZygnZnJvbUFkZHJlc3NlczogJywgdGhpcy50cmFuc2FjdGlvbi5mcm9tQWRkcmVzc2VzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHlwZTogVHlwZVN5bWJvbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gVHlwZVN5bWJvbHMuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eDogVHgpOiB0eCBpcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB7XG4gICAgcmV0dXJuIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLl90eXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5jZSBhZGRyZXNzZXMgaW4gb3V0cHV0cyBnZXQgcmVvcmRlcmVkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzaWduYXR1cmVzXG4gICAqIGFyZSBhZGRlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgKiBUbyBmaW5kIHRoZSBwb3NpdGlvbiwgd2UgdXNlIHRoZSBvdXRwdXQncyBhZGRyZXNzZXMgdG8gY3JlYXRlIHRoZVxuICAgKiBzaWduYXR1cmVJZHggaW4gdGhlIG9yZGVyIG5lZWRlZCAoaS5lLiBbdXNlciwgYml0Z28sIGJhY2t1cF0pXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjYWxjdWxhdGVVdHhvcygpOiB7XG4gICAgaW5wdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0W107XG4gICAgc3Rha2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W107XG4gICAgdXR4b3M6IFV0eG9bXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICB9IHtcbiAgICBjb25zdCBpbnB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IHN0YWtlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNoYW5nZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W10gPSBbXTtcbiAgICBjb25zdCB1dHhvczogVXR4b1tdID0gW107XG5cbiAgICBsZXQgY3VycmVudFRvdGFsID0gQmlnSW50KDApO1xuXG4gICAgLy8gZGVsZWdhdGluZyBhbmQgdmFsaWRhdGluZyBoYXZlIG5vIGZlZXNcbiAgICBjb25zdCB0b3RhbFRhcmdldCA9IHRoaXMuX3N0YWtlQW1vdW50LnZhbHVlT2YoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSB0aGlzLnRyYW5zYWN0aW9uLmNyZWRlbnRpYWxzID8/IFtdO1xuICAgIC8vIENvbnZlcnQgZnJvbUFkZHJlc3NlcyB0byBzdHJpbmdcbiAgICAvLyBUaGUgb3JkZXIgb2YgZnJvbUFkZHJlc3NlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbiAgICAvLyBXaGVuIGJ1aWxkaW5nIGZyb20gcGFyYW1zLCB0aGUgb3JkZXIgaXMgW3VzZXIsIGJpdGdvLCBiYWNrdXBdXG4gICAgLy8gVGhlIG9yZGVyIGZyb20gdHggaGV4IGlzIFtiaXRnbywgYmFja3VwLCB1c2VyXVxuICAgIGNvbnN0IGJpdGdvQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGIpID0+XG4gICAgICBhdmF4VXRpbHMuZm9ybWF0KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCBiKVxuICAgICk7XG4gICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgIGNvbnNvbGUubG9nKGBiaXRnb0FkZHJlc3M6ICR7Yml0Z29BZGRyZXNzZXN9YCk7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gT1ZDLCBub25lIG9mIHRoZSB1dHhvcyB3aWxsIGhhdmUgYWRkcmVzc2VzIHNpbmNlIHRoZXkgY29tZSBmcm9tXG4gICAgLy8gZGVzZXJpYWxpemVkIGlucHV0cyAod2hpY2ggZG9uJ3QgaGF2ZSBhZGRyZXNzZXMpLCBub3QgdGhlIElNU1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0cyA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1swXS5hZGRyZXNzZXMubGVuZ3RoICE9PSAwIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdLmFkZHJlc3Nlc0luZGV4Py5sZW5ndGggIT09IDA7XG5cbiAgICBjb25zdCBhc3NldElkID0gSWQuZnJvbVN0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5mb3JFYWNoKCh1dHhvLCBpbmRleCkgPT4ge1xuICAgICAgLy8gdmFsaWRhdGUgdGhlIHV0eG9zXG4gICAgICBpZiAoIXV0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVXR4byBpcyB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZHJlc3Nlc0luZGV4IHNob3VsZCBuZXZlciBoYXZlIGEgbWlzbWF0Y2hcbiAgICAgIGlmICh1dHhvLmFkZHJlc3Nlc0luZGV4Py5pbmNsdWRlcygtMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWRkcmVzc2VzIGFyZSBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1dHhvLnRocmVzaG9sZCA8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUaHJlc2hvbGQgaXMgaW5jb25zaXN0ZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgIC8vIGluIFdQLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZW1wdHksIHNvIGZpbGwgaXRcbiAgICAgIGlmICghdXR4by5hZGRyZXNzZXNJbmRleCB8fCB1dHhvLmFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1dHhvLmFkZHJlc3Nlc0luZGV4ID0gYml0Z29BZGRyZXNzZXMubWFwKChhKSA9PiB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH1cbiAgICAgIC8vIHV0eG8uYWRkcmVzc2VzIGlzIG51bGwgd2hlbiBidWlsZCBmcm9tIHJhd1xuICAgICAgLy8gYnV0IHV0eG8uYWRkcmVzc2VzSW5kZXggaGFzIG9ubHkgMiBlbGVtZW50cyB3aGVuIGJ1aWxkIGZyb20gcmF3XG4gICAgICAvLyBzbyB0aGUgYml0Z29JbmRleFRvT25DaGFpbkluZGV4IG1hcCB3aWxsIGJlIGVtcHR5XG4gICAgICB1dHhvLmFkZHJlc3Nlcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5zZXQoYml0Z29BZGRyZXNzZXMuaW5kZXhPZihhKSwgdXR4by5hZGRyZXNzZXMuaW5kZXhPZihhKSk7XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgIGNvbnNvbGUubG9nKGB1dHhvLmFkZHJlc3NlczogJHt1dHhvLmFkZHJlc3Nlc31gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXg6ICR7QXJyYXkuZnJvbShiaXRnb0luZGV4VG9PbkNoYWluSW5kZXgpfWApO1xuICAgICAgLy8gaW4gT1ZDLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZGVmaW5lZCBjb3JyZWN0bHkgZnJvbSB0aGUgcHJldmlvdXMgaXRlcmF0aW9uXG5cbiAgICAgIGlmICh1dHhvLm91dHB1dElEID09PSBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0KSB7XG4gICAgICAgIGNvbnN0IHV0eG9BbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgICAvLyBlaXRoZXIgdXNlciAoMCkgb3IgcmVjb3ZlcnkgKDIpXG4gICAgICAgIC8vIE9uIHJlZ3VsYXIgbW9kZTogW3VzZXIsIGJpdGdvXSAoaS5lLiBbMCwgMV0pXG4gICAgICAgIC8vIE9uIHJlY292ZXJ5IG1vZGU6IFtiYWNrdXAsIGJpdGdvXSAoaS5lLiBbMiwgMV0pXG4gICAgICAgIGNvbnN0IHVzZXJPckJhY2t1cEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICAgIGNvbnN0IGJpdGdvSW5kZXggPSAxO1xuXG4gICAgICAgIGN1cnJlbnRUb3RhbCA9IGN1cnJlbnRUb3RhbCArIHV0eG9BbW91bnQ7XG5cbiAgICAgICAgY29uc3QgdXR4b0lkID0gYXZheFNlcmlhbC5VVFhPSUQuZnJvbU5hdGl2ZSh1dHhvLnR4aWQsIE51bWJlcih1dHhvLm91dHB1dGlkeCkpO1xuXG4gICAgICAgIGxldCBhZGRyZXNzZXNJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXggJiYgYml0Z29JbmRleFRvT25DaGFpbkluZGV4LnNpemUgPT09IDApIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleCA9IFsuLi51dHhvLmFkZHJlc3Nlc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5nZXQodXNlck9yQmFja3VwSW5kZXgpKTtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleC5nZXQoYml0Z29JbmRleCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dHMgPSBuZXcgVHJhbnNmZXJJbnB1dChcbiAgICAgICAgICBuZXcgQmlnSW50UHIodXR4b0Ftb3VudCksXG4gICAgICAgICAgbmV3IElucHV0KFsuLi5hZGRyZXNzZXNJbmRleF0uc29ydCgpLm1hcCgobnVtKSA9PiBuZXcgSW50KG51bSkpKVxuICAgICAgICApO1xuICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2luZyBhZGRyZXNzZXNJbmRleCBzb3J0ZWQ6ICR7Wy4uLmFkZHJlc3Nlc0luZGV4XS5zb3J0KCl9YCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dCh1dHhvSWQsIGFzc2V0SWQsIHRyYW5zZmVySW5wdXRzKTtcbiAgICAgICAgdXR4b3MucHVzaChuZXcgVXR4byh1dHhvSWQsIGFzc2V0SWQsIHRyYW5zZmVySW5wdXRzKSk7XG5cbiAgICAgICAgaW5wdXRzLnB1c2goaW5wdXQpO1xuICAgICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgfHwgdGhpcy50cmFuc2FjdGlvbi5jcmVkZW50aWFscy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGlmIChidWlsZE91dHB1dHMpIHtcbiAgICAgICAgICAgIC8vIEZvciB0aGUgYml0Z28gc2lnbmF0dXJlIHdlIGNyZWF0ZSBhbiBlbXB0eSBzaWduYXR1cmVcbiAgICAgICAgICAgIC8vIEZvciB0aGUgdXNlci9iYWNrdXAgc2lnbmF0dXJlIHdlIHN0b3JlIHRoZSBhZGRyZXNzIHRoYXQgbWF0Y2hlcyB0aGUga2V5XG4gICAgICAgICAgICAvLyBpZiBiaXRnbyBhZGRyZXNzIGNvbWVzIGJlZm9yZSAgPCB1c2VyL2JhY2t1cCBhZGRyZXNzXG5cbiAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBiaXRnbyBpbmRleCBvbiBjaGFpbjogJHt1dHhvLmFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdfWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgT3IgQmFja3VwIEluZGV4OiAke3V0eG8uYWRkcmVzc2VzSW5kZXhbdXNlck9yQmFja3VwSW5kZXhdfWApO1xuICAgICAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCB1dHhvLmFkZHJlc3Nlc0luZGV4W3VzZXJPckJhY2t1cEluZGV4XSkge1xuICAgICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VyIG9yIGJhY2t1cCBjcmVkZW50aWFscyBhZnRlciBiaXRnb2ApO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhCdWZmZXJBdmF4LmZyb20oJycpLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW3VzZXJPckJhY2t1cEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VyIG9yIGJhY2t1cCBjcmVkZW50aWFscyBiZWZvcmUgYml0Z29gKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChbXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW3VzZXJPckJhY2t1cEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSgnJykudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiB2ZXJpZnkgdGhpcyBlbHNlIGNhc2UgZm9yIE9WQ1xuICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoXG4gICAgICAgICAgICAgICAgYWRkcmVzc2VzSW5kZXgubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW2ldKS50b1N0cmluZygnaGV4JykpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgICAgICAgY29uc29sZS5sb2coYHJldXNpbmcgY3JlZGVudGlhbHMgZnJvbSB0cmFuc2FjdGlvbmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYnVpbGRPdXRwdXRzKSB7XG4gICAgICBpZiAoY3VycmVudFRvdGFsIDwgdG90YWxUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgVXR4byBvdXRwdXRzIGdldCAke2N1cnJlbnRUb3RhbC50b1N0cmluZygpfSBhbmQgJHt0b3RhbFRhcmdldC50b1N0cmluZygpfSBpcyByZXF1aXJlZGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRvdGFsID49IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN0YWtlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgIGFzc2V0SWQsXG4gICAgICAgICAgbmV3IFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgIG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBzdGFrZU91dHB1dHMucHVzaChzdGFrZU91dHB1dCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUb3RhbCA+PSB0b3RhbFRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IG5ldyBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dChcbiAgICAgICAgICAgIGFzc2V0SWQsXG4gICAgICAgICAgICBuZXcgVHJhbnNmZXJPdXRwdXQoXG4gICAgICAgICAgICAgIG5ldyBCaWdJbnRQcihjdXJyZW50VG90YWwgLSB0b3RhbFRhcmdldCksXG4gICAgICAgICAgICAgIG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgICAgICAgICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICAgICAgICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdXG4gICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYXZheFV0aWxzLmJ5dGVzQ29tcGFyZShhLCBiKSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IEFkZHJlc3MuZnJvbUJ5dGVzKGEpWzBdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjaGFuZ2VPdXRwdXRzLnB1c2goY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpbnB1dHMuc29ydCgoYSwgYikgPT4gYXZheFV0aWxzLmJ5dGVzQ29tcGFyZShhLnV0eG9JRC50eElELnRvQnl0ZXMoKSwgYi51dHhvSUQudHhJRC50b0J5dGVzKCkpKTtcbiAgICByZXR1cm4geyBpbnB1dHMsIHN0YWtlT3V0cHV0cywgY2hhbmdlT3V0cHV0cywgdXR4b3MsIGNyZWRlbnRpYWxzIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGFkZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQXZheFRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTdGFrZUR1cmF0aW9uKHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZSwgdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZSk7XG4gICAgY29uc3QgeyBpbnB1dHMsIHN0YWtlT3V0cHV0cywgY2hhbmdlT3V0cHV0cywgdXR4b3MsIGNyZWRlbnRpYWxzIH0gPSB0aGlzLmNhbGN1bGF0ZVV0eG9zKCk7XG4gICAgY29uc3QgYmFzZVR4ID0gYXZheFNlcmlhbC5CYXNlVHguZnJvbU5hdGl2ZShcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmtJRCxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCxcbiAgICAgIGNoYW5nZU91dHB1dHMsXG4gICAgICBpbnB1dHMsXG4gICAgICBuZXcgVWludDhBcnJheSgpIC8vIGRlZmF1bHQgZW1wdHkgbWVtb1xuICAgICk7XG5cbiAgICBjb25zdCBzdWJuZXRWYWxpZGF0b3IgPSBwdm1TZXJpYWwuU3VibmV0VmFsaWRhdG9yLmZyb21OYXRpdmUoXG4gICAgICB0aGlzLl9ub2RlSUQsXG4gICAgICB0aGlzLl9zdGFydFRpbWUsXG4gICAgICB0aGlzLl9lbmRUaW1lLFxuICAgICAgQmlnSW50KDFlOSksXG4gICAgICBuZXR3b3JrSURzLlByaW1hcnlOZXR3b3JrSURcbiAgICApO1xuXG4gICAgY29uc3Qgc2lnbmVyID0gbmV3IHB2bVNlcmlhbC5TaWduZXIoXG4gICAgICBuZXcgcHZtU2VyaWFsLlByb29mT2ZQb3NzZXNzaW9uKFxuICAgICAgICBBdmF4VXRpbHMuaGV4VG9CdWZmZXIodGhpcy5fYmxzUHVibGljS2V5KSxcbiAgICAgICAgQXZheFV0aWxzLmhleFRvQnVmZmVyKHRoaXMuX2Jsc1NpZ25hdHVyZSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gbmV3IE91dHB1dE93bmVycyhcbiAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAgIC5tYXAoKGEpID0+IEFkZHJlc3MuZnJvbUJ5dGVzKGEpWzBdKVxuICAgICk7XG5cbiAgICAvLyBUT0RPKENSLTEwNzMpOiBjaGVjayB0aGlzIHZhbHVlXG4gICAgLy8gIFNoYXJlcyAxMCwwMDAgdGltZXMgcGVyY2VudGFnZSBvZiByZXdhcmQgdGFrZW4gZnJvbSBkZWxlZ2F0b3JzXG4gICAgLy8gIGh0dHBzOi8vZG9jcy5hdmF4Lm5ldHdvcmsvcmVmZXJlbmNlL2F2YWxhbmNoZWdvL3AtY2hhaW4vdHhuLWZvcm1hdCN1bnNpZ25lZC1hZGQtdmFsaWRhdG9yLXR4XG4gICAgY29uc3Qgc2hhcmVzID0gbmV3IEludCgxZTQgKiAyMCk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGF2YXhVdGlscy5ieXRlc0NvbXBhcmUoYSwgYikpXG4gICAgICAubWFwKChhZGRyZXNzKSA9PiBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhZGRyZXNzKSwgMF1dKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKFxuICAgICAgbmV3IFVuc2lnbmVkVHgoXG4gICAgICAgIG5ldyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeChcbiAgICAgICAgICBiYXNlVHgsXG4gICAgICAgICAgc3VibmV0VmFsaWRhdG9yLFxuICAgICAgICAgIHNpZ25lcixcbiAgICAgICAgICBzdGFrZU91dHB1dHMsXG4gICAgICAgICAgb3V0cHV0T3duZXJzLFxuICAgICAgICAgIG91dHB1dE93bmVycyxcbiAgICAgICAgICBzaGFyZXNcbiAgICAgICAgKSxcbiAgICAgICAgdXR4b3MsXG4gICAgICAgIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLFxuICAgICAgICBjcmVkZW50aWFsc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lci5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGhhc1NpZ25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmVyLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIGlmICghbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlVHJhbnNhY3Rpb24gbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxufVxuIl19
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQWtCNEI7QUFDNUIsOENBUXlCO0FBR3pCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBV3RFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBZmIsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQU9yQixrQkFBYSxHQUFHLEtBQUssQ0FBQztJQVNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUMxRSxNQUFNLElBQUksZ0NBQXFCLENBQzdCLHNDQUFzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQXFCO1FBQ2hDLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxZQUFZO0lBRVo7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLE9BQTBCO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELE1BQU0sT0FBTyxHQUFHLG1CQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLG1CQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBeUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElBQUEsOEJBQW1CLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElBQUEsOEJBQW1CLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxLQUFzQjtRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEtBQXNCO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxLQUFzQjtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBc0I7UUFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsSUFBSSxDQUFDLENBQUMsbUJBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDN0QsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG1EQUFtRCxDQUFDLENBQUM7U0FDdEY7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN0RCxJQUFJLE9BQU8sR0FBRyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsSUFBSSxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw0QkFBNEIsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1NBQzFHO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxZQUFZO0lBRVosa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsTUFBTSx5QkFBeUIsR0FBSSxFQUFpQixDQUFDLEVBQTRDLENBQUM7UUFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUMsRUFBRTtZQUNqRCxNQUFNLElBQUksdUJBQVksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1NBQy9GO1FBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN6RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1NBQzdFO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQXdCLENBQUM7UUFDbkQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsbUJBQVMsQ0FBQyxXQUFXLENBQ25ELHlCQUF5QixDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsbUJBQVMsQ0FBQyxXQUFXLENBQ25ELHlCQUF5QixDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcseUJBQXlCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUEseUJBQVksRUFBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLDRCQUE0QjtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLElBQWlCO1FBQ25DLE9BQU8sSUFBSSxLQUFLLHlCQUFXLENBQUMsNEJBQTRCLENBQUM7SUFDM0QsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFNO1FBQ2pCLE9BQU8sZ0NBQWdDLENBQUMsWUFBWSxDQUFFLEVBQTZDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGNBQWM7O1FBT3RCLE1BQU0sTUFBTSxHQUFtQyxFQUFFLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQW9DLEVBQUUsQ0FBQztRQUN6RCxNQUFNLGFBQWEsR0FBb0MsRUFBRSxDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUV6QixJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0IseUNBQXlDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEQsTUFBTSxXQUFXLEdBQWlCLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLG1DQUFJLEVBQUUsQ0FBQztRQUNyRSxrQ0FBa0M7UUFDbEMscUVBQXFFO1FBQ3JFLGdFQUFnRTtRQUNoRSxpREFBaUQ7UUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDL0QsbUJBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDcEYsQ0FBQztRQUNGLDRCQUE0QjtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLCtFQUErRTtRQUMvRSxnRUFBZ0U7UUFDaEUsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLDBDQUFFLE1BQU0sTUFBSyxDQUFDLENBQUM7UUFFL0csTUFBTSxPQUFPLEdBQUcsZ0JBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7O1lBQzlDLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsOENBQThDO1lBQzlDLElBQUksTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDL0Q7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hELE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNDLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1RTtZQUNELDZDQUE2QztZQUM3QyxrRUFBa0U7WUFDbEUsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckYsQ0FBQyxDQUFDLENBQUM7WUFDSCw0QkFBNEI7WUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixpRkFBaUY7WUFFakYsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlDQUF5QixFQUFFO2dCQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxrQ0FBa0M7Z0JBQ2xDLCtDQUErQztnQkFDL0Msa0RBQWtEO2dCQUNsRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBRXJCLFlBQVksR0FBRyxZQUFZLEdBQUcsVUFBVSxDQUFDO2dCQUV6QyxNQUFNLE1BQU0sR0FBRyx3QkFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRS9FLElBQUksY0FBYyxHQUFhLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLHdCQUF3QixDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7b0JBQzlELGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMzQztxQkFBTTtvQkFDTCxjQUFjLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3JFLGNBQWMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQy9EO2dCQUVELE1BQU0sY0FBYyxHQUFHLElBQUksMkJBQWEsQ0FDdEMsSUFBSSxzQkFBUSxDQUFDLFVBQVUsQ0FBQyxFQUN4QixJQUFJLG1CQUFLLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxpQkFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDakUsQ0FBQztnQkFDRiw0QkFBNEI7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRTFFLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNoRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBRXRELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUM3RSxJQUFJLFlBQVksRUFBRTt3QkFDaEIsdURBQXVEO3dCQUN2RCwwRUFBMEU7d0JBQzFFLHVEQUF1RDt3QkFFdkQsNEJBQTRCO3dCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDL0UsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRTs0QkFDNUUsNEJBQTRCOzRCQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7NEJBQ3RELFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSx3QkFBVSxDQUFDO2dDQUNiLGVBQUssQ0FBQyxZQUFZLENBQUMsa0JBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUN2RCxlQUFLLENBQUMsWUFBWSxDQUNoQixrQkFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNwRjs2QkFDRixDQUFDLENBQ0gsQ0FBQzt5QkFDSDs2QkFBTTs0QkFDTCw0QkFBNEI7NEJBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQzs0QkFDdkQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLHdCQUFVLENBQUM7Z0NBQ2IsZUFBSyxDQUFDLFlBQVksQ0FDaEIsa0JBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDcEY7Z0NBQ0QsZUFBSyxDQUFDLFlBQVksQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3hELENBQUMsQ0FDSCxDQUFDO3lCQUNIO3FCQUNGO3lCQUFNO3dCQUNMLCtDQUErQzt3QkFDL0MsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLHdCQUFVLENBQ1osY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3ZCLGVBQUssQ0FBQyxZQUFZLENBQUMsa0JBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDeEYsQ0FDRixDQUNGLENBQUM7cUJBQ0g7aUJBQ0Y7cUJBQU07b0JBQ0wsNEJBQTRCO29CQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7aUJBQ3JEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksWUFBWSxHQUFHLFdBQVcsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLGdDQUFxQixDQUM3QixvQkFBb0IsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLFdBQVcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUN4RixDQUFDO2FBQ0g7aUJBQU0sSUFBSSxZQUFZLElBQUksV0FBVyxFQUFFO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLHdCQUFVLENBQUMsa0JBQWtCLENBQ25ELE9BQU8sRUFDUCxJQUFJLDRCQUFjLENBQ2hCLElBQUksc0JBQVEsQ0FBQyxXQUFXLENBQUMsRUFDekIsSUFBSSwwQkFBWSxDQUNkLElBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUN4QyxJQUFJLGlCQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDcEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO3FCQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMscUJBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsQ0FDRixDQUNGLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxZQUFZLElBQUksV0FBVyxFQUFFO29CQUMvQixNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUFVLENBQUMsa0JBQWtCLENBQ3BELE9BQU8sRUFDUCxJQUFJLDRCQUFjLENBQ2hCLElBQUksc0JBQVEsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEVBQ3hDLElBQUksMEJBQVksQ0FDZCxJQUFJLHNCQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFDeEMsSUFBSSxpQkFBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3BDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzt5QkFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZDLENBQ0YsQ0FDRixDQUFDO29CQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2xDO2FBQ0Y7U0FDRjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sb0JBQW9CO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sTUFBTSxHQUFHLHdCQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUM5QixhQUFhLEVBQ2IsTUFBTSxFQUNOLElBQUksVUFBVSxFQUFFLENBQUMscUJBQXFCO1NBQ3ZDLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyx1QkFBUyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQzFELElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHdCQUFVLENBQUMsZ0JBQWdCLENBQzVCLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLHVCQUFTLENBQUMsTUFBTSxDQUNqQyxJQUFJLHVCQUFTLENBQUMsaUJBQWlCLENBQzdCLG1CQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDekMsbUJBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUMxQyxDQUNGLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLDBCQUFZLENBQ25DLElBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUN4QyxJQUFJLGlCQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDcEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZDLENBQUM7UUFFRixrQ0FBa0M7UUFDbEMsa0VBQWtFO1FBQ2xFLGdHQUFnRztRQUNoRyxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQzthQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLG1CQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQzdCLElBQUksd0JBQVUsQ0FDWixJQUFJLHVCQUFTLENBQUMsNEJBQTRCLENBQ3hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sQ0FDUCxFQUNELEtBQUssRUFDTCxJQUFJLG1CQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUN0QyxXQUFXLENBQ1osQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZUFBZSxDQUFDLE9BQW9CLEVBQUUsYUFBc0I7UUFDMUQsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzFCLElBQUksQ0FBQyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksZ0NBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLGNBQXNCO1FBQzNDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXlCO1FBQzNDLHdFQUF3RTtJQUMxRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0NBQ0Y7QUFsa0JELDRFQWtrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZGRyZXNzLFxuICBhdmF4U2VyaWFsLFxuICB1dGlscyBhcyBBdmF4VXRpbHMsXG4gIEJpZ0ludFByLFxuICBDcmVkZW50aWFsLFxuICBJZCxcbiAgSW5wdXQsXG4gIEludCxcbiAgbmV0d29ya0lEcyxcbiAgT3V0cHV0T3duZXJzLFxuICBwdm1TZXJpYWwsXG4gIFRyYW5zZmVySW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBUeXBlU3ltYm9scyxcbiAgVW5zaWduZWRUeCxcbiAgVXR4byxcbiAgdXRpbHMgYXMgYXZheFV0aWxzLFxufSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgaXNWYWxpZEJMU1B1YmxpY0tleSxcbiAgaXNWYWxpZEJMU1NpZ25hdHVyZSxcbiAgTm90U3VwcG9ydGVkLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgVHggfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHJlY292ZXJVdHhvcyB9IGZyb20gJy4vdXR4b0VuZ2luZSc7XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHB1YmxpYyBfc2lnbmVyOiBLZXlQYWlyW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9ub2RlSUQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9ibHNQdWJsaWNLZXk6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9ibHNTaWduYXR1cmU6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zdGFydFRpbWU6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIF9lbmRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfc3Rha2VBbW91bnQ6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9kZWxlZ2F0aW9uRmVlUmF0ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29pbkNvbmZpZ1xuICAgKi9cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdHJhbnNhY3Rpb24gdHlwZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3I7XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKipcbiAgICogVmFsaWRhdGVzIGxvY2t0aW1lXG4gICAqIEBwYXJhbSBsb2NrdGltZVxuICAgKi9cbiAgdmFsaWRhdGVMb2NrdGltZShsb2NrdGltZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKGxvY2t0aW1lIDwgQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBsb2NrdGltZSBtdXN0IGJlIDAgb3IgaGlnaGVyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGRlbGVnYXRpb24gZmVlIGlzIGF0IGxlYXN0IHRoZSBtaW5EZWxlZ2F0aW9uRmVlXG4gICAqIEBwYXJhbSBkZWxlZ2F0aW9uRmVlUmF0ZSBudW1iZXJcbiAgICovXG4gIHZhbGlkYXRlRGVsZWdhdGlvbkZlZVJhdGUoZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChkZWxlZ2F0aW9uRmVlUmF0ZSA8IE51bWJlcih0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pbkRlbGVnYXRpb25GZWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgRGVsZWdhdGlvbiBmZWUgY2Fubm90IGJlIGxlc3MgdGhhbiAke3RoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluRGVsZWdhdGlvbkZlZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgVVRYTyBoYXMgZXhwZWN0ZWQgZmllbGRzLlxuICAgKiBAcGFyYW0gVVRYT1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHZhbHVlOiBEZWNvZGVkVXR4b09iaik6IHZvaWQge1xuICAgIFsnb3V0cHV0SUQnLCAnYW1vdW50JywgJ3R4aWQnLCAnb3V0cHV0aWR4J10uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGlmICghdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVdHhvcyByZXF1aXJlZCAke2ZpZWxkfWApO1xuICAgIH0pO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKlxuICAgKiBBZGRyZXNzZXMgd2hlcmUgcmV3YXJkIHNob3VsZCBiZSBkZXBvc2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IGFkZHJlc3MgLSBzaW5nbGUgYWRkcmVzcyBvciBhcnJheSBvZiBhZGRyZXNzZXMgdG8gcmVjZWl2ZSByZXdhcmRzXG4gICAqL1xuICByZXdhcmRBZGRyZXNzZXMoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCByZXdhcmRBZGRyZXNzZXMgPSBhZGRyZXNzIGluc3RhbmNlb2YgQXJyYXkgPyBhZGRyZXNzIDogW2FkZHJlc3NdO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3Jld2FyZEFkZHJlc3NlcyA9IHJld2FyZEFkZHJlc3Nlcy5tYXAodXRpbHMucGFyc2VBZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgbWFuYWdlciA9IEF2YXhVdGlscy5nZXRNYW5hZ2VyRm9yVk0oJ1BWTScpO1xuICAgIGNvbnN0IFtjb2RlYywgcmVzdF0gPSBtYW5hZ2VyLmdldENvZGVjRnJvbUJ1ZmZlcihBdmF4VXRpbHMuaGV4VG9CdWZmZXIocmF3VHJhbnNhY3Rpb24pKTtcbiAgICBjb25zdCB0eCA9IGNvZGVjLlVucGFja1ByZWZpeDxwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeD4ocmVzdClbMF07XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMuYnVpbGRBdmF4VHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG4gICAgaWYgKHRoaXMuaGFzU2lnbmVyKCkpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5UGFpciBvZiB0aGlzLl9zaWduZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5zaWduKGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZUlEXG4gICAqL1xuICBub2RlSUQobm9kZUlEOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTm9kZUlEKG5vZGVJRCk7XG4gICAgdGhpcy5fbm9kZUlEID0gbm9kZUlEO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBibHNQdWJsaWNLZXlcbiAgICovXG4gIGJsc1B1YmxpY0tleShibHNQdWJsaWNLZXk6IHN0cmluZyk6IHRoaXMge1xuICAgIGlzVmFsaWRCTFNQdWJsaWNLZXkoYmxzUHVibGljS2V5KTtcbiAgICB0aGlzLl9ibHNQdWJsaWNLZXkgPSBibHNQdWJsaWNLZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGJsc1NpZ25hdHVyZVxuICAgKi9cbiAgYmxzU2lnbmF0dXJlKGJsc1NpZ25hdHVyZTogc3RyaW5nKTogdGhpcyB7XG4gICAgaXNWYWxpZEJMU1NpZ25hdHVyZShibHNTaWduYXR1cmUpO1xuICAgIHRoaXMuX2Jsc1NpZ25hdHVyZSA9IGJsc1NpZ25hdHVyZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NrdGltZSBpcyBhIGxvbmcgdGhhdCBjb250YWlucyB0aGUgdW5peCB0aW1lc3RhbXAgdGhhdCB0aGlzIG91dHB1dCBjYW4gYmUgc3BlbnQgYWZ0ZXIuXG4gICAqIFRoZSB1bml4IHRpbWVzdGFtcCBpcyBzcGVjaWZpYyB0byB0aGUgc2Vjb25kLlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIGxvY2t0aW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTG9ja3RpbWUoQmlnSW50KHZhbHVlKSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGRlbGVnYXRpb25GZWVSYXRlXG4gICAqIEBwYXJhbSB2YWx1ZSBudW1iZXJcbiAgICovXG4gIGRlbGVnYXRpb25GZWVSYXRlKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlRGVsZWdhdGlvbkZlZVJhdGUodmFsdWUpO1xuICAgIHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogc3RhcnQgdGltZSBvZiBzdGFraW5nIHBlcmlvZFxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHN0YXJ0VGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbmQgdGltZSBvZiBzdGFraW5nIHBlcmlvZFxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIGVuZFRpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX2VuZFRpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgc3Rha2VBbW91bnQodmFsdWU6IGJpZ2ludCB8IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IHZhbHVlQmlnSW50ID0gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IHZhbHVlIDogQmlnSW50KHZhbHVlKTtcbiAgICB0aGlzLnZhbGlkYXRlU3Rha2VBbW91bnQodmFsdWVCaWdJbnQpO1xuICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gdmFsdWVCaWdJbnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKipcbiAgICogdmFsaWRhdGVzIGEgY29ycmVjdCBOb2RlSUQgaXMgdXNlZFxuICAgKiBAcGFyYW0gbm9kZUlEXG4gICAqL1xuICB2YWxpZGF0ZU5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbm9kZUlEKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIG5vZGVJRCcpO1xuICAgIH1cbiAgICBpZiAobm9kZUlELnNsaWNlKDAsIDYpICE9PSAnTm9kZUlEJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogaW52YWxpZCBOb2RlSUQgdGFnJyk7XG4gICAgfVxuICAgIGlmICghKEF2YXhVdGlscy5iYXNlNTguZGVjb2RlKG5vZGVJRC5zbGljZSg3KSkubGVuZ3RoID09PSAyNCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IE5vZGVJRCBpcyBub3QgaW4gY2I1OCBmb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc3Rha2UgZHVyYXRpb25cbiAgICogQHBhcmFtIHN0YXJ0VGltZVxuICAgKiBAcGFyYW0gZW5kVGltZVxuICAgKi9cbiAgdmFsaWRhdGVTdGFrZUR1cmF0aW9uKHN0YXJ0VGltZTogYmlnaW50LCBlbmRUaW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIGRhdGUgY2Fubm90IGJlIGxlc3MgdGhhbiBzdGFydCBkYXRlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHN0YWtlIGFtb3VudFxuICAgKiBAcGFyYW0gYW1vdW50XG4gICAqL1xuICB2YWxpZGF0ZVN0YWtlQW1vdW50KGFtb3VudDogYmlnaW50KTogdm9pZCB7XG4gICAgY29uc3QgbWluU3Rha2UgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5TdGFrZSk7XG4gICAgaWYgKGFtb3VudCA8IG1pblN0YWtlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaW5pbXVtIHN0YWtpbmcgYW1vdW50IGlzICcgKyBOdW1iZXIobWluU3Rha2UpIC8gMTAwMDAwMDAwMCArICcgQVZBWC4nKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICBjb25zdCBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4ID0gKHR4IGFzIFVuc2lnbmVkVHgpLnR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4O1xuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5iYXNlVHgub3V0cHV0cztcbiAgICBpZiAob3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbiBoYXZlIG9uZSBleHRlcm5hbCBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICBpZiAob3V0cHV0c1swXS5nZXRBc3NldElkKCkgIT09IHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxzUHVibGljS2V5ID0gQXZheFV0aWxzLmJ1ZmZlclRvSGV4KFxuICAgICAgKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc2lnbmVyIGFzIHB2bVNlcmlhbC5TaWduZXIpLnByb29mLnB1YmxpY0tleVxuICAgICk7XG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gdGhpcy50cmFuc2FjdGlvbi5fYmxzUHVibGljS2V5O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsc1NpZ25hdHVyZSA9IEF2YXhVdGlscy5idWZmZXJUb0hleChcbiAgICAgIChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnNpZ25lciBhcyBwdm1TZXJpYWwuU2lnbmVyKS5wcm9vZi5zaWduYXR1cmVcbiAgICApO1xuICAgIHRoaXMuX2Jsc1NpZ25hdHVyZSA9IHRoaXMudHJhbnNhY3Rpb24uX2Jsc1NpZ25hdHVyZTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0Lm91dHB1dE93bmVycy5sb2NrdGltZS52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IG91dHB1dC5vdXRwdXRPd25lcnMudGhyZXNob2xkLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbm9kZUlEID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLm5vZGVJZC50b1N0cmluZygpO1xuICAgIHRoaXMuX25vZGVJRCA9IHRoaXMudHJhbnNhY3Rpb24uX25vZGVJRDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9zdGFydFRpbWUgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3Iuc3RhcnRUaW1lLnZhbHVlKCk7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gdGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2VuZFRpbWUgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3IuZW5kVGltZS52YWx1ZSgpO1xuICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gYS50b0J5dGVzKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3N0YWtlQW1vdW50ID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdGFrZVswXS5vdXRwdXQuYW1vdW50KCk7XG4gICAgdGhpcy5zdGFrZUFtb3VudChwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN0YWtlWzBdLm91dHB1dC5hbW91bnQoKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSByZWNvdmVyVXR4b3MocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5nZXRJbnB1dHMoKSk7XG4gICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgIGNvbnNvbGUubG9nKCd1dHhvczogJywgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MpO1xuICAgIGNvbnNvbGUubG9nKCdmcm9tQWRkcmVzc2VzOiAnLCB0aGlzLnRyYW5zYWN0aW9uLmZyb21BZGRyZXNzZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eXBlOiBUeXBlU3ltYm9scyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlID09PSBUeXBlU3ltYm9scy5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4OiBUeCk6IHR4IGlzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4IHtcbiAgICByZXR1cm4gUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuX3R5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmNlIGFkZHJlc3NlcyBpbiBvdXRwdXRzIGdldCByZW9yZGVyZWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHNpZ25hdHVyZXNcbiAgICogYXJlIGFkZGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAqIFRvIGZpbmQgdGhlIHBvc2l0aW9uLCB3ZSB1c2UgdGhlIG91dHB1dCdzIGFkZHJlc3NlcyB0byBjcmVhdGUgdGhlXG4gICAqIHNpZ25hdHVyZUlkeCBpbiB0aGUgb3JkZXIgbmVlZGVkIChpLmUuIFt1c2VyLCBiaXRnbywgYmFja3VwXSlcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZVV0eG9zKCk6IHtcbiAgICBpbnB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBzdGFrZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W107XG4gICAgY2hhbmdlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXTtcbiAgICB1dHhvczogVXR4b1tdO1xuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gIH0ge1xuICAgIGNvbnN0IGlucHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dFtdID0gW107XG4gICAgY29uc3Qgc3Rha2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdID0gW107XG4gICAgY29uc3QgY2hhbmdlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IHV0eG9zOiBVdHhvW10gPSBbXTtcblxuICAgIGxldCBjdXJyZW50VG90YWwgPSBCaWdJbnQoMCk7XG5cbiAgICAvLyBkZWxlZ2F0aW5nIGFuZCB2YWxpZGF0aW5nIGhhdmUgbm8gZmVlc1xuICAgIGNvbnN0IHRvdGFsVGFyZ2V0ID0gdGhpcy5fc3Rha2VBbW91bnQudmFsdWVPZigpO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IHRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgPz8gW107XG4gICAgLy8gQ29udmVydCBmcm9tQWRkcmVzc2VzIHRvIHN0cmluZ1xuICAgIC8vIFRoZSBvcmRlciBvZiBmcm9tQWRkcmVzc2VzIGlzIGRldGVybWluZWQgYnkgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuICAgIC8vIFdoZW4gYnVpbGRpbmcgZnJvbSBwYXJhbXMsIHRoZSBvcmRlciBpcyBbdXNlciwgYml0Z28sIGJhY2t1cF1cbiAgICAvLyBUaGUgb3JkZXIgZnJvbSB0eCBoZXggaXMgW2JpdGdvLCBiYWNrdXAsIHVzZXJdXG4gICAgY29uc3QgYml0Z29BZGRyZXNzZXMgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYikgPT5cbiAgICAgIGF2YXhVdGlscy5mb3JtYXQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcywgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsIGIpXG4gICAgKTtcbiAgICAvLyBUT0RPKENSLTEwNzMpOiByZW1vdmUgbG9nXG4gICAgY29uc29sZS5sb2coYGJpdGdvQWRkcmVzczogJHtiaXRnb0FkZHJlc3Nlc31gKTtcblxuICAgIC8vIGlmIHdlIGFyZSBpbiBPVkMsIG5vbmUgb2YgdGhlIHV0eG9zIHdpbGwgaGF2ZSBhZGRyZXNzZXMgc2luY2UgdGhleSBjb21lIGZyb21cbiAgICAvLyBkZXNlcmlhbGl6ZWQgaW5wdXRzICh3aGljaCBkb24ndCBoYXZlIGFkZHJlc3NlcyksIG5vdCB0aGUgSU1TXG4gICAgY29uc3QgYnVpbGRPdXRwdXRzID1cbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdLmFkZHJlc3Nlcy5sZW5ndGggIT09IDAgfHwgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbMF0uYWRkcmVzc2VzSW5kZXg/Lmxlbmd0aCAhPT0gMDtcblxuICAgIGNvbnN0IGFzc2V0SWQgPSBJZC5mcm9tU3RyaW5nKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG8sIGluZGV4KSA9PiB7XG4gICAgICAvLyB2YWxpZGF0ZSB0aGUgdXR4b3NcbiAgICAgIGlmICghdXR4bykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVdHhvIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgLy8gYWRkcmVzc2VzSW5kZXggc2hvdWxkIG5ldmVyIGhhdmUgYSBtaXNtYXRjaFxuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXg/LmluY2x1ZGVzKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBZGRyZXNzZXMgYXJlIGluY29uc2lzdGVudCcpO1xuICAgICAgfVxuICAgICAgaWYgKHV0eG8udGhyZXNob2xkIDwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RocmVzaG9sZCBpcyBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYml0Z29JbmRleFRvT25DaGFpbkluZGV4ID0gbmV3IE1hcCgpO1xuICAgICAgLy8gaW4gV1AsIG91dHB1dC5hZGRyZXNzZXNJbmRleCBpcyBlbXB0eSwgc28gZmlsbCBpdFxuICAgICAgaWYgKCF1dHhvLmFkZHJlc3Nlc0luZGV4IHx8IHV0eG8uYWRkcmVzc2VzSW5kZXgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHV0eG8uYWRkcmVzc2VzSW5kZXggPSBiaXRnb0FkZHJlc3Nlcy5tYXAoKGEpID0+IHV0eG8uYWRkcmVzc2VzLmluZGV4T2YoYSkpO1xuICAgICAgfVxuICAgICAgLy8gdXR4by5hZGRyZXNzZXMgaXMgbnVsbCB3aGVuIGJ1aWxkIGZyb20gcmF3XG4gICAgICAvLyBidXQgdXR4by5hZGRyZXNzZXNJbmRleCBoYXMgb25seSAyIGVsZW1lbnRzIHdoZW4gYnVpbGQgZnJvbSByYXdcbiAgICAgIC8vIHNvIHRoZSBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXggbWFwIHdpbGwgYmUgZW1wdHlcbiAgICAgIHV0eG8uYWRkcmVzc2VzLmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgYml0Z29JbmRleFRvT25DaGFpbkluZGV4LnNldChiaXRnb0FkZHJlc3Nlcy5pbmRleE9mKGEpLCB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgICAgY29uc29sZS5sb2coYHV0eG8uYWRkcmVzc2VzOiAke3V0eG8uYWRkcmVzc2VzfWApO1xuICAgICAgY29uc29sZS5sb2coYGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleDogJHtBcnJheS5mcm9tKGJpdGdvSW5kZXhUb09uQ2hhaW5JbmRleCl9YCk7XG4gICAgICAvLyBpbiBPVkMsIG91dHB1dC5hZGRyZXNzZXNJbmRleCBpcyBkZWZpbmVkIGNvcnJlY3RseSBmcm9tIHRoZSBwcmV2aW91cyBpdGVyYXRpb25cblxuICAgICAgaWYgKHV0eG8ub3V0cHV0SUQgPT09IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQpIHtcbiAgICAgICAgY29uc3QgdXR4b0Ftb3VudCA9IEJpZ0ludCh1dHhvLmFtb3VudCk7XG4gICAgICAgIC8vIGVpdGhlciB1c2VyICgwKSBvciByZWNvdmVyeSAoMilcbiAgICAgICAgLy8gT24gcmVndWxhciBtb2RlOiBbdXNlciwgYml0Z29dIChpLmUuIFswLCAxXSlcbiAgICAgICAgLy8gT24gcmVjb3ZlcnkgbW9kZTogW2JhY2t1cCwgYml0Z29dIChpLmUuIFsyLCAxXSlcbiAgICAgICAgY29uc3QgdXNlck9yQmFja3VwSW5kZXggPSB0aGlzLnJlY292ZXJTaWduZXIgPyAyIDogMDtcbiAgICAgICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICAgICAgY3VycmVudFRvdGFsID0gY3VycmVudFRvdGFsICsgdXR4b0Ftb3VudDtcblxuICAgICAgICBjb25zdCB1dHhvSWQgPSBhdmF4U2VyaWFsLlVUWE9JRC5mcm9tTmF0aXZlKHV0eG8udHhpZCwgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSk7XG5cbiAgICAgICAgbGV0IGFkZHJlc3Nlc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleCAmJiBiaXRnb0luZGV4VG9PbkNoYWluSW5kZXguc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4ID0gWy4uLnV0eG8uYWRkcmVzc2VzSW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4LnB1c2goYml0Z29JbmRleFRvT25DaGFpbkluZGV4LmdldCh1c2VyT3JCYWNrdXBJbmRleCkpO1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4LnB1c2goYml0Z29JbmRleFRvT25DaGFpbkluZGV4LmdldChiaXRnb0luZGV4KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2ZlcklucHV0cyA9IG5ldyBUcmFuc2ZlcklucHV0KFxuICAgICAgICAgIG5ldyBCaWdJbnRQcih1dHhvQW1vdW50KSxcbiAgICAgICAgICBuZXcgSW5wdXQoWy4uLmFkZHJlc3Nlc0luZGV4XS5zb3J0KCkubWFwKChudW0pID0+IG5ldyBJbnQobnVtKSkpXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgY29uc29sZS5sb2coYHVzaW5nIGFkZHJlc3Nlc0luZGV4IHNvcnRlZDogJHtbLi4uYWRkcmVzc2VzSW5kZXhdLnNvcnQoKX1gKTtcblxuICAgICAgICBjb25zdCBpbnB1dCA9IG5ldyBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0KHV0eG9JZCwgYXNzZXRJZCwgdHJhbnNmZXJJbnB1dHMpO1xuICAgICAgICB1dHhvcy5wdXNoKG5ldyBVdHhvKHV0eG9JZCwgYXNzZXRJZCwgdHJhbnNmZXJJbnB1dHMpKTtcblxuICAgICAgICBpbnB1dHMucHVzaChpbnB1dCk7XG4gICAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5jcmVkZW50aWFscyB8fCB0aGlzLnRyYW5zYWN0aW9uLmNyZWRlbnRpYWxzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaWYgKGJ1aWxkT3V0cHV0cykge1xuICAgICAgICAgICAgLy8gRm9yIHRoZSBiaXRnbyBzaWduYXR1cmUgd2UgY3JlYXRlIGFuIGVtcHR5IHNpZ25hdHVyZVxuICAgICAgICAgICAgLy8gRm9yIHRoZSB1c2VyL2JhY2t1cCBzaWduYXR1cmUgd2Ugc3RvcmUgdGhlIGFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSBrZXlcbiAgICAgICAgICAgIC8vIGlmIGJpdGdvIGFkZHJlc3MgY29tZXMgYmVmb3JlICA8IHVzZXIvYmFja3VwIGFkZHJlc3NcblxuICAgICAgICAgICAgLy8gVE9ETyhDUi0xMDczKTogcmVtb3ZlIGxvZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGJpdGdvIGluZGV4IG9uIGNoYWluOiAke3V0eG8uYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF19YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdXNlciBPciBCYWNrdXAgSW5kZXg6ICR7dXR4by5hZGRyZXNzZXNJbmRleFt1c2VyT3JCYWNrdXBJbmRleF19YCk7XG4gICAgICAgICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA8IHV0eG8uYWRkcmVzc2VzSW5kZXhbdXNlck9yQmFja3VwSW5kZXhdKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgb3IgYmFja3VwIGNyZWRlbnRpYWxzIGFmdGVyIGJpdGdvYCk7XG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoW1xuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSgnJykudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhcbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyQXZheC5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbdXNlck9yQmFja3VwSW5kZXhdKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZXIgb3IgYmFja3VwIGNyZWRlbnRpYWxzIGJlZm9yZSBiaXRnb2ApO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhcbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyQXZheC5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbdXNlck9yQmFja3VwSW5kZXhdKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKCcnKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHZlcmlmeSB0aGlzIGVsc2UgY2FzZSBmb3IgT1ZDXG4gICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChcbiAgICAgICAgICAgICAgICBhZGRyZXNzZXNJbmRleC5tYXAoKGkpID0+XG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbaV0pLnRvU3RyaW5nKCdoZXgnKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRPRE8oQ1ItMTA3Myk6IHJlbW92ZSBsb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyhgcmV1c2luZyBjcmVkZW50aWFscyBmcm9tIHRyYW5zYWN0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChidWlsZE91dHB1dHMpIHtcbiAgICAgIGlmIChjdXJyZW50VG90YWwgPCB0b3RhbFRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgIGBVdHhvIG91dHB1dHMgZ2V0ICR7Y3VycmVudFRvdGFsLnRvU3RyaW5nKCl9IGFuZCAke3RvdGFsVGFyZ2V0LnRvU3RyaW5nKCl9IGlzIHJlcXVpcmVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50VG90YWwgPj0gdG90YWxUYXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc3Rha2VPdXRwdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXQoXG4gICAgICAgICAgYXNzZXRJZCxcbiAgICAgICAgICBuZXcgVHJhbnNmZXJPdXRwdXQoXG4gICAgICAgICAgICBuZXcgQmlnSW50UHIodG90YWxUYXJnZXQpLFxuICAgICAgICAgICAgbmV3IE91dHB1dE93bmVycyhcbiAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgICAgICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLFxuICAgICAgICAgICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYXZheFV0aWxzLmJ5dGVzQ29tcGFyZShhLCBiKSlcbiAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHN0YWtlT3V0cHV0cy5wdXNoKHN0YWtlT3V0cHV0KTtcblxuICAgICAgICBpZiAoY3VycmVudFRvdGFsID49IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgICAgYXNzZXRJZCxcbiAgICAgICAgICAgIG5ldyBUcmFuc2Zlck91dHB1dChcbiAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKGN1cnJlbnRUb3RhbCAtIHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgICAgbmV3IE91dHB1dE93bmVycyhcbiAgICAgICAgICAgICAgICBuZXcgQmlnSW50UHIodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUpLFxuICAgICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgICBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEsIGIpKVxuICAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNoYW5nZU91dHB1dHMucHVzaChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlucHV0cy5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEudXR4b0lELnR4SUQudG9CeXRlcygpLCBiLnV0eG9JRC50eElELnRvQnl0ZXMoKSkpO1xuICAgIHJldHVybiB7IGlucHV0cywgc3Rha2VPdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCB1dHhvcywgY3JlZGVudGlhbHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgYWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvblxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRBdmF4VHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVN0YWtlRHVyYXRpb24odGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lLCB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lKTtcbiAgICBjb25zdCB7IGlucHV0cywgc3Rha2VPdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCB1dHhvcywgY3JlZGVudGlhbHMgfSA9IHRoaXMuY2FsY3VsYXRlVXR4b3MoKTtcbiAgICBjb25zdCBiYXNlVHggPSBhdmF4U2VyaWFsLkJhc2VUeC5mcm9tTmF0aXZlKFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELFxuICAgICAgY2hhbmdlT3V0cHV0cyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG5ldyBVaW50OEFycmF5KCkgLy8gZGVmYXVsdCBlbXB0eSBtZW1vXG4gICAgKTtcblxuICAgIGNvbnN0IHN1Ym5ldFZhbGlkYXRvciA9IHB2bVNlcmlhbC5TdWJuZXRWYWxpZGF0b3IuZnJvbU5hdGl2ZShcbiAgICAgIHRoaXMuX25vZGVJRCxcbiAgICAgIHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgIHRoaXMuX2VuZFRpbWUsXG4gICAgICB0aGlzLl9zdGFrZUFtb3VudCxcbiAgICAgIG5ldHdvcmtJRHMuUHJpbWFyeU5ldHdvcmtJRFxuICAgICk7XG5cbiAgICBjb25zdCBzaWduZXIgPSBuZXcgcHZtU2VyaWFsLlNpZ25lcihcbiAgICAgIG5ldyBwdm1TZXJpYWwuUHJvb2ZPZlBvc3Nlc3Npb24oXG4gICAgICAgIEF2YXhVdGlscy5oZXhUb0J1ZmZlcih0aGlzLl9ibHNQdWJsaWNLZXkpLFxuICAgICAgICBBdmF4VXRpbHMuaGV4VG9CdWZmZXIodGhpcy5fYmxzU2lnbmF0dXJlKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSBuZXcgT3V0cHV0T3duZXJzKFxuICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgIFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYXZheFV0aWxzLmJ5dGVzQ29tcGFyZShhLCBiKSlcbiAgICAgICAgLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgKTtcblxuICAgIC8vIFRPRE8oQ1ItMTA3Myk6IGNoZWNrIHRoaXMgdmFsdWVcbiAgICAvLyAgU2hhcmVzIDEwLDAwMCB0aW1lcyBwZXJjZW50YWdlIG9mIHJld2FyZCB0YWtlbiBmcm9tIGRlbGVnYXRvcnNcbiAgICAvLyAgaHR0cHM6Ly9kb2NzLmF2YXgubmV0d29yay9yZWZlcmVuY2UvYXZhbGFuY2hlZ28vcC1jaGFpbi90eG4tZm9ybWF0I3Vuc2lnbmVkLWFkZC12YWxpZGF0b3ItdHhcbiAgICBjb25zdCBzaGFyZXMgPSBuZXcgSW50KDFlNCAqIDIpO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhdmF4VXRpbHMuYnl0ZXNDb21wYXJlKGEsIGIpKVxuICAgICAgLm1hcCgoYWRkcmVzcykgPT4gbmV3IEF2YXhVdGlscy5BZGRyZXNzTWFwKFtbbmV3IEFkZHJlc3MoYWRkcmVzcyksIDBdXSkpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihcbiAgICAgIG5ldyBVbnNpZ25lZFR4KFxuICAgICAgICBuZXcgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgoXG4gICAgICAgICAgYmFzZVR4LFxuICAgICAgICAgIHN1Ym5ldFZhbGlkYXRvcixcbiAgICAgICAgICBzaWduZXIsXG4gICAgICAgICAgc3Rha2VPdXRwdXRzLFxuICAgICAgICAgIG91dHB1dE93bmVycyxcbiAgICAgICAgICBvdXRwdXRPd25lcnMsXG4gICAgICAgICAgc2hhcmVzXG4gICAgICAgICksXG4gICAgICAgIHV0eG9zLFxuICAgICAgICBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSxcbiAgICAgICAgY3JlZGVudGlhbHNcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oeyBrZXkgfTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXIucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICBoYXNTaWduZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3NpZ25lci5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KHsga2V5IH06IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBpZiAoIW5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIGluIGFueSBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==