tedious 18.6.2 → 19.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/README.md +1 -1
- package/lib/all-headers.js +1 -1
- package/lib/all-headers.js.map +1 -1
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +1 -1
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -1
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +2 -2
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -1
- package/lib/always-encrypted/cek-entry.js +1 -1
- package/lib/always-encrypted/cek-entry.js.map +1 -1
- package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -2
- package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -1
- package/lib/always-encrypted/key-crypto.js +1 -1
- package/lib/always-encrypted/key-crypto.js.map +1 -1
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js +1 -1
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -1
- package/lib/always-encrypted/symmetric-key-cache.js +2 -2
- package/lib/always-encrypted/symmetric-key-cache.js.map +1 -1
- package/lib/always-encrypted/symmetric-key.js +1 -1
- package/lib/always-encrypted/symmetric-key.js.map +1 -1
- package/lib/always-encrypted/types.js +1 -1
- package/lib/always-encrypted/types.js.map +1 -1
- package/lib/always-encrypted/utils.js +1 -1
- package/lib/always-encrypted/utils.js.map +1 -1
- package/lib/bulk-load-payload.js +1 -1
- package/lib/bulk-load-payload.js.map +1 -1
- package/lib/bulk-load.js +2 -2
- package/lib/bulk-load.js.map +1 -1
- package/lib/collation.js +1 -1
- package/lib/collation.js.map +1 -1
- package/lib/connection.d.ts +44 -50
- package/lib/connection.js +579 -580
- package/lib/connection.js.map +1 -1
- package/lib/connector.js +10 -18
- package/lib/connector.js.map +1 -1
- package/lib/data-type.js +2 -2
- package/lib/data-type.js.map +1 -1
- package/lib/data-types/bigint.js +2 -2
- package/lib/data-types/bigint.js.map +1 -1
- package/lib/data-types/binary.js +1 -1
- package/lib/data-types/binary.js.map +1 -1
- package/lib/data-types/bit.js +2 -2
- package/lib/data-types/bit.js.map +1 -1
- package/lib/data-types/bitn.js +1 -1
- package/lib/data-types/bitn.js.map +1 -1
- package/lib/data-types/char.js +2 -2
- package/lib/data-types/char.js.map +1 -1
- package/lib/data-types/date.js +1 -1
- package/lib/data-types/date.js.map +1 -1
- package/lib/data-types/datetime.js +2 -2
- package/lib/data-types/datetime.js.map +1 -1
- package/lib/data-types/datetime2.js +2 -2
- package/lib/data-types/datetime2.js.map +1 -1
- package/lib/data-types/datetimen.js +1 -1
- package/lib/data-types/datetimen.js.map +1 -1
- package/lib/data-types/datetimeoffset.js +2 -2
- package/lib/data-types/datetimeoffset.js.map +1 -1
- package/lib/data-types/decimal.js +2 -2
- package/lib/data-types/decimal.js.map +1 -1
- package/lib/data-types/decimaln.js +1 -1
- package/lib/data-types/decimaln.js.map +1 -1
- package/lib/data-types/float.js +2 -2
- package/lib/data-types/float.js.map +1 -1
- package/lib/data-types/floatn.js +1 -1
- package/lib/data-types/floatn.js.map +1 -1
- package/lib/data-types/image.js +1 -1
- package/lib/data-types/image.js.map +1 -1
- package/lib/data-types/int.js +2 -2
- package/lib/data-types/int.js.map +1 -1
- package/lib/data-types/intn.js +1 -1
- package/lib/data-types/intn.js.map +1 -1
- package/lib/data-types/money.js +2 -2
- package/lib/data-types/money.js.map +1 -1
- package/lib/data-types/moneyn.js +1 -1
- package/lib/data-types/moneyn.js.map +1 -1
- package/lib/data-types/nchar.js +1 -1
- package/lib/data-types/nchar.js.map +1 -1
- package/lib/data-types/ntext.js +1 -1
- package/lib/data-types/ntext.js.map +1 -1
- package/lib/data-types/null.js +1 -1
- package/lib/data-types/null.js.map +1 -1
- package/lib/data-types/numeric.js +2 -2
- package/lib/data-types/numeric.js.map +1 -1
- package/lib/data-types/numericn.js +1 -1
- package/lib/data-types/numericn.js.map +1 -1
- package/lib/data-types/nvarchar.js +1 -1
- package/lib/data-types/nvarchar.js.map +1 -1
- package/lib/data-types/real.js +2 -2
- package/lib/data-types/real.js.map +1 -1
- package/lib/data-types/smalldatetime.js +2 -2
- package/lib/data-types/smalldatetime.js.map +1 -1
- package/lib/data-types/smallint.js +2 -2
- package/lib/data-types/smallint.js.map +1 -1
- package/lib/data-types/smallmoney.js +2 -2
- package/lib/data-types/smallmoney.js.map +1 -1
- package/lib/data-types/sql-variant.js +1 -1
- package/lib/data-types/sql-variant.js.map +1 -1
- package/lib/data-types/text.js +2 -2
- package/lib/data-types/text.js.map +1 -1
- package/lib/data-types/time.js +2 -2
- package/lib/data-types/time.js.map +1 -1
- package/lib/data-types/tinyint.js +2 -2
- package/lib/data-types/tinyint.js.map +1 -1
- package/lib/data-types/tvp.js +2 -2
- package/lib/data-types/tvp.js.map +1 -1
- package/lib/data-types/udt.js +1 -1
- package/lib/data-types/udt.js.map +1 -1
- package/lib/data-types/uniqueidentifier.js +1 -1
- package/lib/data-types/uniqueidentifier.js.map +1 -1
- package/lib/data-types/varbinary.js +1 -1
- package/lib/data-types/varbinary.js.map +1 -1
- package/lib/data-types/varchar.js +2 -2
- package/lib/data-types/varchar.js.map +1 -1
- package/lib/data-types/xml.js +1 -1
- package/lib/data-types/xml.js.map +1 -1
- package/lib/debug.js +2 -2
- package/lib/debug.js.map +1 -1
- package/lib/errors.js +1 -1
- package/lib/errors.js.map +1 -1
- package/lib/guid-parser.js +1 -1
- package/lib/guid-parser.js.map +1 -1
- package/lib/incoming-message-stream.js +2 -2
- package/lib/incoming-message-stream.js.map +1 -1
- package/lib/instance-lookup.js +7 -12
- package/lib/instance-lookup.js.map +1 -1
- package/lib/library.js +1 -1
- package/lib/library.js.map +1 -1
- package/lib/login7-payload.js +1 -1
- package/lib/login7-payload.js.map +1 -1
- package/lib/message-io.js +3 -3
- package/lib/message-io.js.map +1 -1
- package/lib/message.js +1 -1
- package/lib/message.js.map +1 -1
- package/lib/metadata-parser.js +1 -1
- package/lib/metadata-parser.js.map +1 -1
- package/lib/ntlm-payload.js +3 -3
- package/lib/ntlm-payload.js.map +1 -1
- package/lib/ntlm.js +1 -1
- package/lib/ntlm.js.map +1 -1
- package/lib/outgoing-message-stream.js +2 -2
- package/lib/outgoing-message-stream.js.map +1 -1
- package/lib/packet.js +1 -1
- package/lib/packet.js.map +1 -1
- package/lib/prelogin-payload.js +2 -2
- package/lib/prelogin-payload.js.map +1 -1
- package/lib/request.js +1 -1
- package/lib/request.js.map +1 -1
- package/lib/rpcrequest-payload.js +2 -2
- package/lib/rpcrequest-payload.js.map +1 -1
- package/lib/sender.js +6 -11
- package/lib/sender.js.map +1 -1
- package/lib/special-stored-procedure.js +1 -1
- package/lib/special-stored-procedure.js.map +1 -1
- package/lib/sqlbatch-payload.js +2 -2
- package/lib/sqlbatch-payload.js.map +1 -1
- package/lib/tds-versions.js +1 -1
- package/lib/tds-versions.js.map +1 -1
- package/lib/tedious.js +2 -2
- package/lib/tedious.js.map +1 -1
- package/lib/token/colmetadata-token-parser.js +1 -1
- package/lib/token/colmetadata-token-parser.js.map +1 -1
- package/lib/token/done-token-parser.js +1 -1
- package/lib/token/done-token-parser.js.map +1 -1
- package/lib/token/env-change-token-parser.js +1 -1
- package/lib/token/env-change-token-parser.js.map +1 -1
- package/lib/token/feature-ext-ack-parser.js +1 -1
- package/lib/token/feature-ext-ack-parser.js.map +1 -1
- package/lib/token/fedauth-info-parser.js +1 -1
- package/lib/token/fedauth-info-parser.js.map +1 -1
- package/lib/token/handler.js +2 -2
- package/lib/token/handler.js.map +1 -1
- package/lib/token/helpers.js +1 -1
- package/lib/token/helpers.js.map +1 -1
- package/lib/token/infoerror-token-parser.js +1 -1
- package/lib/token/infoerror-token-parser.js.map +1 -1
- package/lib/token/loginack-token-parser.js +1 -1
- package/lib/token/loginack-token-parser.js.map +1 -1
- package/lib/token/nbcrow-token-parser.js +2 -2
- package/lib/token/nbcrow-token-parser.js.map +1 -1
- package/lib/token/order-token-parser.js +1 -1
- package/lib/token/order-token-parser.js.map +1 -1
- package/lib/token/returnstatus-token-parser.js +1 -1
- package/lib/token/returnstatus-token-parser.js.map +1 -1
- package/lib/token/returnvalue-token-parser.js +2 -2
- package/lib/token/returnvalue-token-parser.js.map +1 -1
- package/lib/token/row-token-parser.js +2 -2
- package/lib/token/row-token-parser.js.map +1 -1
- package/lib/token/sspi-token-parser.js +1 -1
- package/lib/token/sspi-token-parser.js.map +1 -1
- package/lib/token/stream-parser.js +2 -2
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/token-stream-parser.js +2 -2
- package/lib/token/token-stream-parser.js.map +1 -1
- package/lib/token/token.js +1 -1
- package/lib/token/token.js.map +1 -1
- package/lib/tracking-buffer/writable-tracking-buffer.js +1 -1
- package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
- package/lib/transaction.js +2 -2
- package/lib/transaction.js.map +1 -1
- package/lib/transient-error-lookup.js +1 -1
- package/lib/transient-error-lookup.js.map +1 -1
- package/lib/value-parser.js +2 -2
- package/lib/value-parser.js.map +1 -1
- package/package.json +19 -20
- package/benchmarks/README.md +0 -12
- package/benchmarks/bulk-load/iterable.js +0 -61
- package/benchmarks/common.js +0 -287
- package/benchmarks/connection/open.js +0 -26
- package/benchmarks/package-lock.json +0 -21173
- package/benchmarks/package.json +0 -11
- package/benchmarks/query/call-tvp.js +0 -105
- package/benchmarks/query/insert-varbinary.js +0 -46
- package/benchmarks/query/select-many-rows.js +0 -63
- package/benchmarks/query/select-nvarchar.js +0 -50
- package/benchmarks/query/select-varbinary.js +0 -50
- package/benchmarks/request/rpcrequest-payload-tvp.js +0 -45
- package/benchmarks/request/rpcrequest-payload-varbinary.js +0 -37
- package/benchmarks/token-parser/colmetadata-token.js +0 -27
- package/benchmarks/token-parser/done-token.js +0 -28
- package/benchmarks/token-parser/simple-tokens.js +0 -363
- package/lib/errors/abort-error.d.ts +0 -4
- package/lib/errors/abort-error.js +0 -15
- package/lib/errors/abort-error.js.map +0 -1
- package/lib/errors/timeout-error.d.ts +0 -4
- package/lib/errors/timeout-error.js +0 -15
- package/lib/errors/timeout-error.js.map +0 -1
- package/lib/utils/with-timeout.d.ts +0 -7
- package/lib/utils/with-timeout.js +0 -36
- package/lib/utils/with-timeout.js.map +0 -1
|
@@ -187,4 +187,4 @@ function envChangeParser(buf, offset, _options) {
|
|
|
187
187
|
}
|
|
188
188
|
var _default = exports.default = envChangeParser;
|
|
189
189
|
module.exports = envChangeParser;
|
|
190
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sbGF0aW9uIiwicmVxdWlyZSIsIl90b2tlbiIsIl9oZWxwZXJzIiwidHlwZXMiLCJuYW1lIiwiZXZlbnQiLCJfcmVhZE5ld0FuZE9sZFZhbHVlIiwiYnVmIiwib2Zmc2V0IiwibGVuZ3RoIiwidHlwZSIsIm5ld1ZhbHVlIiwidmFsdWUiLCJyZWFkQlZhckNoYXIiLCJvbGRWYWx1ZSIsIlJlc3VsdCIsIlBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbiIsInBhcnNlSW50IiwiRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbiIsIkxhbmd1YWdlRW52Q2hhbmdlVG9rZW4iLCJDaGFyc2V0RW52Q2hhbmdlVG9rZW4iLCJEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbiIsIkVycm9yIiwicmVhZEJWYXJCeXRlIiwibmV3Q29sbGF0aW9uIiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsInVuZGVmaW5lZCIsIm9sZENvbGxhdGlvbiIsIkNvbGxhdGlvbkNoYW5nZVRva2VuIiwiQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuIiwiQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbiIsIlJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbiIsIlJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuIiwicm91dGVQYWNrZXQiLCJyZWFkVXNWYXJCeXRlIiwicHJvdG9jb2wiLCJyZWFkVUludDgiLCJwb3J0IiwicmVhZFVJbnQxNkxFIiwic2VydmVyTGVuIiwic2VydmVyIiwidG9TdHJpbmciLCJSb3V0aW5nRW52Q2hhbmdlVG9rZW4iLCJjb25zb2xlIiwiZXJyb3IiLCJlbnZDaGFuZ2VQYXJzZXIiLCJfb3B0aW9ucyIsInRva2VuTGVuZ3RoIiwiTm90RW5vdWdoRGF0YUVycm9yIiwidHlwZU51bWJlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vZW52LWNoYW5nZS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4uL2NvbGxhdGlvbic7XG5cbmltcG9ydCB7XG4gIERhdGFiYXNlRW52Q2hhbmdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIENoYXJzZXRFbnZDaGFuZ2VUb2tlbixcbiAgUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuLFxuICBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICB0eXBlIEVudkNoYW5nZVRva2VuXG59IGZyb20gJy4vdG9rZW4nO1xuXG5pbXBvcnQgeyBOb3RFbm91Z2hEYXRhRXJyb3IsIHJlYWRCVmFyQnl0ZSwgcmVhZEJWYXJDaGFyLCByZWFkVUludDE2TEUsIHJlYWRVSW50OCwgcmVhZFVzVmFyQnl0ZSwgUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcblxuY29uc3QgdHlwZXM6IHsgW2tleTogbnVtYmVyXTogeyBuYW1lOiBzdHJpbmcsIGV2ZW50Pzogc3RyaW5nIH19ID0ge1xuICAxOiB7XG4gICAgbmFtZTogJ0RBVEFCQVNFJyxcbiAgICBldmVudDogJ2RhdGFiYXNlQ2hhbmdlJ1xuICB9LFxuICAyOiB7XG4gICAgbmFtZTogJ0xBTkdVQUdFJyxcbiAgICBldmVudDogJ2xhbmd1YWdlQ2hhbmdlJ1xuICB9LFxuICAzOiB7XG4gICAgbmFtZTogJ0NIQVJTRVQnLFxuICAgIGV2ZW50OiAnY2hhcnNldENoYW5nZSdcbiAgfSxcbiAgNDoge1xuICAgIG5hbWU6ICdQQUNLRVRfU0laRScsXG4gICAgZXZlbnQ6ICdwYWNrZXRTaXplQ2hhbmdlJ1xuICB9LFxuICA3OiB7XG4gICAgbmFtZTogJ1NRTF9DT0xMQVRJT04nLFxuICAgIGV2ZW50OiAnc3FsQ29sbGF0aW9uQ2hhbmdlJ1xuICB9LFxuICA4OiB7XG4gICAgbmFtZTogJ0JFR0lOX1RYTicsXG4gICAgZXZlbnQ6ICdiZWdpblRyYW5zYWN0aW9uJ1xuICB9LFxuICA5OiB7XG4gICAgbmFtZTogJ0NPTU1JVF9UWE4nLFxuICAgIGV2ZW50OiAnY29tbWl0VHJhbnNhY3Rpb24nXG4gIH0sXG4gIDEwOiB7XG4gICAgbmFtZTogJ1JPTExCQUNLX1RYTicsXG4gICAgZXZlbnQ6ICdyb2xsYmFja1RyYW5zYWN0aW9uJ1xuICB9LFxuICAxMzoge1xuICAgIG5hbWU6ICdEQVRBQkFTRV9NSVJST1JJTkdfUEFSVE5FUicsXG4gICAgZXZlbnQ6ICdwYXJ0bmVyTm9kZSdcbiAgfSxcbiAgMTc6IHtcbiAgICBuYW1lOiAnVFhOX0VOREVEJ1xuICB9LFxuICAxODoge1xuICAgIG5hbWU6ICdSRVNFVF9DT05ORUNUSU9OJyxcbiAgICBldmVudDogJ3Jlc2V0Q29ubmVjdGlvbidcbiAgfSxcbiAgMjA6IHtcbiAgICBuYW1lOiAnUk9VVElOR19DSEFOR0UnLFxuICAgIGV2ZW50OiAncm91dGluZ0NoYW5nZSdcbiAgfVxufTtcblxuZnVuY3Rpb24gX3JlYWROZXdBbmRPbGRWYWx1ZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCB0eXBlOiB7IG5hbWU6IHN0cmluZywgZXZlbnQ/OiBzdHJpbmcgfSk6IFJlc3VsdDxFbnZDaGFuZ2VUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ0RBVEFCQVNFJzpcbiAgICBjYXNlICdMQU5HVUFHRSc6XG4gICAgY2FzZSAnQ0hBUlNFVCc6XG4gICAgY2FzZSAnUEFDS0VUX1NJWkUnOlxuICAgIGNhc2UgJ0RBVEFCQVNFX01JUlJPUklOR19QQVJUTkVSJzoge1xuICAgICAgbGV0IG5ld1ZhbHVlO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogbmV3VmFsdWUgfSA9IHJlYWRCVmFyQ2hhcihidWYsIG9mZnNldCkpO1xuXG4gICAgICBsZXQgb2xkVmFsdWU7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBvbGRWYWx1ZSB9ID0gcmVhZEJWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ1BBQ0tFVF9TSVpFJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuKHBhcnNlSW50KG5ld1ZhbHVlKSwgcGFyc2VJbnQob2xkVmFsdWUpKSwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlICdEQVRBQkFTRSc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4obmV3VmFsdWUsIG9sZFZhbHVlKSwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlICdMQU5HVUFHRSc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4obmV3VmFsdWUsIG9sZFZhbHVlKSwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlICdDSEFSU0VUJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgQ2hhcnNldEVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAnREFUQUJBU0VfTUlSUk9SSU5HX1BBUlRORVInOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG5ldyBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbihuZXdWYWx1ZSwgb2xkVmFsdWUpLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VucmVhY2hhYmxlJyk7XG4gICAgfVxuXG4gICAgY2FzZSAnU1FMX0NPTExBVElPTic6XG4gICAgY2FzZSAnQkVHSU5fVFhOJzpcbiAgICBjYXNlICdDT01NSVRfVFhOJzpcbiAgICBjYXNlICdST0xMQkFDS19UWE4nOlxuICAgIGNhc2UgJ1JFU0VUX0NPTk5FQ1RJT04nOiB7XG4gICAgICBsZXQgbmV3VmFsdWU7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBuZXdWYWx1ZSB9ID0gcmVhZEJWYXJCeXRlKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBvbGRWYWx1ZTtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IG9sZFZhbHVlIH0gPSByZWFkQlZhckJ5dGUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICAgICAgY2FzZSAnU1FMX0NPTExBVElPTic6IHtcbiAgICAgICAgICBjb25zdCBuZXdDb2xsYXRpb24gPSBuZXdWYWx1ZS5sZW5ndGggPyBDb2xsYXRpb24uZnJvbUJ1ZmZlcihuZXdWYWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3Qgb2xkQ29sbGF0aW9uID0gb2xkVmFsdWUubGVuZ3RoID8gQ29sbGF0aW9uLmZyb21CdWZmZXIob2xkVmFsdWUpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IENvbGxhdGlvbkNoYW5nZVRva2VuKG5ld0NvbGxhdGlvbiwgb2xkQ29sbGF0aW9uKSwgb2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0JFR0lOX1RYTic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbihuZXdWYWx1ZSwgb2xkVmFsdWUpLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgJ0NPTU1JVF9UWE4nOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG5ldyBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAnUk9MTEJBQ0tfVFhOJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAnUkVTRVRfQ09OTkVDVElPTic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5yZWFjaGFibGUnKTtcbiAgICB9XG5cbiAgICBjYXNlICdST1VUSU5HX0NIQU5HRSc6IHtcbiAgICAgIGxldCByb3V0ZVBhY2tldDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHJvdXRlUGFja2V0IH0gPSByZWFkVXNWYXJCeXRlKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBvbGRWYWx1ZTtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IG9sZFZhbHVlIH0gPSByZWFkVXNWYXJCeXRlKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIC8vIFJvdXRpbmcgQ2hhbmdlOlxuICAgICAgLy8gQnl0ZSAxOiBQcm90b2NvbCAobXVzdCBiZSAwKVxuICAgICAgLy8gQnl0ZXMgMi0zIChVU0hPUlQpOiBQb3J0IG51bWJlclxuICAgICAgLy8gQnl0ZXMgNC01IChVU0hPUlQpOiBMZW5ndGggb2Ygc2VydmVyIGRhdGEgaW4gdW5pY29kZSAoMmJ5dGUgY2hhcnMpXG4gICAgICAvLyBCeXRlcyA2LSo6IFNlcnZlciBuYW1lIGluIHVuaWNvZGUgY2hhcmFjdGVyc1xuICAgICAgY29uc3QgcHJvdG9jb2wgPSByb3V0ZVBhY2tldC5yZWFkVUludDgoMCk7XG4gICAgICBpZiAocHJvdG9jb2wgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByb3RvY29sIGJ5dGUgaW4gcm91dGluZyBjaGFuZ2UgZXZlbnQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9ydCA9IHJvdXRlUGFja2V0LnJlYWRVSW50MTZMRSgxKTtcbiAgICAgIGNvbnN0IHNlcnZlckxlbiA9IHJvdXRlUGFja2V0LnJlYWRVSW50MTZMRSgzKTtcbiAgICAgIC8vIDIgYnl0ZXMgcGVyIGNoYXIsIHN0YXJ0aW5nIGF0IG9mZnNldCA1XG4gICAgICBjb25zdCBzZXJ2ZXIgPSByb3V0ZVBhY2tldC50b1N0cmluZygndWNzMicsIDUsIDUgKyAoc2VydmVyTGVuICogMikpO1xuXG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHtcbiAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICBzZXJ2ZXI6IHNlcnZlclxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbihuZXdWYWx1ZSwgb2xkVmFsdWUpLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RlZGlvdXMgPiBVbnN1cHBvcnRlZCBFTlZDSEFOR0UgdHlwZSAnICsgdHlwZS5uYW1lKTtcblxuICAgICAgLy8gc2tpcCB1bmtub3duIGJ5dGVzXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh1bmRlZmluZWQsIG9mZnNldCArIGxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlbnZDaGFuZ2VQYXJzZXIoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBfb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxFbnZDaGFuZ2VUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICBsZXQgdG9rZW5MZW5ndGg7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRva2VuTGVuZ3RoIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBpZiAoYnVmLmxlbmd0aCA8IG9mZnNldCArIHRva2VuTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEVub3VnaERhdGFFcnJvcihvZmZzZXQgKyB0b2tlbkxlbmd0aCk7XG4gIH1cblxuICBsZXQgdHlwZU51bWJlcjtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdHlwZU51bWJlciB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgY29uc3QgdHlwZSA9IHR5cGVzW3R5cGVOdW1iZXJdO1xuXG4gIGlmICghdHlwZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RlZGlvdXMgPiBVbnN1cHBvcnRlZCBFTlZDSEFOR0UgdHlwZSAnICsgdHlwZU51bWJlcik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodW5kZWZpbmVkLCBvZmZzZXQgKyB0b2tlbkxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIF9yZWFkTmV3QW5kT2xkVmFsdWUoYnVmLCBvZmZzZXQsIHRva2VuTGVuZ3RoLCB0eXBlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZW52Q2hhbmdlUGFyc2VyO1xubW9kdWxlLmV4cG9ydHMgPSBlbnZDaGFuZ2VQYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQWVBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUVBLE1BQU1HLEtBQXlELEdBQUc7RUFDaEUsQ0FBQyxFQUFFO0lBQ0RDLElBQUksRUFBRSxVQUFVO0lBQ2hCQyxLQUFLLEVBQUU7RUFDVCxDQUFDO0VBQ0QsQ0FBQyxFQUFFO0lBQ0RELElBQUksRUFBRSxVQUFVO0lBQ2hCQyxLQUFLLEVBQUU7RUFDVCxDQUFDO0VBQ0QsQ0FBQyxFQUFFO0lBQ0RELElBQUksRUFBRSxTQUFTO0lBQ2ZDLEtBQUssRUFBRTtFQUNULENBQUM7RUFDRCxDQUFDLEVBQUU7SUFD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
|
|
190
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sbGF0aW9uIiwicmVxdWlyZSIsIl90b2tlbiIsIl9oZWxwZXJzIiwidHlwZXMiLCJuYW1lIiwiZXZlbnQiLCJfcmVhZE5ld0FuZE9sZFZhbHVlIiwiYnVmIiwib2Zmc2V0IiwibGVuZ3RoIiwidHlwZSIsIm5ld1ZhbHVlIiwidmFsdWUiLCJyZWFkQlZhckNoYXIiLCJvbGRWYWx1ZSIsIlJlc3VsdCIsIlBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbiIsInBhcnNlSW50IiwiRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbiIsIkxhbmd1YWdlRW52Q2hhbmdlVG9rZW4iLCJDaGFyc2V0RW52Q2hhbmdlVG9rZW4iLCJEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbiIsIkVycm9yIiwicmVhZEJWYXJCeXRlIiwibmV3Q29sbGF0aW9uIiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsInVuZGVmaW5lZCIsIm9sZENvbGxhdGlvbiIsIkNvbGxhdGlvbkNoYW5nZVRva2VuIiwiQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuIiwiQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbiIsIlJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbiIsIlJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuIiwicm91dGVQYWNrZXQiLCJyZWFkVXNWYXJCeXRlIiwicHJvdG9jb2wiLCJyZWFkVUludDgiLCJwb3J0IiwicmVhZFVJbnQxNkxFIiwic2VydmVyTGVuIiwic2VydmVyIiwidG9TdHJpbmciLCJSb3V0aW5nRW52Q2hhbmdlVG9rZW4iLCJjb25zb2xlIiwiZXJyb3IiLCJlbnZDaGFuZ2VQYXJzZXIiLCJfb3B0aW9ucyIsInRva2VuTGVuZ3RoIiwiTm90RW5vdWdoRGF0YUVycm9yIiwidHlwZU51bWJlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vZW52LWNoYW5nZS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4uL2NvbGxhdGlvbic7XG5cbmltcG9ydCB7XG4gIERhdGFiYXNlRW52Q2hhbmdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIENoYXJzZXRFbnZDaGFuZ2VUb2tlbixcbiAgUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuLFxuICBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICB0eXBlIEVudkNoYW5nZVRva2VuXG59IGZyb20gJy4vdG9rZW4nO1xuXG5pbXBvcnQgeyBOb3RFbm91Z2hEYXRhRXJyb3IsIHJlYWRCVmFyQnl0ZSwgcmVhZEJWYXJDaGFyLCByZWFkVUludDE2TEUsIHJlYWRVSW50OCwgcmVhZFVzVmFyQnl0ZSwgUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcblxuY29uc3QgdHlwZXM6IHsgW2tleTogbnVtYmVyXTogeyBuYW1lOiBzdHJpbmcsIGV2ZW50Pzogc3RyaW5nIH19ID0ge1xuICAxOiB7XG4gICAgbmFtZTogJ0RBVEFCQVNFJyxcbiAgICBldmVudDogJ2RhdGFiYXNlQ2hhbmdlJ1xuICB9LFxuICAyOiB7XG4gICAgbmFtZTogJ0xBTkdVQUdFJyxcbiAgICBldmVudDogJ2xhbmd1YWdlQ2hhbmdlJ1xuICB9LFxuICAzOiB7XG4gICAgbmFtZTogJ0NIQVJTRVQnLFxuICAgIGV2ZW50OiAnY2hhcnNldENoYW5nZSdcbiAgfSxcbiAgNDoge1xuICAgIG5hbWU6ICdQQUNLRVRfU0laRScsXG4gICAgZXZlbnQ6ICdwYWNrZXRTaXplQ2hhbmdlJ1xuICB9LFxuICA3OiB7XG4gICAgbmFtZTogJ1NRTF9DT0xMQVRJT04nLFxuICAgIGV2ZW50OiAnc3FsQ29sbGF0aW9uQ2hhbmdlJ1xuICB9LFxuICA4OiB7XG4gICAgbmFtZTogJ0JFR0lOX1RYTicsXG4gICAgZXZlbnQ6ICdiZWdpblRyYW5zYWN0aW9uJ1xuICB9LFxuICA5OiB7XG4gICAgbmFtZTogJ0NPTU1JVF9UWE4nLFxuICAgIGV2ZW50OiAnY29tbWl0VHJhbnNhY3Rpb24nXG4gIH0sXG4gIDEwOiB7XG4gICAgbmFtZTogJ1JPTExCQUNLX1RYTicsXG4gICAgZXZlbnQ6ICdyb2xsYmFja1RyYW5zYWN0aW9uJ1xuICB9LFxuICAxMzoge1xuICAgIG5hbWU6ICdEQVRBQkFTRV9NSVJST1JJTkdfUEFSVE5FUicsXG4gICAgZXZlbnQ6ICdwYXJ0bmVyTm9kZSdcbiAgfSxcbiAgMTc6IHtcbiAgICBuYW1lOiAnVFhOX0VOREVEJ1xuICB9LFxuICAxODoge1xuICAgIG5hbWU6ICdSRVNFVF9DT05ORUNUSU9OJyxcbiAgICBldmVudDogJ3Jlc2V0Q29ubmVjdGlvbidcbiAgfSxcbiAgMjA6IHtcbiAgICBuYW1lOiAnUk9VVElOR19DSEFOR0UnLFxuICAgIGV2ZW50OiAncm91dGluZ0NoYW5nZSdcbiAgfVxufTtcblxuZnVuY3Rpb24gX3JlYWROZXdBbmRPbGRWYWx1ZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCB0eXBlOiB7IG5hbWU6IHN0cmluZywgZXZlbnQ/OiBzdHJpbmcgfSk6IFJlc3VsdDxFbnZDaGFuZ2VUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ0RBVEFCQVNFJzpcbiAgICBjYXNlICdMQU5HVUFHRSc6XG4gICAgY2FzZSAnQ0hBUlNFVCc6XG4gICAgY2FzZSAnUEFDS0VUX1NJWkUnOlxuICAgIGNhc2UgJ0RBVEFCQVNFX01JUlJPUklOR19QQVJUTkVSJzoge1xuICAgICAgbGV0IG5ld1ZhbHVlO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogbmV3VmFsdWUgfSA9IHJlYWRCVmFyQ2hhcihidWYsIG9mZnNldCkpO1xuXG4gICAgICBsZXQgb2xkVmFsdWU7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBvbGRWYWx1ZSB9ID0gcmVhZEJWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ1BBQ0tFVF9TSVpFJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuKHBhcnNlSW50KG5ld1ZhbHVlKSwgcGFyc2VJbnQob2xkVmFsdWUpKSwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlICdEQVRBQkFTRSc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4obmV3VmFsdWUsIG9sZFZhbHVlKSwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlICdMQU5HVUFHRSc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4obmV3VmFsdWUsIG9sZFZhbHVlKSwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlICdDSEFSU0VUJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgQ2hhcnNldEVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAnREFUQUJBU0VfTUlSUk9SSU5HX1BBUlRORVInOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG5ldyBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbihuZXdWYWx1ZSwgb2xkVmFsdWUpLCBvZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VucmVhY2hhYmxlJyk7XG4gICAgfVxuXG4gICAgY2FzZSAnU1FMX0NPTExBVElPTic6XG4gICAgY2FzZSAnQkVHSU5fVFhOJzpcbiAgICBjYXNlICdDT01NSVRfVFhOJzpcbiAgICBjYXNlICdST0xMQkFDS19UWE4nOlxuICAgIGNhc2UgJ1JFU0VUX0NPTk5FQ1RJT04nOiB7XG4gICAgICBsZXQgbmV3VmFsdWU7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBuZXdWYWx1ZSB9ID0gcmVhZEJWYXJCeXRlKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBvbGRWYWx1ZTtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IG9sZFZhbHVlIH0gPSByZWFkQlZhckJ5dGUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICAgICAgY2FzZSAnU1FMX0NPTExBVElPTic6IHtcbiAgICAgICAgICBjb25zdCBuZXdDb2xsYXRpb24gPSBuZXdWYWx1ZS5sZW5ndGggPyBDb2xsYXRpb24uZnJvbUJ1ZmZlcihuZXdWYWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3Qgb2xkQ29sbGF0aW9uID0gb2xkVmFsdWUubGVuZ3RoID8gQ29sbGF0aW9uLmZyb21CdWZmZXIob2xkVmFsdWUpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IENvbGxhdGlvbkNoYW5nZVRva2VuKG5ld0NvbGxhdGlvbiwgb2xkQ29sbGF0aW9uKSwgb2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0JFR0lOX1RYTic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbihuZXdWYWx1ZSwgb2xkVmFsdWUpLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgJ0NPTU1JVF9UWE4nOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG5ldyBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAnUk9MTEJBQ0tfVFhOJzpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAnUkVTRVRfQ09OTkVDVElPTic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKG5ld1ZhbHVlLCBvbGRWYWx1ZSksIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5yZWFjaGFibGUnKTtcbiAgICB9XG5cbiAgICBjYXNlICdST1VUSU5HX0NIQU5HRSc6IHtcbiAgICAgIGxldCByb3V0ZVBhY2tldDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHJvdXRlUGFja2V0IH0gPSByZWFkVXNWYXJCeXRlKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBvbGRWYWx1ZTtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IG9sZFZhbHVlIH0gPSByZWFkVXNWYXJCeXRlKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIC8vIFJvdXRpbmcgQ2hhbmdlOlxuICAgICAgLy8gQnl0ZSAxOiBQcm90b2NvbCAobXVzdCBiZSAwKVxuICAgICAgLy8gQnl0ZXMgMi0zIChVU0hPUlQpOiBQb3J0IG51bWJlclxuICAgICAgLy8gQnl0ZXMgNC01IChVU0hPUlQpOiBMZW5ndGggb2Ygc2VydmVyIGRhdGEgaW4gdW5pY29kZSAoMmJ5dGUgY2hhcnMpXG4gICAgICAvLyBCeXRlcyA2LSo6IFNlcnZlciBuYW1lIGluIHVuaWNvZGUgY2hhcmFjdGVyc1xuICAgICAgY29uc3QgcHJvdG9jb2wgPSByb3V0ZVBhY2tldC5yZWFkVUludDgoMCk7XG4gICAgICBpZiAocHJvdG9jb2wgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByb3RvY29sIGJ5dGUgaW4gcm91dGluZyBjaGFuZ2UgZXZlbnQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9ydCA9IHJvdXRlUGFja2V0LnJlYWRVSW50MTZMRSgxKTtcbiAgICAgIGNvbnN0IHNlcnZlckxlbiA9IHJvdXRlUGFja2V0LnJlYWRVSW50MTZMRSgzKTtcbiAgICAgIC8vIDIgYnl0ZXMgcGVyIGNoYXIsIHN0YXJ0aW5nIGF0IG9mZnNldCA1XG4gICAgICBjb25zdCBzZXJ2ZXIgPSByb3V0ZVBhY2tldC50b1N0cmluZygndWNzMicsIDUsIDUgKyAoc2VydmVyTGVuICogMikpO1xuXG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHtcbiAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICBzZXJ2ZXI6IHNlcnZlclxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbihuZXdWYWx1ZSwgb2xkVmFsdWUpLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RlZGlvdXMgPiBVbnN1cHBvcnRlZCBFTlZDSEFOR0UgdHlwZSAnICsgdHlwZS5uYW1lKTtcblxuICAgICAgLy8gc2tpcCB1bmtub3duIGJ5dGVzXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh1bmRlZmluZWQsIG9mZnNldCArIGxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlbnZDaGFuZ2VQYXJzZXIoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBfb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxFbnZDaGFuZ2VUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICBsZXQgdG9rZW5MZW5ndGg7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRva2VuTGVuZ3RoIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBpZiAoYnVmLmxlbmd0aCA8IG9mZnNldCArIHRva2VuTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEVub3VnaERhdGFFcnJvcihvZmZzZXQgKyB0b2tlbkxlbmd0aCk7XG4gIH1cblxuICBsZXQgdHlwZU51bWJlcjtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdHlwZU51bWJlciB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgY29uc3QgdHlwZSA9IHR5cGVzW3R5cGVOdW1iZXJdO1xuXG4gIGlmICghdHlwZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RlZGlvdXMgPiBVbnN1cHBvcnRlZCBFTlZDSEFOR0UgdHlwZSAnICsgdHlwZU51bWJlcik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodW5kZWZpbmVkLCBvZmZzZXQgKyB0b2tlbkxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIF9yZWFkTmV3QW5kT2xkVmFsdWUoYnVmLCBvZmZzZXQsIHRva2VuTGVuZ3RoLCB0eXBlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZW52Q2hhbmdlUGFyc2VyO1xubW9kdWxlLmV4cG9ydHMgPSBlbnZDaGFuZ2VQYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQWVBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUVBLE1BQU1HLEtBQXlELEdBQUc7RUFDaEUsQ0FBQyxFQUFFO0lBQ0RDLElBQUksRUFBRSxVQUFVO0lBQ2hCQyxLQUFLLEVBQUU7RUFDVCxDQUFDO0VBQ0QsQ0FBQyxFQUFFO0lBQ0RELElBQUksRUFBRSxVQUFVO0lBQ2hCQyxLQUFLLEVBQUU7RUFDVCxDQUFDO0VBQ0QsQ0FBQyxFQUFFO0lBQ0RELElBQUksRUFBRSxTQUFTO0lBQ2ZDLEtBQUssRUFBRTtFQUNULENBQUM7RUFDRCxDQUFDLEVBQUU7SUFD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-change-token-parser.js","names":["_collation","require","_token","_helpers","types","name","event","_readNewAndOldValue","buf","offset","length","type","newValue","value","readBVarChar","oldValue","Result","PacketSizeEnvChangeToken","parseInt","DatabaseEnvChangeToken","LanguageEnvChangeToken","CharsetEnvChangeToken","DatabaseMirroringPartnerEnvChangeToken","Error","readBVarByte","newCollation","Collation","fromBuffer","undefined","oldCollation","CollationChangeToken","BeginTransactionEnvChangeToken","CommitTransactionEnvChangeToken","RollbackTransactionEnvChangeToken","ResetConnectionEnvChangeToken","routePacket","readUsVarByte","protocol","readUInt8","port","readUInt16LE","serverLen","server","toString","RoutingEnvChangeToken","console","error","envChangeParser","_options","tokenLength","NotEnoughDataError","typeNumber","_default","exports","default","module"],"sources":["../../src/token/env-change-token-parser.ts"],"sourcesContent":["import { type ParserOptions } from './stream-parser';\nimport { Collation } from '../collation';\n\nimport {\n DatabaseEnvChangeToken,\n LanguageEnvChangeToken,\n CharsetEnvChangeToken,\n PacketSizeEnvChangeToken,\n BeginTransactionEnvChangeToken,\n CommitTransactionEnvChangeToken,\n RollbackTransactionEnvChangeToken,\n DatabaseMirroringPartnerEnvChangeToken,\n ResetConnectionEnvChangeToken,\n RoutingEnvChangeToken,\n CollationChangeToken,\n type EnvChangeToken\n} from './token';\n\nimport { NotEnoughDataError, readBVarByte, readBVarChar, readUInt16LE, readUInt8, readUsVarByte, Result } from './helpers';\n\nconst types: { [key: number]: { name: string, event?: string }} = {\n 1: {\n name: 'DATABASE',\n event: 'databaseChange'\n },\n 2: {\n name: 'LANGUAGE',\n event: 'languageChange'\n },\n 3: {\n name: 'CHARSET',\n event: 'charsetChange'\n },\n 4: {\n name: 'PACKET_SIZE',\n event: 'packetSizeChange'\n },\n 7: {\n name: 'SQL_COLLATION',\n event: 'sqlCollationChange'\n },\n 8: {\n name: 'BEGIN_TXN',\n event: 'beginTransaction'\n },\n 9: {\n name: 'COMMIT_TXN',\n event: 'commitTransaction'\n },\n 10: {\n name: 'ROLLBACK_TXN',\n event: 'rollbackTransaction'\n },\n 13: {\n name: 'DATABASE_MIRRORING_PARTNER',\n event: 'partnerNode'\n },\n 17: {\n name: 'TXN_ENDED'\n },\n 18: {\n name: 'RESET_CONNECTION',\n event: 'resetConnection'\n },\n 20: {\n name: 'ROUTING_CHANGE',\n event: 'routingChange'\n }\n};\n\nfunction _readNewAndOldValue(buf: Buffer, offset: number, length: number, type: { name: string, event?: string }): Result<EnvChangeToken | undefined> {\n switch (type.name) {\n case 'DATABASE':\n case 'LANGUAGE':\n case 'CHARSET':\n case 'PACKET_SIZE':\n case 'DATABASE_MIRRORING_PARTNER': {\n let newValue;\n ({ offset, value: newValue } = readBVarChar(buf, offset));\n\n let oldValue;\n ({ offset, value: oldValue } = readBVarChar(buf, offset));\n\n switch (type.name) {\n case 'PACKET_SIZE':\n return new Result(new PacketSizeEnvChangeToken(parseInt(newValue), parseInt(oldValue)), offset);\n\n case 'DATABASE':\n return new Result(new DatabaseEnvChangeToken(newValue, oldValue), offset);\n\n case 'LANGUAGE':\n return new Result(new LanguageEnvChangeToken(newValue, oldValue), offset);\n\n case 'CHARSET':\n return new Result(new CharsetEnvChangeToken(newValue, oldValue), offset);\n\n case 'DATABASE_MIRRORING_PARTNER':\n return new Result(new DatabaseMirroringPartnerEnvChangeToken(newValue, oldValue), offset);\n }\n\n throw new Error('unreachable');\n }\n\n case 'SQL_COLLATION':\n case 'BEGIN_TXN':\n case 'COMMIT_TXN':\n case 'ROLLBACK_TXN':\n case 'RESET_CONNECTION': {\n let newValue;\n ({ offset, value: newValue } = readBVarByte(buf, offset));\n\n let oldValue;\n ({ offset, value: oldValue } = readBVarByte(buf, offset));\n\n switch (type.name) {\n case 'SQL_COLLATION': {\n const newCollation = newValue.length ? Collation.fromBuffer(newValue) : undefined;\n const oldCollation = oldValue.length ? Collation.fromBuffer(oldValue) : undefined;\n\n return new Result(new CollationChangeToken(newCollation, oldCollation), offset);\n }\n\n case 'BEGIN_TXN':\n return new Result(new BeginTransactionEnvChangeToken(newValue, oldValue), offset);\n\n case 'COMMIT_TXN':\n return new Result(new CommitTransactionEnvChangeToken(newValue, oldValue), offset);\n\n case 'ROLLBACK_TXN':\n return new Result(new RollbackTransactionEnvChangeToken(newValue, oldValue), offset);\n\n case 'RESET_CONNECTION':\n return new Result(new ResetConnectionEnvChangeToken(newValue, oldValue), offset);\n }\n\n throw new Error('unreachable');\n }\n\n case 'ROUTING_CHANGE': {\n let routePacket;\n ({ offset, value: routePacket } = readUsVarByte(buf, offset));\n\n let oldValue;\n ({ offset, value: oldValue } = readUsVarByte(buf, offset));\n\n // Routing Change:\n // Byte 1: Protocol (must be 0)\n // Bytes 2-3 (USHORT): Port number\n // Bytes 4-5 (USHORT): Length of server data in unicode (2byte chars)\n // Bytes 6-*: Server name in unicode characters\n const protocol = routePacket.readUInt8(0);\n if (protocol !== 0) {\n throw new Error('Unknown protocol byte in routing change event');\n }\n\n const port = routePacket.readUInt16LE(1);\n const serverLen = routePacket.readUInt16LE(3);\n // 2 bytes per char, starting at offset 5\n const server = routePacket.toString('ucs2', 5, 5 + (serverLen * 2));\n\n const newValue = {\n protocol: protocol,\n port: port,\n server: server\n };\n\n return new Result(new RoutingEnvChangeToken(newValue, oldValue), offset);\n }\n\n default: {\n console.error('Tedious > Unsupported ENVCHANGE type ' + type.name);\n\n // skip unknown bytes\n return new Result(undefined, offset + length - 1);\n }\n }\n}\n\nfunction envChangeParser(buf: Buffer, offset: number, _options: ParserOptions): Result<EnvChangeToken | undefined> {\n let tokenLength;\n ({ offset, value: tokenLength } = readUInt16LE(buf, offset));\n\n if (buf.length < offset + tokenLength) {\n throw new NotEnoughDataError(offset + tokenLength);\n }\n\n let typeNumber;\n ({ offset, value: typeNumber } = readUInt8(buf, offset));\n\n const type = types[typeNumber];\n\n if (!type) {\n console.error('Tedious > Unsupported ENVCHANGE type ' + typeNumber);\n return new Result(undefined, offset + tokenLength - 1);\n }\n\n return _readNewAndOldValue(buf, offset, tokenLength, type);\n}\n\nexport default envChangeParser;\nmodule.exports = envChangeParser;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env-change-token-parser.js","names":["_collation","require","_token","_helpers","types","name","event","_readNewAndOldValue","buf","offset","length","type","newValue","value","readBVarChar","oldValue","Result","PacketSizeEnvChangeToken","parseInt","DatabaseEnvChangeToken","LanguageEnvChangeToken","CharsetEnvChangeToken","DatabaseMirroringPartnerEnvChangeToken","Error","readBVarByte","newCollation","Collation","fromBuffer","undefined","oldCollation","CollationChangeToken","BeginTransactionEnvChangeToken","CommitTransactionEnvChangeToken","RollbackTransactionEnvChangeToken","ResetConnectionEnvChangeToken","routePacket","readUsVarByte","protocol","readUInt8","port","readUInt16LE","serverLen","server","toString","RoutingEnvChangeToken","console","error","envChangeParser","_options","tokenLength","NotEnoughDataError","typeNumber","_default","exports","default","module"],"sources":["../../src/token/env-change-token-parser.ts"],"sourcesContent":["import { type ParserOptions } from './stream-parser';\nimport { Collation } from '../collation';\n\nimport {\n DatabaseEnvChangeToken,\n LanguageEnvChangeToken,\n CharsetEnvChangeToken,\n PacketSizeEnvChangeToken,\n BeginTransactionEnvChangeToken,\n CommitTransactionEnvChangeToken,\n RollbackTransactionEnvChangeToken,\n DatabaseMirroringPartnerEnvChangeToken,\n ResetConnectionEnvChangeToken,\n RoutingEnvChangeToken,\n CollationChangeToken,\n type EnvChangeToken\n} from './token';\n\nimport { NotEnoughDataError, readBVarByte, readBVarChar, readUInt16LE, readUInt8, readUsVarByte, Result } from './helpers';\n\nconst types: { [key: number]: { name: string, event?: string }} = {\n 1: {\n name: 'DATABASE',\n event: 'databaseChange'\n },\n 2: {\n name: 'LANGUAGE',\n event: 'languageChange'\n },\n 3: {\n name: 'CHARSET',\n event: 'charsetChange'\n },\n 4: {\n name: 'PACKET_SIZE',\n event: 'packetSizeChange'\n },\n 7: {\n name: 'SQL_COLLATION',\n event: 'sqlCollationChange'\n },\n 8: {\n name: 'BEGIN_TXN',\n event: 'beginTransaction'\n },\n 9: {\n name: 'COMMIT_TXN',\n event: 'commitTransaction'\n },\n 10: {\n name: 'ROLLBACK_TXN',\n event: 'rollbackTransaction'\n },\n 13: {\n name: 'DATABASE_MIRRORING_PARTNER',\n event: 'partnerNode'\n },\n 17: {\n name: 'TXN_ENDED'\n },\n 18: {\n name: 'RESET_CONNECTION',\n event: 'resetConnection'\n },\n 20: {\n name: 'ROUTING_CHANGE',\n event: 'routingChange'\n }\n};\n\nfunction _readNewAndOldValue(buf: Buffer, offset: number, length: number, type: { name: string, event?: string }): Result<EnvChangeToken | undefined> {\n switch (type.name) {\n case 'DATABASE':\n case 'LANGUAGE':\n case 'CHARSET':\n case 'PACKET_SIZE':\n case 'DATABASE_MIRRORING_PARTNER': {\n let newValue;\n ({ offset, value: newValue } = readBVarChar(buf, offset));\n\n let oldValue;\n ({ offset, value: oldValue } = readBVarChar(buf, offset));\n\n switch (type.name) {\n case 'PACKET_SIZE':\n return new Result(new PacketSizeEnvChangeToken(parseInt(newValue), parseInt(oldValue)), offset);\n\n case 'DATABASE':\n return new Result(new DatabaseEnvChangeToken(newValue, oldValue), offset);\n\n case 'LANGUAGE':\n return new Result(new LanguageEnvChangeToken(newValue, oldValue), offset);\n\n case 'CHARSET':\n return new Result(new CharsetEnvChangeToken(newValue, oldValue), offset);\n\n case 'DATABASE_MIRRORING_PARTNER':\n return new Result(new DatabaseMirroringPartnerEnvChangeToken(newValue, oldValue), offset);\n }\n\n throw new Error('unreachable');\n }\n\n case 'SQL_COLLATION':\n case 'BEGIN_TXN':\n case 'COMMIT_TXN':\n case 'ROLLBACK_TXN':\n case 'RESET_CONNECTION': {\n let newValue;\n ({ offset, value: newValue } = readBVarByte(buf, offset));\n\n let oldValue;\n ({ offset, value: oldValue } = readBVarByte(buf, offset));\n\n switch (type.name) {\n case 'SQL_COLLATION': {\n const newCollation = newValue.length ? Collation.fromBuffer(newValue) : undefined;\n const oldCollation = oldValue.length ? Collation.fromBuffer(oldValue) : undefined;\n\n return new Result(new CollationChangeToken(newCollation, oldCollation), offset);\n }\n\n case 'BEGIN_TXN':\n return new Result(new BeginTransactionEnvChangeToken(newValue, oldValue), offset);\n\n case 'COMMIT_TXN':\n return new Result(new CommitTransactionEnvChangeToken(newValue, oldValue), offset);\n\n case 'ROLLBACK_TXN':\n return new Result(new RollbackTransactionEnvChangeToken(newValue, oldValue), offset);\n\n case 'RESET_CONNECTION':\n return new Result(new ResetConnectionEnvChangeToken(newValue, oldValue), offset);\n }\n\n throw new Error('unreachable');\n }\n\n case 'ROUTING_CHANGE': {\n let routePacket;\n ({ offset, value: routePacket } = readUsVarByte(buf, offset));\n\n let oldValue;\n ({ offset, value: oldValue } = readUsVarByte(buf, offset));\n\n // Routing Change:\n // Byte 1: Protocol (must be 0)\n // Bytes 2-3 (USHORT): Port number\n // Bytes 4-5 (USHORT): Length of server data in unicode (2byte chars)\n // Bytes 6-*: Server name in unicode characters\n const protocol = routePacket.readUInt8(0);\n if (protocol !== 0) {\n throw new Error('Unknown protocol byte in routing change event');\n }\n\n const port = routePacket.readUInt16LE(1);\n const serverLen = routePacket.readUInt16LE(3);\n // 2 bytes per char, starting at offset 5\n const server = routePacket.toString('ucs2', 5, 5 + (serverLen * 2));\n\n const newValue = {\n protocol: protocol,\n port: port,\n server: server\n };\n\n return new Result(new RoutingEnvChangeToken(newValue, oldValue), offset);\n }\n\n default: {\n console.error('Tedious > Unsupported ENVCHANGE type ' + type.name);\n\n // skip unknown bytes\n return new Result(undefined, offset + length - 1);\n }\n }\n}\n\nfunction envChangeParser(buf: Buffer, offset: number, _options: ParserOptions): Result<EnvChangeToken | undefined> {\n let tokenLength;\n ({ offset, value: tokenLength } = readUInt16LE(buf, offset));\n\n if (buf.length < offset + tokenLength) {\n throw new NotEnoughDataError(offset + tokenLength);\n }\n\n let typeNumber;\n ({ offset, value: typeNumber } = readUInt8(buf, offset));\n\n const type = types[typeNumber];\n\n if (!type) {\n console.error('Tedious > Unsupported ENVCHANGE type ' + typeNumber);\n return new Result(undefined, offset + tokenLength - 1);\n }\n\n return _readNewAndOldValue(buf, offset, tokenLength, type);\n}\n\nexport default envChangeParser;\nmodule.exports = envChangeParser;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -49,4 +49,4 @@ function featureExtAckParser(buf, offset, _options) {
|
|
|
49
49
|
}
|
|
50
50
|
var _default = exports.default = featureExtAckParser;
|
|
51
51
|
module.exports = featureExtAckParser;
|
|
52
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVycyIsInJlcXVpcmUiLCJfdG9rZW4iLCJGRUFUVVJFX0lEIiwiU0VTU0lPTlJFQ09WRVJZIiwiRkVEQVVUSCIsIkNPTFVNTkVOQ1JZUFRJT04iLCJHTE9CQUxUUkFOU0FDVElPTlMiLCJBWlVSRVNRTFNVUFBPUlQiLCJVVEY4X1NVUFBPUlQiLCJURVJNSU5BVE9SIiwiZmVhdHVyZUV4dEFja1BhcnNlciIsImJ1ZiIsIm9mZnNldCIsIl9vcHRpb25zIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwiZmVhdHVyZUlkIiwidmFsdWUiLCJyZWFkVUludDgiLCJSZXN1bHQiLCJGZWF0dXJlRXh0QWNrVG9rZW4iLCJmZWF0dXJlQWNrRGF0YUxlbiIsInJlYWRVSW50MzJMRSIsImxlbmd0aCIsIk5vdEVub3VnaERhdGFFcnJvciIsImZlYXR1cmVEYXRhIiwic2xpY2UiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL2ZlYXR1cmUtZXh0LWFjay1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yLCByZWFkVUludDMyTEUsIHJlYWRVSW50OCwgUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHR5cGUgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5cbmltcG9ydCB7IEZlYXR1cmVFeHRBY2tUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuXG5jb25zdCBGRUFUVVJFX0lEID0ge1xuICBTRVNTSU9OUkVDT1ZFUlk6IDB4MDEsXG4gIEZFREFVVEg6IDB4MDIsXG4gIENPTFVNTkVOQ1JZUFRJT046IDB4MDQsXG4gIEdMT0JBTFRSQU5TQUNUSU9OUzogMHgwNSxcbiAgQVpVUkVTUUxTVVBQT1JUOiAweDA4LFxuICBVVEY4X1NVUFBPUlQ6IDB4MEEsXG4gIFRFUk1JTkFUT1I6IDB4RkZcbn07XG5cbmZ1bmN0aW9uIGZlYXR1cmVFeHRBY2tQYXJzZXIoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBfb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxGZWF0dXJlRXh0QWNrVG9rZW4+
|
|
52
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVycyIsInJlcXVpcmUiLCJfdG9rZW4iLCJGRUFUVVJFX0lEIiwiU0VTU0lPTlJFQ09WRVJZIiwiRkVEQVVUSCIsIkNPTFVNTkVOQ1JZUFRJT04iLCJHTE9CQUxUUkFOU0FDVElPTlMiLCJBWlVSRVNRTFNVUFBPUlQiLCJVVEY4X1NVUFBPUlQiLCJURVJNSU5BVE9SIiwiZmVhdHVyZUV4dEFja1BhcnNlciIsImJ1ZiIsIm9mZnNldCIsIl9vcHRpb25zIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwiZmVhdHVyZUlkIiwidmFsdWUiLCJyZWFkVUludDgiLCJSZXN1bHQiLCJGZWF0dXJlRXh0QWNrVG9rZW4iLCJmZWF0dXJlQWNrRGF0YUxlbiIsInJlYWRVSW50MzJMRSIsImxlbmd0aCIsIk5vdEVub3VnaERhdGFFcnJvciIsImZlYXR1cmVEYXRhIiwic2xpY2UiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL2ZlYXR1cmUtZXh0LWFjay1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yLCByZWFkVUludDMyTEUsIHJlYWRVSW50OCwgUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHR5cGUgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5cbmltcG9ydCB7IEZlYXR1cmVFeHRBY2tUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuXG5jb25zdCBGRUFUVVJFX0lEID0ge1xuICBTRVNTSU9OUkVDT1ZFUlk6IDB4MDEsXG4gIEZFREFVVEg6IDB4MDIsXG4gIENPTFVNTkVOQ1JZUFRJT046IDB4MDQsXG4gIEdMT0JBTFRSQU5TQUNUSU9OUzogMHgwNSxcbiAgQVpVUkVTUUxTVVBQT1JUOiAweDA4LFxuICBVVEY4X1NVUFBPUlQ6IDB4MEEsXG4gIFRFUk1JTkFUT1I6IDB4RkZcbn07XG5cbmZ1bmN0aW9uIGZlYXR1cmVFeHRBY2tQYXJzZXIoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBfb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxGZWF0dXJlRXh0QWNrVG9rZW4+IHtcbiAgbGV0IGZlZEF1dGg6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHV0ZjhTdXBwb3J0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IGZlYXR1cmVJZDtcbiAgICAoeyB2YWx1ZTogZmVhdHVyZUlkLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgaWYgKGZlYXR1cmVJZCA9PT0gRkVBVFVSRV9JRC5URVJNSU5BVE9SKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3VsdChuZXcgRmVhdHVyZUV4dEFja1Rva2VuKGZlZEF1dGgsIHV0ZjhTdXBwb3J0KSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBsZXQgZmVhdHVyZUFja0RhdGFMZW47XG4gICAgKHsgdmFsdWU6IGZlYXR1cmVBY2tEYXRhTGVuLCBvZmZzZXQgfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPCBvZmZzZXQgKyBmZWF0dXJlQWNrRGF0YUxlbikge1xuICAgICAgdGhyb3cgbmV3IE5vdEVub3VnaERhdGFFcnJvcihvZmZzZXQgKyBmZWF0dXJlQWNrRGF0YUxlbik7XG4gICAgfVxuXG4gICAgY29uc3QgZmVhdHVyZURhdGEgPSBidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBmZWF0dXJlQWNrRGF0YUxlbik7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVBY2tEYXRhTGVuO1xuXG4gICAgc3dpdGNoIChmZWF0dXJlSWQpIHtcbiAgICAgIGNhc2UgRkVBVFVSRV9JRC5GRURBVVRIOlxuICAgICAgICBmZWRBdXRoID0gZmVhdHVyZURhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGRUFUVVJFX0lELlVURjhfU1VQUE9SVDpcbiAgICAgICAgdXRmOFN1cHBvcnQgPSAhIWZlYXR1cmVEYXRhWzBdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZmVhdHVyZUV4dEFja1BhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gZmVhdHVyZUV4dEFja1BhcnNlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBR0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBRUEsTUFBTUUsVUFBVSxHQUFHO0VBQ2pCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsa0JBQWtCLEVBQUUsSUFBSTtFQUN4QkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLFlBQVksRUFBRSxJQUFJO0VBQ2xCQyxVQUFVLEVBQUU7QUFDZCxDQUFDO0FBRUQsU0FBU0MsbUJBQW1CQSxDQUFDQyxHQUFXLEVBQUVDLE1BQWMsRUFBRUMsUUFBdUIsRUFBOEI7RUFDN0csSUFBSUMsT0FBMkI7RUFDL0IsSUFBSUMsV0FBZ0M7RUFFcEMsT0FBTyxJQUFJLEVBQUU7SUFDWCxJQUFJQyxTQUFTO0lBQ2IsQ0FBQztNQUFFQyxLQUFLLEVBQUVELFNBQVM7TUFBRUo7SUFBTyxDQUFDLEdBQUcsSUFBQU0sa0JBQVMsRUFBQ1AsR0FBRyxFQUFFQyxNQUFNLENBQUM7SUFFdEQsSUFBSUksU0FBUyxLQUFLZCxVQUFVLENBQUNPLFVBQVUsRUFBRTtNQUN2QyxPQUFPLElBQUlVLGVBQU0sQ0FBQyxJQUFJQyx5QkFBa0IsQ0FBQ04sT0FBTyxFQUFFQyxXQUFXLENBQUMsRUFBRUgsTUFBTSxDQUFDO0lBQ3pFO0lBRUEsSUFBSVMsaUJBQWlCO0lBQ3JCLENBQUM7TUFBRUosS0FBSyxFQUFFSSxpQkFBaUI7TUFBRVQ7SUFBTyxDQUFDLEdBQUcsSUFBQVUscUJBQVksRUFBQ1gsR0FBRyxFQUFFQyxNQUFNLENBQUM7SUFFakUsSUFBSUQsR0FBRyxDQUFDWSxNQUFNLEdBQUdYLE1BQU0sR0FBR1MsaUJBQWlCLEVBQUU7TUFDM0MsTUFBTSxJQUFJRywyQkFBa0IsQ0FBQ1osTUFBTSxHQUFHUyxpQkFBaUIsQ0FBQztJQUMxRDtJQUVBLE1BQU1JLFdBQVcsR0FBR2QsR0FBRyxDQUFDZSxLQUFLLENBQUNkLE1BQU0sRUFBRUEsTUFBTSxHQUFHUyxpQkFBaUIsQ0FBQztJQUNqRVQsTUFBTSxJQUFJUyxpQkFBaUI7SUFFM0IsUUFBUUwsU0FBUztNQUNmLEtBQUtkLFVBQVUsQ0FBQ0UsT0FBTztRQUNyQlUsT0FBTyxHQUFHVyxXQUFXO1FBQ3JCO01BQ0YsS0FBS3ZCLFVBQVUsQ0FBQ00sWUFBWTtRQUMxQk8sV0FBVyxHQUFHLENBQUMsQ0FBQ1UsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM5QjtJQUNKO0VBQ0Y7QUFDRjtBQUFDLElBQUFFLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBRWNuQixtQkFBbUI7QUFDbENvQixNQUFNLENBQUNGLE9BQU8sR0FBR2xCLG1CQUFtQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-ext-ack-parser.js","names":["_helpers","require","_token","FEATURE_ID","SESSIONRECOVERY","FEDAUTH","COLUMNENCRYPTION","GLOBALTRANSACTIONS","AZURESQLSUPPORT","UTF8_SUPPORT","TERMINATOR","featureExtAckParser","buf","offset","_options","fedAuth","utf8Support","featureId","value","readUInt8","Result","FeatureExtAckToken","featureAckDataLen","readUInt32LE","length","NotEnoughDataError","featureData","slice","_default","exports","default","module"],"sources":["../../src/token/feature-ext-ack-parser.ts"],"sourcesContent":["import { NotEnoughDataError, readUInt32LE, readUInt8, Result } from './helpers';\nimport { type ParserOptions } from './stream-parser';\n\nimport { FeatureExtAckToken } from './token';\n\nconst FEATURE_ID = {\n SESSIONRECOVERY: 0x01,\n FEDAUTH: 0x02,\n COLUMNENCRYPTION: 0x04,\n GLOBALTRANSACTIONS: 0x05,\n AZURESQLSUPPORT: 0x08,\n UTF8_SUPPORT: 0x0A,\n TERMINATOR: 0xFF\n};\n\nfunction featureExtAckParser(buf: Buffer, offset: number, _options: ParserOptions): Result<FeatureExtAckToken> {\n let fedAuth: Buffer | undefined;\n let utf8Support: boolean | undefined;\n\n while (true) {\n let featureId;\n ({ value: featureId, offset } = readUInt8(buf, offset));\n\n if (featureId === FEATURE_ID.TERMINATOR) {\n return new Result(new FeatureExtAckToken(fedAuth, utf8Support), offset);\n }\n\n let featureAckDataLen;\n ({ value: featureAckDataLen, offset } = readUInt32LE(buf, offset));\n\n if (buf.length < offset + featureAckDataLen) {\n throw new NotEnoughDataError(offset + featureAckDataLen);\n }\n\n const featureData = buf.slice(offset, offset + featureAckDataLen);\n offset += featureAckDataLen;\n\n switch (featureId) {\n case FEATURE_ID.FEDAUTH:\n fedAuth = featureData;\n break;\n case FEATURE_ID.UTF8_SUPPORT:\n utf8Support = !!featureData[0];\n break;\n }\n }\n}\n\nexport default featureExtAckParser;\nmodule.exports = featureExtAckParser;\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,UAAU,GAAG;EACjBC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,gBAAgB,EAAE,IAAI;EACtBC,kBAAkB,EAAE,IAAI;EACxBC,eAAe,EAAE,IAAI;EACrBC,YAAY,EAAE,IAAI;EAClBC,UAAU,EAAE;AACd,CAAC;AAED,SAASC,mBAAmBA,CAACC,GAAW,EAAEC,MAAc,EAAEC,QAAuB,EAA8B;EAC7G,IAAIC,OAA2B;EAC/B,IAAIC,WAAgC;EAEpC,OAAO,IAAI,EAAE;IACX,IAAIC,SAAS;IACb,CAAC;MAAEC,KAAK,EAAED,SAAS;MAAEJ;IAAO,CAAC,GAAG,IAAAM,kBAAS,EAACP,GAAG,EAAEC,MAAM,CAAC;IAEtD,IAAII,SAAS,KAAKd,UAAU,CAACO,UAAU,EAAE;MACvC,OAAO,IAAIU,eAAM,CAAC,IAAIC,yBAAkB,CAACN,OAAO,EAAEC,WAAW,CAAC,EAAEH,MAAM,CAAC;IACzE;IAEA,IAAIS,iBAAiB;IACrB,CAAC;MAAEJ,KAAK,EAAEI,iBAAiB;MAAET;IAAO,CAAC,GAAG,IAAAU,qBAAY,EAACX,GAAG,EAAEC,MAAM,CAAC;IAEjE,IAAID,GAAG,CAACY,MAAM,GAAGX,MAAM,GAAGS,iBAAiB,EAAE;MAC3C,MAAM,IAAIG,2BAAkB,CAACZ,MAAM,GAAGS,iBAAiB,CAAC;IAC1D;IAEA,MAAMI,WAAW,GAAGd,GAAG,CAACe,KAAK,CAACd,MAAM,EAAEA,MAAM,GAAGS,iBAAiB,CAAC;IACjET,MAAM,IAAIS,iBAAiB;IAE3B,QAAQL,SAAS;MACf,KAAKd,UAAU,CAACE,OAAO;QACrBU,OAAO,GAAGW,WAAW;QACrB;MACF,KAAKvB,UAAU,CAACM,YAAY;QAC1BO,WAAW,GAAG,CAAC,CAACU,WAAW,CAAC,CAAC,CAAC;QAC9B;IACJ;EACF;AACF;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcnB,mBAAmB;AAClCoB,MAAM,CAACF,OAAO,GAAGlB,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"feature-ext-ack-parser.js","names":["_helpers","require","_token","FEATURE_ID","SESSIONRECOVERY","FEDAUTH","COLUMNENCRYPTION","GLOBALTRANSACTIONS","AZURESQLSUPPORT","UTF8_SUPPORT","TERMINATOR","featureExtAckParser","buf","offset","_options","fedAuth","utf8Support","featureId","value","readUInt8","Result","FeatureExtAckToken","featureAckDataLen","readUInt32LE","length","NotEnoughDataError","featureData","slice","_default","exports","default","module"],"sources":["../../src/token/feature-ext-ack-parser.ts"],"sourcesContent":["import { NotEnoughDataError, readUInt32LE, readUInt8, Result } from './helpers';\nimport { type ParserOptions } from './stream-parser';\n\nimport { FeatureExtAckToken } from './token';\n\nconst FEATURE_ID = {\n SESSIONRECOVERY: 0x01,\n FEDAUTH: 0x02,\n COLUMNENCRYPTION: 0x04,\n GLOBALTRANSACTIONS: 0x05,\n AZURESQLSUPPORT: 0x08,\n UTF8_SUPPORT: 0x0A,\n TERMINATOR: 0xFF\n};\n\nfunction featureExtAckParser(buf: Buffer, offset: number, _options: ParserOptions): Result<FeatureExtAckToken> {\n let fedAuth: Buffer | undefined;\n let utf8Support: boolean | undefined;\n\n while (true) {\n let featureId;\n ({ value: featureId, offset } = readUInt8(buf, offset));\n\n if (featureId === FEATURE_ID.TERMINATOR) {\n return new Result(new FeatureExtAckToken(fedAuth, utf8Support), offset);\n }\n\n let featureAckDataLen;\n ({ value: featureAckDataLen, offset } = readUInt32LE(buf, offset));\n\n if (buf.length < offset + featureAckDataLen) {\n throw new NotEnoughDataError(offset + featureAckDataLen);\n }\n\n const featureData = buf.slice(offset, offset + featureAckDataLen);\n offset += featureAckDataLen;\n\n switch (featureId) {\n case FEATURE_ID.FEDAUTH:\n fedAuth = featureData;\n break;\n case FEATURE_ID.UTF8_SUPPORT:\n utf8Support = !!featureData[0];\n break;\n }\n }\n}\n\nexport default featureExtAckParser;\nmodule.exports = featureExtAckParser;\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,UAAU,GAAG;EACjBC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,gBAAgB,EAAE,IAAI;EACtBC,kBAAkB,EAAE,IAAI;EACxBC,eAAe,EAAE,IAAI;EACrBC,YAAY,EAAE,IAAI;EAClBC,UAAU,EAAE;AACd,CAAC;AAED,SAASC,mBAAmBA,CAACC,GAAW,EAAEC,MAAc,EAAEC,QAAuB,EAA8B;EAC7G,IAAIC,OAA2B;EAC/B,IAAIC,WAAgC;EAEpC,OAAO,IAAI,EAAE;IACX,IAAIC,SAAS;IACb,CAAC;MAAEC,KAAK,EAAED,SAAS;MAAEJ;IAAO,CAAC,GAAG,IAAAM,kBAAS,EAACP,GAAG,EAAEC,MAAM,CAAC;IAEtD,IAAII,SAAS,KAAKd,UAAU,CAACO,UAAU,EAAE;MACvC,OAAO,IAAIU,eAAM,CAAC,IAAIC,yBAAkB,CAACN,OAAO,EAAEC,WAAW,CAAC,EAAEH,MAAM,CAAC;IACzE;IAEA,IAAIS,iBAAiB;IACrB,CAAC;MAAEJ,KAAK,EAAEI,iBAAiB;MAAET;IAAO,CAAC,GAAG,IAAAU,qBAAY,EAACX,GAAG,EAAEC,MAAM,CAAC;IAEjE,IAAID,GAAG,CAACY,MAAM,GAAGX,MAAM,GAAGS,iBAAiB,EAAE;MAC3C,MAAM,IAAIG,2BAAkB,CAACZ,MAAM,GAAGS,iBAAiB,CAAC;IAC1D;IAEA,MAAMI,WAAW,GAAGd,GAAG,CAACe,KAAK,CAACd,MAAM,EAAEA,MAAM,GAAGS,iBAAiB,CAAC;IACjET,MAAM,IAAIS,iBAAiB;IAE3B,QAAQL,SAAS;MACf,KAAKd,UAAU,CAACE,OAAO;QACrBU,OAAO,GAAGW,WAAW;QACrB;MACF,KAAKvB,UAAU,CAACM,YAAY;QAC1BO,WAAW,GAAG,CAAC,CAACU,WAAW,CAAC,CAAC,CAAC;QAC9B;IACJ;EACF;AACF;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcnB,mBAAmB;AAClCoB,MAAM,CAACF,OAAO,GAAGlB,mBAAmB","ignoreList":[]}
|
|
@@ -59,4 +59,4 @@ function fedAuthInfoParser(buf, offset, _options) {
|
|
|
59
59
|
}
|
|
60
60
|
var _default = exports.default = fedAuthInfoParser;
|
|
61
61
|
module.exports = fedAuthInfoParser;
|
|
62
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVycyIsInJlcXVpcmUiLCJfdG9rZW4iLCJGRURBVVRISU5GT0lEIiwiU1RTVVJMIiwiU1BOIiwicmVhZEZlZEF1dGhJbmZvIiwiZGF0YSIsIm9mZnNldCIsInNwbiIsInN0c3VybCIsImNvdW50T2ZJbmZvSURzIiwicmVhZFVJbnQzMkxFIiwiaSIsImZlZGF1dGhJbmZvSUQiLCJyZWFkVUludDgiLCJmZWRBdXRoSW5mb0RhdGFMZW4iLCJmZWRBdXRoSW5mb0RhdGFPZmZzZXQiLCJ0b1N0cmluZyIsImZlZEF1dGhJbmZvUGFyc2VyIiwiYnVmIiwiX29wdGlvbnMiLCJ0b2tlbkxlbmd0aCIsInZhbHVlIiwibGVuZ3RoIiwiTm90RW5vdWdoRGF0YUVycm9yIiwic2xpY2UiLCJSZXN1bHQiLCJGZWRBdXRoSW5mb1Rva2VuIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9mZWRhdXRoLWluZm8tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vdEVub3VnaERhdGFFcnJvciwgcmVhZFVJbnQzMkxFLCBSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IEZlZEF1dGhJbmZvVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuY29uc3QgRkVEQVVUSElORk9JRCA9IHtcbiAgU1RTVVJMOiAweDAxLFxuICBTUE46IDB4MDJcbn07XG5cbmZ1bmN0aW9uIHJlYWRGZWRBdXRoSW5mbyhkYXRhOiBCdWZmZXIpOiB7IHNwbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHN1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGxldCBzcG4sIHN0c3VybDtcblxuICBjb25zdCBjb3VudE9mSW5mb0lEcyA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gIG9mZnNldCArPSA0O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRPZkluZm9JRHM7IGkrKykge1xuICAgIGNvbnN0IGZlZGF1dGhJbmZvSUQgPSBkYXRhLnJlYWRVSW50OChvZmZzZXQpO1xuICAgIG9mZnNldCArPSAxO1xuXG4gICAgY29uc3QgZmVkQXV0aEluZm9EYXRhTGVuID0gZGF0YS5yZWFkVUludDMyTEUob2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gNDtcblxuICAgIGNvbnN0IGZlZEF1dGhJbmZvRGF0YU9mZnNldCA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDQ7XG5cbiAgICBzd2l0Y2ggKGZlZGF1dGhJbmZvSUQpIHtcbiAgICAgIGNhc2UgRkVEQVVUSElORk9JRC5TUE46XG4gICAgICAgIHNwbiA9IGRhdGEudG9TdHJpbmcoJ3VjczInLCBmZWRBdXRoSW5mb0RhdGFPZmZzZXQsIGZlZEF1dGhJbmZvRGF0YU9mZnNldCArIGZlZEF1dGhJbmZvRGF0YUxlbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZFREFVVEhJTkZPSUQuU1RTVVJMOlxuICAgICAgICBzdHN1cmwgPSBkYXRhLnRvU3RyaW5nKCd1Y3MyJywgZmVkQXV0aEluZm9EYXRhT2Zmc2V0LCBmZWRBdXRoSW5mb0RhdGFPZmZzZXQgKyBmZWRBdXRoSW5mb0RhdGFMZW4pO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gaWdub3JpbmcgdW5rbm93biBmZWRhdXRoaW5mbyBvcHRpb25zXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzcG4sIHN0c3VybCB9O1xufVxuXG5mdW5jdGlvbiBmZWRBdXRoSW5mb1BhcnNlcihidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIF9vcHRpb25zOiBQYXJzZXJPcHRpb25zKTogUmVzdWx0PEZlZEF1dGhJbmZvVG9rZW4+
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVycyIsInJlcXVpcmUiLCJfdG9rZW4iLCJGRURBVVRISU5GT0lEIiwiU1RTVVJMIiwiU1BOIiwicmVhZEZlZEF1dGhJbmZvIiwiZGF0YSIsIm9mZnNldCIsInNwbiIsInN0c3VybCIsImNvdW50T2ZJbmZvSURzIiwicmVhZFVJbnQzMkxFIiwiaSIsImZlZGF1dGhJbmZvSUQiLCJyZWFkVUludDgiLCJmZWRBdXRoSW5mb0RhdGFMZW4iLCJmZWRBdXRoSW5mb0RhdGFPZmZzZXQiLCJ0b1N0cmluZyIsImZlZEF1dGhJbmZvUGFyc2VyIiwiYnVmIiwiX29wdGlvbnMiLCJ0b2tlbkxlbmd0aCIsInZhbHVlIiwibGVuZ3RoIiwiTm90RW5vdWdoRGF0YUVycm9yIiwic2xpY2UiLCJSZXN1bHQiLCJGZWRBdXRoSW5mb1Rva2VuIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9mZWRhdXRoLWluZm8tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vdEVub3VnaERhdGFFcnJvciwgcmVhZFVJbnQzMkxFLCBSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IEZlZEF1dGhJbmZvVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuY29uc3QgRkVEQVVUSElORk9JRCA9IHtcbiAgU1RTVVJMOiAweDAxLFxuICBTUE46IDB4MDJcbn07XG5cbmZ1bmN0aW9uIHJlYWRGZWRBdXRoSW5mbyhkYXRhOiBCdWZmZXIpOiB7IHNwbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHN1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGxldCBzcG4sIHN0c3VybDtcblxuICBjb25zdCBjb3VudE9mSW5mb0lEcyA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gIG9mZnNldCArPSA0O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRPZkluZm9JRHM7IGkrKykge1xuICAgIGNvbnN0IGZlZGF1dGhJbmZvSUQgPSBkYXRhLnJlYWRVSW50OChvZmZzZXQpO1xuICAgIG9mZnNldCArPSAxO1xuXG4gICAgY29uc3QgZmVkQXV0aEluZm9EYXRhTGVuID0gZGF0YS5yZWFkVUludDMyTEUob2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gNDtcblxuICAgIGNvbnN0IGZlZEF1dGhJbmZvRGF0YU9mZnNldCA9IGRhdGEucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDQ7XG5cbiAgICBzd2l0Y2ggKGZlZGF1dGhJbmZvSUQpIHtcbiAgICAgIGNhc2UgRkVEQVVUSElORk9JRC5TUE46XG4gICAgICAgIHNwbiA9IGRhdGEudG9TdHJpbmcoJ3VjczInLCBmZWRBdXRoSW5mb0RhdGFPZmZzZXQsIGZlZEF1dGhJbmZvRGF0YU9mZnNldCArIGZlZEF1dGhJbmZvRGF0YUxlbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZFREFVVEhJTkZPSUQuU1RTVVJMOlxuICAgICAgICBzdHN1cmwgPSBkYXRhLnRvU3RyaW5nKCd1Y3MyJywgZmVkQXV0aEluZm9EYXRhT2Zmc2V0LCBmZWRBdXRoSW5mb0RhdGFPZmZzZXQgKyBmZWRBdXRoSW5mb0RhdGFMZW4pO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gaWdub3JpbmcgdW5rbm93biBmZWRhdXRoaW5mbyBvcHRpb25zXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzcG4sIHN0c3VybCB9O1xufVxuXG5mdW5jdGlvbiBmZWRBdXRoSW5mb1BhcnNlcihidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIF9vcHRpb25zOiBQYXJzZXJPcHRpb25zKTogUmVzdWx0PEZlZEF1dGhJbmZvVG9rZW4+IHtcbiAgbGV0IHRva2VuTGVuZ3RoO1xuICAoeyBvZmZzZXQsIHZhbHVlOiB0b2tlbkxlbmd0aCB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgaWYgKGJ1Zi5sZW5ndGggPCBvZmZzZXQgKyB0b2tlbkxlbmd0aCkge1xuICAgIHRocm93IG5ldyBOb3RFbm91Z2hEYXRhRXJyb3Iob2Zmc2V0ICsgdG9rZW5MZW5ndGgpO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGJ1Zi5zbGljZShvZmZzZXQsIG9mZnNldCArIHRva2VuTGVuZ3RoKTtcbiAgb2Zmc2V0ICs9IHRva2VuTGVuZ3RoO1xuXG4gIGNvbnN0IHsgc3BuLCBzdHN1cmwgfSA9IHJlYWRGZWRBdXRoSW5mbyhkYXRhKTtcbiAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IEZlZEF1dGhJbmZvVG9rZW4oc3BuLCBzdHN1cmwpLCBvZmZzZXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmZWRBdXRoSW5mb1BhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gZmVkQXV0aEluZm9QYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUVBLE1BQU1FLGFBQWEsR0FBRztFQUNwQkMsTUFBTSxFQUFFLElBQUk7RUFDWkMsR0FBRyxFQUFFO0FBQ1AsQ0FBQztBQUVELFNBQVNDLGVBQWVBLENBQUNDLElBQVksRUFBMkQ7RUFDOUYsSUFBSUMsTUFBTSxHQUFHLENBQUM7RUFDZCxJQUFJQyxHQUFHLEVBQUVDLE1BQU07RUFFZixNQUFNQyxjQUFjLEdBQUdKLElBQUksQ0FBQ0ssWUFBWSxDQUFDSixNQUFNLENBQUM7RUFDaERBLE1BQU0sSUFBSSxDQUFDO0VBRVgsS0FBSyxJQUFJSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLGNBQWMsRUFBRUUsQ0FBQyxFQUFFLEVBQUU7SUFDdkMsTUFBTUMsYUFBYSxHQUFHUCxJQUFJLENBQUNRLFNBQVMsQ0FBQ1AsTUFBTSxDQUFDO0lBQzVDQSxNQUFNLElBQUksQ0FBQztJQUVYLE1BQU1RLGtCQUFrQixHQUFHVCxJQUFJLENBQUNLLFlBQVksQ0FBQ0osTUFBTSxDQUFDO0lBQ3BEQSxNQUFNLElBQUksQ0FBQztJQUVYLE1BQU1TLHFCQUFxQixHQUFHVixJQUFJLENBQUNLLFlBQVksQ0FBQ0osTUFBTSxDQUFDO0lBQ3ZEQSxNQUFNLElBQUksQ0FBQztJQUVYLFFBQVFNLGFBQWE7TUFDbkIsS0FBS1gsYUFBYSxDQUFDRSxHQUFHO1FBQ3BCSSxHQUFHLEdBQUdGLElBQUksQ0FBQ1csUUFBUSxDQUFDLE1BQU0sRUFBRUQscUJBQXFCLEVBQUVBLHFCQUFxQixHQUFHRCxrQkFBa0IsQ0FBQztRQUM5RjtNQUVGLEtBQUtiLGFBQWEsQ0FBQ0MsTUFBTTtRQUN2Qk0sTUFBTSxHQUFHSCxJQUFJLENBQUNXLFFBQVEsQ0FBQyxNQUFNLEVBQUVELHFCQUFxQixFQUFFQSxxQkFBcUIsR0FBR0Qsa0JBQWtCLENBQUM7UUFDakc7O01BRUY7TUFDQTtRQUNFO0lBQ0o7RUFDRjtFQUVBLE9BQU87SUFBRVAsR0FBRztJQUFFQztFQUFPLENBQUM7QUFDeEI7QUFFQSxTQUFTUyxpQkFBaUJBLENBQUNDLEdBQVcsRUFBRVosTUFBYyxFQUFFYSxRQUF1QixFQUE0QjtFQUN6RyxJQUFJQyxXQUFXO0VBQ2YsQ0FBQztJQUFFZCxNQUFNO0lBQUVlLEtBQUssRUFBRUQ7RUFBWSxDQUFDLEdBQUcsSUFBQVYscUJBQVksRUFBQ1EsR0FBRyxFQUFFWixNQUFNLENBQUM7RUFFM0QsSUFBSVksR0FBRyxDQUFDSSxNQUFNLEdBQUdoQixNQUFNLEdBQUdjLFdBQVcsRUFBRTtJQUNyQyxNQUFNLElBQUlHLDJCQUFrQixDQUFDakIsTUFBTSxHQUFHYyxXQUFXLENBQUM7RUFDcEQ7RUFFQSxNQUFNZixJQUFJLEdBQUdhLEdBQUcsQ0FBQ00sS0FBSyxDQUFDbEIsTUFBTSxFQUFFQSxNQUFNLEdBQUdjLFdBQVcsQ0FBQztFQUNwRGQsTUFBTSxJQUFJYyxXQUFXO0VBRXJCLE1BQU07SUFBRWIsR0FBRztJQUFFQztFQUFPLENBQUMsR0FBR0osZUFBZSxDQUFDQyxJQUFJLENBQUM7RUFDN0MsT0FBTyxJQUFJb0IsZUFBTSxDQUFDLElBQUlDLHVCQUFnQixDQUFDbkIsR0FBRyxFQUFFQyxNQUFNLENBQUMsRUFBRUYsTUFBTSxDQUFDO0FBQzlEO0FBQUMsSUFBQXFCLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBRWNaLGlCQUFpQjtBQUNoQ2EsTUFBTSxDQUFDRixPQUFPLEdBQUdYLGlCQUFpQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fedauth-info-parser.js","names":["_helpers","require","_token","FEDAUTHINFOID","STSURL","SPN","readFedAuthInfo","data","offset","spn","stsurl","countOfInfoIDs","readUInt32LE","i","fedauthInfoID","readUInt8","fedAuthInfoDataLen","fedAuthInfoDataOffset","toString","fedAuthInfoParser","buf","_options","tokenLength","value","length","NotEnoughDataError","slice","Result","FedAuthInfoToken","_default","exports","default","module"],"sources":["../../src/token/fedauth-info-parser.ts"],"sourcesContent":["import { NotEnoughDataError, readUInt32LE, Result } from './helpers';\nimport { type ParserOptions } from './stream-parser';\nimport { FedAuthInfoToken } from './token';\n\nconst FEDAUTHINFOID = {\n STSURL: 0x01,\n SPN: 0x02\n};\n\nfunction readFedAuthInfo(data: Buffer): { spn: string | undefined, stsurl: string | undefined } {\n let offset = 0;\n let spn, stsurl;\n\n const countOfInfoIDs = data.readUInt32LE(offset);\n offset += 4;\n\n for (let i = 0; i < countOfInfoIDs; i++) {\n const fedauthInfoID = data.readUInt8(offset);\n offset += 1;\n\n const fedAuthInfoDataLen = data.readUInt32LE(offset);\n offset += 4;\n\n const fedAuthInfoDataOffset = data.readUInt32LE(offset);\n offset += 4;\n\n switch (fedauthInfoID) {\n case FEDAUTHINFOID.SPN:\n spn = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);\n break;\n\n case FEDAUTHINFOID.STSURL:\n stsurl = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);\n break;\n\n // ignoring unknown fedauthinfo options\n default:\n break;\n }\n }\n\n return { spn, stsurl };\n}\n\nfunction fedAuthInfoParser(buf: Buffer, offset: number, _options: ParserOptions): Result<FedAuthInfoToken> {\n let tokenLength;\n ({ offset, value: tokenLength } = readUInt32LE(buf, offset));\n\n if (buf.length < offset + tokenLength) {\n throw new NotEnoughDataError(offset + tokenLength);\n }\n\n const data = buf.slice(offset, offset + tokenLength);\n offset += tokenLength;\n\n const { spn, stsurl } = readFedAuthInfo(data);\n return new Result(new FedAuthInfoToken(spn, stsurl), offset);\n}\n\nexport default fedAuthInfoParser;\nmodule.exports = fedAuthInfoParser;\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,aAAa,GAAG;EACpBC,MAAM,EAAE,IAAI;EACZC,GAAG,EAAE;AACP,CAAC;AAED,SAASC,eAAeA,CAACC,IAAY,EAA2D;EAC9F,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,GAAG,EAAEC,MAAM;EAEf,MAAMC,cAAc,GAAGJ,IAAI,CAACK,YAAY,CAACJ,MAAM,CAAC;EAChDA,MAAM,IAAI,CAAC;EAEX,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,cAAc,EAAEE,CAAC,EAAE,EAAE;IACvC,MAAMC,aAAa,GAAGP,IAAI,CAACQ,SAAS,CAACP,MAAM,CAAC;IAC5CA,MAAM,IAAI,CAAC;IAEX,MAAMQ,kBAAkB,GAAGT,IAAI,CAACK,YAAY,CAACJ,MAAM,CAAC;IACpDA,MAAM,IAAI,CAAC;IAEX,MAAMS,qBAAqB,GAAGV,IAAI,CAACK,YAAY,CAACJ,MAAM,CAAC;IACvDA,MAAM,IAAI,CAAC;IAEX,QAAQM,aAAa;MACnB,KAAKX,aAAa,CAACE,GAAG;QACpBI,GAAG,GAAGF,IAAI,CAACW,QAAQ,CAAC,MAAM,EAAED,qBAAqB,EAAEA,qBAAqB,GAAGD,kBAAkB,CAAC;QAC9F;MAEF,KAAKb,aAAa,CAACC,MAAM;QACvBM,MAAM,GAAGH,IAAI,CAACW,QAAQ,CAAC,MAAM,EAAED,qBAAqB,EAAEA,qBAAqB,GAAGD,kBAAkB,CAAC;QACjG;;MAEF;MACA;QACE;IACJ;EACF;EAEA,OAAO;IAAEP,GAAG;IAAEC;EAAO,CAAC;AACxB;AAEA,SAASS,iBAAiBA,CAACC,GAAW,EAAEZ,MAAc,EAAEa,QAAuB,EAA4B;EACzG,IAAIC,WAAW;EACf,CAAC;IAAEd,MAAM;IAAEe,KAAK,EAAED;EAAY,CAAC,GAAG,IAAAV,qBAAY,EAACQ,GAAG,EAAEZ,MAAM,CAAC;EAE3D,IAAIY,GAAG,CAACI,MAAM,GAAGhB,MAAM,GAAGc,WAAW,EAAE;IACrC,MAAM,IAAIG,2BAAkB,CAACjB,MAAM,GAAGc,WAAW,CAAC;EACpD;EAEA,MAAMf,IAAI,GAAGa,GAAG,CAACM,KAAK,CAAClB,MAAM,EAAEA,MAAM,GAAGc,WAAW,CAAC;EACpDd,MAAM,IAAIc,WAAW;EAErB,MAAM;IAAEb,GAAG;IAAEC;EAAO,CAAC,GAAGJ,eAAe,CAACC,IAAI,CAAC;EAC7C,OAAO,IAAIoB,eAAM,CAAC,IAAIC,uBAAgB,CAACnB,GAAG,EAAEC,MAAM,CAAC,EAAEF,MAAM,CAAC;AAC9D;AAAC,IAAAqB,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcZ,iBAAiB;AAChCa,MAAM,CAACF,OAAO,GAAGX,iBAAiB"}
|
|
1
|
+
{"version":3,"file":"fedauth-info-parser.js","names":["_helpers","require","_token","FEDAUTHINFOID","STSURL","SPN","readFedAuthInfo","data","offset","spn","stsurl","countOfInfoIDs","readUInt32LE","i","fedauthInfoID","readUInt8","fedAuthInfoDataLen","fedAuthInfoDataOffset","toString","fedAuthInfoParser","buf","_options","tokenLength","value","length","NotEnoughDataError","slice","Result","FedAuthInfoToken","_default","exports","default","module"],"sources":["../../src/token/fedauth-info-parser.ts"],"sourcesContent":["import { NotEnoughDataError, readUInt32LE, Result } from './helpers';\nimport { type ParserOptions } from './stream-parser';\nimport { FedAuthInfoToken } from './token';\n\nconst FEDAUTHINFOID = {\n STSURL: 0x01,\n SPN: 0x02\n};\n\nfunction readFedAuthInfo(data: Buffer): { spn: string | undefined, stsurl: string | undefined } {\n let offset = 0;\n let spn, stsurl;\n\n const countOfInfoIDs = data.readUInt32LE(offset);\n offset += 4;\n\n for (let i = 0; i < countOfInfoIDs; i++) {\n const fedauthInfoID = data.readUInt8(offset);\n offset += 1;\n\n const fedAuthInfoDataLen = data.readUInt32LE(offset);\n offset += 4;\n\n const fedAuthInfoDataOffset = data.readUInt32LE(offset);\n offset += 4;\n\n switch (fedauthInfoID) {\n case FEDAUTHINFOID.SPN:\n spn = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);\n break;\n\n case FEDAUTHINFOID.STSURL:\n stsurl = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);\n break;\n\n // ignoring unknown fedauthinfo options\n default:\n break;\n }\n }\n\n return { spn, stsurl };\n}\n\nfunction fedAuthInfoParser(buf: Buffer, offset: number, _options: ParserOptions): Result<FedAuthInfoToken> {\n let tokenLength;\n ({ offset, value: tokenLength } = readUInt32LE(buf, offset));\n\n if (buf.length < offset + tokenLength) {\n throw new NotEnoughDataError(offset + tokenLength);\n }\n\n const data = buf.slice(offset, offset + tokenLength);\n offset += tokenLength;\n\n const { spn, stsurl } = readFedAuthInfo(data);\n return new Result(new FedAuthInfoToken(spn, stsurl), offset);\n}\n\nexport default fedAuthInfoParser;\nmodule.exports = fedAuthInfoParser;\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,aAAa,GAAG;EACpBC,MAAM,EAAE,IAAI;EACZC,GAAG,EAAE;AACP,CAAC;AAED,SAASC,eAAeA,CAACC,IAAY,EAA2D;EAC9F,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,GAAG,EAAEC,MAAM;EAEf,MAAMC,cAAc,GAAGJ,IAAI,CAACK,YAAY,CAACJ,MAAM,CAAC;EAChDA,MAAM,IAAI,CAAC;EAEX,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,cAAc,EAAEE,CAAC,EAAE,EAAE;IACvC,MAAMC,aAAa,GAAGP,IAAI,CAACQ,SAAS,CAACP,MAAM,CAAC;IAC5CA,MAAM,IAAI,CAAC;IAEX,MAAMQ,kBAAkB,GAAGT,IAAI,CAACK,YAAY,CAACJ,MAAM,CAAC;IACpDA,MAAM,IAAI,CAAC;IAEX,MAAMS,qBAAqB,GAAGV,IAAI,CAACK,YAAY,CAACJ,MAAM,CAAC;IACvDA,MAAM,IAAI,CAAC;IAEX,QAAQM,aAAa;MACnB,KAAKX,aAAa,CAACE,GAAG;QACpBI,GAAG,GAAGF,IAAI,CAACW,QAAQ,CAAC,MAAM,EAAED,qBAAqB,EAAEA,qBAAqB,GAAGD,kBAAkB,CAAC;QAC9F;MAEF,KAAKb,aAAa,CAACC,MAAM;QACvBM,MAAM,GAAGH,IAAI,CAACW,QAAQ,CAAC,MAAM,EAAED,qBAAqB,EAAEA,qBAAqB,GAAGD,kBAAkB,CAAC;QACjG;;MAEF;MACA;QACE;IACJ;EACF;EAEA,OAAO;IAAEP,GAAG;IAAEC;EAAO,CAAC;AACxB;AAEA,SAASS,iBAAiBA,CAACC,GAAW,EAAEZ,MAAc,EAAEa,QAAuB,EAA4B;EACzG,IAAIC,WAAW;EACf,CAAC;IAAEd,MAAM;IAAEe,KAAK,EAAED;EAAY,CAAC,GAAG,IAAAV,qBAAY,EAACQ,GAAG,EAAEZ,MAAM,CAAC;EAE3D,IAAIY,GAAG,CAACI,MAAM,GAAGhB,MAAM,GAAGc,WAAW,EAAE;IACrC,MAAM,IAAIG,2BAAkB,CAACjB,MAAM,GAAGc,WAAW,CAAC;EACpD;EAEA,MAAMf,IAAI,GAAGa,GAAG,CAACM,KAAK,CAAClB,MAAM,EAAEA,MAAM,GAAGc,WAAW,CAAC;EACpDd,MAAM,IAAIc,WAAW;EAErB,MAAM;IAAEb,GAAG;IAAEC;EAAO,CAAC,GAAGJ,eAAe,CAACC,IAAI,CAAC;EAC7C,OAAO,IAAIoB,eAAM,CAAC,IAAIC,uBAAgB,CAACnB,GAAG,EAAEC,MAAM,CAAC,EAAEF,MAAM,CAAC;AAC9D;AAAC,IAAAqB,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcZ,iBAAiB;AAChCa,MAAM,CAACF,OAAO,GAAGX,iBAAiB","ignoreList":[]}
|
package/lib/token/handler.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.UnexpectedTokenError = exports.TokenHandler = exports.RequestTokenHandler = exports.Login7TokenHandler = exports.InitialSqlTokenHandler = exports.AttentionTokenHandler = void 0;
|
|
7
7
|
var _request = _interopRequireDefault(require("../request"));
|
|
8
8
|
var _errors = require("../errors");
|
|
9
|
-
function _interopRequireDefault(
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
class UnexpectedTokenError extends Error {
|
|
11
11
|
constructor(handler, token) {
|
|
12
12
|
super('Unexpected token `' + token.name + '` in `' + handler.constructor.name + '`');
|
|
@@ -441,4 +441,4 @@ class AttentionTokenHandler extends TokenHandler {
|
|
|
441
441
|
}
|
|
442
442
|
}
|
|
443
443
|
exports.AttentionTokenHandler = AttentionTokenHandler;
|
|
444
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVW5leHBlY3RlZFRva2VuRXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwiaGFuZGxlciIsInRva2VuIiwibmFtZSIsImV4cG9ydHMiLCJUb2tlbkhhbmRsZXIiLCJvbkluZm9NZXNzYWdlIiwib25FcnJvck1lc3NhZ2UiLCJvblNTUEkiLCJvbkRhdGFiYXNlQ2hhbmdlIiwib25MYW5ndWFnZUNoYW5nZSIsIm9uQ2hhcnNldENoYW5nZSIsIm9uU3FsQ29sbGF0aW9uQ2hhbmdlIiwib25Sb3V0aW5nQ2hhbmdlIiwib25QYWNrZXRTaXplQ2hhbmdlIiwib25SZXNldENvbm5lY3Rpb24iLCJvbkJlZ2luVHJhbnNhY3Rpb24iLCJvbkNvbW1pdFRyYW5zYWN0aW9uIiwib25Sb2xsYmFja1RyYW5zYWN0aW9uIiwib25GZWRBdXRoSW5mbyIsIm9uRmVhdHVyZUV4dEFjayIsIm9uTG9naW5BY2siLCJvbkNvbE1ldGFkYXRhIiwib25PcmRlciIsIm9uUm93Iiwib25SZXR1cm5TdGF0dXMiLCJvblJldHVyblZhbHVlIiwib25Eb25lUHJvYyIsIm9uRG9uZUluUHJvYyIsIm9uRG9uZSIsIm9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyIiwiSW5pdGlhbFNxbFRva2VuSGFuZGxlciIsImNvbm5lY3Rpb24iLCJlbWl0IiwibmV3VmFsdWUiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIm1lc3NhZ2VJbyIsInBhY2tldFNpemUiLCJ0cmFuc2FjdGlvbkRlc2NyaXB0b3JzIiwicHVzaCIsImluVHJhbnNhY3Rpb24iLCJsZW5ndGgiLCJjbG9zZSIsIkxvZ2luN1Rva2VuSGFuZGxlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJlcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIm1lc3NhZ2UiLCJpc0xvZ2luRXJyb3JUcmFuc2llbnQiLCJ0cmFuc2llbnRFcnJvckxvb2t1cCIsImlzVHJhbnNpZW50RXJyb3IiLCJudW1iZXIiLCJjdXJUcmFuc2llbnRSZXRyeUNvdW50IiwiY29uZmlnIiwib3B0aW9ucyIsIm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycyIsImlzVHJhbnNpZW50IiwibG9naW5FcnJvciIsIm50bG1wYWNrZXQiLCJudGxtcGFja2V0QnVmZmVyIiwiZmVkQXV0aEluZm9Ub2tlbiIsImF1dGhlbnRpY2F0aW9uIiwidHlwZSIsImZlZEF1dGgiLCJ1bmRlZmluZWQiLCJ1dGY4U3VwcG9ydCIsInRkc1ZlcnNpb24iLCJpbnRlcmZhY2UiLCJzZXJ2ZXIiLCJzcGxpdCIsInJvdXRpbmdEYXRhIiwicG9ydCIsIlJlcXVlc3RUb2tlbkhhbmRsZXIiLCJyZXF1ZXN0IiwiZXJyb3JzIiwiY2FuY2VsZWQiLCJSZXF1ZXN0RXJyb3IiLCJzdGF0ZSIsImNsYXNzIiwic2VydmVyTmFtZSIsInByb2NOYW1lIiwibGluZU51bWJlciIsIlJlcXVlc3QiLCJBZ2dyZWdhdGVFcnJvciIsInVzZUNvbHVtbk5hbWVzIiwiY29sdW1ucyIsIk9iamVjdCIsImNyZWF0ZSIsImoiLCJsZW4iLCJjb2wiLCJjb2xOYW1lIiwib3JkZXJDb2x1bW5zIiwicm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24iLCJyb3dzIiwicm93Q29sbGVjdGlvbk9uRG9uZSIsInJzdCIsInByb2NSZXR1cm5TdGF0dXNWYWx1ZSIsInZhbHVlIiwicGFyYW1OYW1lIiwibWV0YWRhdGEiLCJzcWxFcnJvciIsInJvd0NvdW50IiwibW9yZSIsIkF0dGVudGlvblRva2VuSGFuZGxlciIsImF0dGVudGlvblJlY2VpdmVkIiwiYXR0ZW50aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL2hhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbm5lY3Rpb24gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciwgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgQ29sdW1uTWV0YWRhdGEgfSBmcm9tICcuL2NvbG1ldGFkYXRhLXRva2VuLXBhcnNlcic7XG5pbXBvcnQge1xuICBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIENoYXJzZXRFbnZDaGFuZ2VUb2tlbixcbiAgQ29sbGF0aW9uQ2hhbmdlVG9rZW4sXG4gIENvbE1ldGFkYXRhVG9rZW4sXG4gIENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIERhdGFiYXNlRW52Q2hhbmdlVG9rZW4sXG4gIERhdGFiYXNlTWlycm9yaW5nUGFydG5lckVudkNoYW5nZVRva2VuLFxuICBEb25lSW5Qcm9jVG9rZW4sXG4gIERvbmVQcm9jVG9rZW4sXG4gIERvbmVUb2tlbixcbiAgRXJyb3JNZXNzYWdlVG9rZW4sXG4gIEZlYXR1cmVFeHRBY2tUb2tlbixcbiAgRmVkQXV0aEluZm9Ub2tlbixcbiAgSW5mb01lc3NhZ2VUb2tlbixcbiAgTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbixcbiAgTG9naW5BY2tUb2tlbixcbiAgTkJDUm93VG9rZW4sXG4gIE9yZGVyVG9rZW4sXG4gIFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbixcbiAgUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJldHVyblN0YXR1c1Rva2VuLFxuICBSZXR1cm5WYWx1ZVRva2VuLFxuICBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJvdXRpbmdFbnZDaGFuZ2VUb2tlbixcbiAgUm93VG9rZW4sXG4gIFNTUElUb2tlbixcbiAgVG9rZW5cbn0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRUb2tlbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUb2tlbkhhbmRsZXIsIHRva2VuOiBUb2tlbikge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkIHRva2VuIGAnICsgdG9rZW4ubmFtZSArICdgIGluIGAnICsgaGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lICsgJ2AnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVG9rZW5IYW5kbGVyIHtcbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25TU1BJKHRva2VuOiBTU1BJVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ2hhcnNldENoYW5nZSh0b2tlbjogQ2hhcnNldEVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdXRpbmdDaGFuZ2UodG9rZW46IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db21taXRUcmFuc2FjdGlvbih0b2tlbjogQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlZEF1dGhJbmZvKHRva2VuOiBGZWRBdXRoSW5mb1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRmVhdHVyZUV4dEFjayh0b2tlbjogRmVhdHVyZUV4dEFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uTG9naW5BY2sodG9rZW46IExvZ2luQWNrVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbk9yZGVyKHRva2VuOiBPcmRlclRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUm93KHRva2VuOiBSb3dUb2tlbiB8IE5CQ1Jvd1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZVByb2ModG9rZW46IERvbmVQcm9jVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25EYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXIodG9rZW46IERhdGFiYXNlTWlycm9yaW5nUGFydG5lckVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdG9rZW5zIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZSBtZXNzYWdlIHRvIHRoZSBpbml0aWFsIFNRTCBCYXRjaCByZXF1ZXN0XG4gKiB0aGF0IHNldHMgdXAgZGlmZmVyZW50IGNvbm5lY3Rpb24gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbml0aWFsU3FsVG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKFwiUmVjZWl2ZWQgJ2NvbHVtbk1ldGFkYXRhJyB3aGVuIG5vIHNxbFJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3NcIikpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdvcmRlcicgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uUm93KHRva2VuOiBSb3dUb2tlbiB8IE5CQ1Jvd1Rva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKFwiUmVjZWl2ZWQgJ3Jvdycgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uUmV0dXJuVmFsdWUodG9rZW46IFJldHVyblZhbHVlVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uUmVzZXRDb25uZWN0aW9uKHRva2VuOiBSZXNldENvbm5lY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyZXNldENvbm5lY3Rpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdG9rZW5zIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZSBtZXNzYWdlIHRvIGEgTG9naW43IG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpbjdUb2tlbkhhbmRsZXIgZXh0ZW5kcyBUb2tlbkhhbmRsZXIge1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgZGVjbGFyZSBmZWRBdXRoSW5mb1Rva2VuOiBGZWRBdXRoSW5mb1Rva2VuIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIHJvdXRpbmdEYXRhOiB7IHNlcnZlcjogc3RyaW5nLCBwb3J0OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGxvZ2luQWNrUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2dpbkFja1JlY2VpdmVkID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKHRva2VuLm1lc3NhZ2UsICdFTE9HSU4nKTtcblxuICAgIGNvbnN0IGlzTG9naW5FcnJvclRyYW5zaWVudCA9IHRoaXMuY29ubmVjdGlvbi50cmFuc2llbnRFcnJvckxvb2t1cC5pc1RyYW5zaWVudEVycm9yKHRva2VuLm51bWJlcik7XG4gICAgaWYgKGlzTG9naW5FcnJvclRyYW5zaWVudCAmJiB0aGlzLmNvbm5lY3Rpb24uY3VyVHJhbnNpZW50UmV0cnlDb3VudCAhPT0gdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycykge1xuICAgICAgZXJyb3IuaXNUcmFuc2llbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbi5sb2dpbkVycm9yID0gZXJyb3I7XG4gIH1cblxuICBvblNTUEkodG9rZW46IFNTUElUb2tlbikge1xuICAgIGlmICh0b2tlbi5udGxtcGFja2V0KSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldCA9IHRva2VuLm50bG1wYWNrZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldEJ1ZmZlciA9IHRva2VuLm50bG1wYWNrZXRCdWZmZXI7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvbkZlZEF1dGhJbmZvKHRva2VuOiBGZWRBdXRoSW5mb1Rva2VuKSB7XG4gICAgdGhpcy5mZWRBdXRoSW5mb1Rva2VuID0gdG9rZW47XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIGNvbnN0IHsgYXV0aGVudGljYXRpb24gfSA9IHRoaXMuY29ubmVjdGlvbi5jb25maWc7XG5cbiAgICBpZiAoYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktcGFzc3dvcmQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWFjY2Vzcy10b2tlbicgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLXZtJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktYXBwLXNlcnZpY2UnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXNlcnZpY2UtcHJpbmNpcGFsLXNlY3JldCcgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktZGVmYXVsdCcpIHtcbiAgICAgIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdEaWQgbm90IHJlY2VpdmUgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbiBhY2tub3dsZWRnZW1lbnQnKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4uZmVkQXV0aC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKGBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdtZW50IGZvciAke2F1dGhlbnRpY2F0aW9uLnR5cGV9IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbmNsdWRlcyBleHRyYSBkYXRhYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQgJiYgdG9rZW4udXRmOFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdSZWNlaXZlZCBhY2tub3dsZWRnZW1lbnQgZm9yIHVua25vd24gZmVhdHVyZScpO1xuICAgIH0gZWxzZSBpZiAodG9rZW4uZmVkQXV0aCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdEaWQgbm90IHJlcXVlc3QgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbiwgYnV0IHJlY2VpdmVkIHRoZSBhY2tub3dsZWRnbWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uTG9naW5BY2sodG9rZW46IExvZ2luQWNrVG9rZW4pIHtcbiAgICBpZiAoIXRva2VuLnRkc1ZlcnNpb24pIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIFREUyB2ZXJzaW9uXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1NlcnZlciByZXNwb25kZWQgd2l0aCB1bmtub3duIFREUyB2ZXJzaW9uLicsICdFVERTJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlbi5pbnRlcmZhY2UpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIGludGVyZmFjZVxuICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggdW5zdXBwb3J0ZWQgaW50ZXJmYWNlLicsICdFSU5URVJGQUNFTk9UU1VQUCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVzZSBuZWdvdGlhdGVkIHZlcnNpb25cbiAgICB0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudGRzVmVyc2lvbiA9IHRva2VuLnRkc1ZlcnNpb247XG5cbiAgICB0aGlzLmxvZ2luQWNrUmVjZWl2ZWQgPSB0cnVlO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICAvLyBSZW1vdmVzIGluc3RhbmNlIG5hbWUgYXR0YWNoZWQgdG8gdGhlIHJlZGlyZWN0IHVybC4gRS5nLiwgcmVkaXJlY3QuZGIubmV0XFxpbnN0YW5jZTEgLS0+IHJlZGlyZWN0LmRiLm5ldFxuICAgIGNvbnN0IFsgc2VydmVyIF0gPSB0b2tlbi5uZXdWYWx1ZS5zZXJ2ZXIuc3BsaXQoJ1xcXFwnKTtcblxuICAgIHRoaXMucm91dGluZ0RhdGEgPSB7XG4gICAgICBzZXJ2ZXIsIHBvcnQ6IHRva2VuLm5ld1ZhbHVlLnBvcnRcbiAgICB9O1xuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uUGFja2V0U2l6ZUNoYW5nZSh0b2tlbjogUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLm1lc3NhZ2VJby5wYWNrZXRTaXplKHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdG9rZW5zIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZSBtZXNzYWdlIHRvIGEgUlBDIFJlcXVlc3QsXG4gKiBhIFNRTCBCYXRjaCBSZXF1ZXN0LCBhIEJ1bGsgTG9hZCBCQ1AgUmVxdWVzdCBvciBhIFRyYW5zYWN0aW9uIE1hbmFnZXIgUmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVlc3RUb2tlbkhhbmRsZXIgZXh0ZW5kcyBUb2tlbkhhbmRsZXIge1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG4gIGRlY2xhcmUgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkO1xuICBkZWNsYXJlIGVycm9yczogUmVxdWVzdEVycm9yW107XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICB9XG5cbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdpbmZvTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvck1lc3NhZ2UnLCB0b2tlbik7XG5cbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKHRva2VuLm1lc3NhZ2UsICdFUkVRVUVTVCcpO1xuXG4gICAgICBlcnJvci5udW1iZXIgPSB0b2tlbi5udW1iZXI7XG4gICAgICBlcnJvci5zdGF0ZSA9IHRva2VuLnN0YXRlO1xuICAgICAgZXJyb3IuY2xhc3MgPSB0b2tlbi5jbGFzcztcbiAgICAgIGVycm9yLnNlcnZlck5hbWUgPSB0b2tlbi5zZXJ2ZXJOYW1lO1xuICAgICAgZXJyb3IucHJvY05hbWUgPSB0b2tlbi5wcm9jTmFtZTtcbiAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBlcnJvcjtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMuZXJyb3JzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGFiYXNlQ2hhbmdlKHRva2VuOiBEYXRhYmFzZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2RhdGFiYXNlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdsYW5ndWFnZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uQ2hhcnNldENoYW5nZSh0b2tlbjogQ2hhcnNldEVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2NoYXJzZXRDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZGF0YWJhc2VDb2xsYXRpb24gPSB0b2tlbi5uZXdWYWx1ZTtcbiAgfVxuXG4gIG9uUGFja2V0U2l6ZUNoYW5nZSh0b2tlbjogUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLm1lc3NhZ2VJby5wYWNrZXRTaXplKHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMucHVzaCh0b2tlbi5uZXdWYWx1ZSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSB0cnVlO1xuICB9XG5cbiAgb25Db21taXRUcmFuc2FjdGlvbih0b2tlbjogQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIG9uUm9sbGJhY2tUcmFuc2FjdGlvbih0b2tlbjogUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICAvLyBBbiBvdXRlcm1vc3QgdHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrLiBSZXNldCB0aGUgdHJhbnNhY3Rpb24gY291bnRlclxuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3JvbGxiYWNrVHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy51c2VDb2x1bW5OYW1lcykge1xuICAgICAgICBjb25zdCBjb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwLCBsZW4gPSB0b2tlbi5jb2x1bW5zLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY29sID0gdG9rZW4uY29sdW1uc1tqXTtcbiAgICAgICAgICBpZiAoY29sdW1uc1tjb2wuY29sTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgY29sdW1uc1tjb2wuY29sTmFtZV0gPSBjb2w7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2NvbHVtbk1ldGFkYXRhJywgY29sdW1ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sdW1uTWV0YWRhdGEnLCB0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbk9yZGVyKHRva2VuOiBPcmRlclRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdvcmRlcicsIHRva2VuLm9yZGVyQ29sdW1ucyk7XG4gICAgfVxuICB9XG5cbiAgb25Sb3codG9rZW46IFJvd1Rva2VuIHwgTkJDUm93VG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbikge1xuICAgICAgICB0aGlzLnJlcXVlc3Qucm93cyEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QhLnB1c2godG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdyb3cnLCB0b2tlbi5jb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgLy8gS2VlcCB2YWx1ZSBmb3IgcGFzc2luZyBpbiAnZG9uZVByb2MnIGV2ZW50LlxuICAgICAgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuVmFsdWUodG9rZW46IFJldHVyblZhbHVlVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JldHVyblZhbHVlJywgdG9rZW4ucGFyYW1OYW1lLCB0b2tlbi52YWx1ZSwgdG9rZW4ubWV0YWRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIG9uRG9uZVByb2ModG9rZW46IERvbmVQcm9jVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRva2VuLnNxbEVycm9yICYmICF0aGlzLnJlcXVlc3QuZXJyb3IpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIERPTkVfRVJST1IgZmxhZ3Mgd2FzIHNldCwgYnV0IGFuIEVSUk9SIHRva2VuIHdhcyBub3Qgc2VudC5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcignQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ1VOS05PV04nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmVQcm9jJywgdG9rZW4ucm93Q291bnQsIHRva2VuLm1vcmUsIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUsIHRoaXMucmVxdWVzdC5yc3QpO1xuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodG9rZW4ucm93Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnJlcXVlc3Qucm93Q291bnQhICs9IHRva2VuLnJvd0NvdW50O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdkb25lSW5Qcm9jJywgdG9rZW4ucm93Q291bnQsIHRva2VuLm1vcmUsIHRoaXMucmVxdWVzdC5yc3QpO1xuXG4gICAgICBpZiAodG9rZW4ucm93Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnJlcXVlc3Qucm93Q291bnQhICs9IHRva2VuLnJvd0NvdW50O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0b2tlbi5zcWxFcnJvciAmJiAhdGhpcy5yZXF1ZXN0LmVycm9yKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBET05FX0VSUk9SIGZsYWdzIHdhcyBzZXQsIGJ1dCBhbiBFUlJPUiB0b2tlbiB3YXMgbm90IHNlbnQuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IoJ0FuIHVua25vd24gZXJyb3IgaGFzIG9jY3VycmVkLicsICdVTktOT1dOJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdkb25lJywgdG9rZW4ucm93Q291bnQsIHRva2VuLm1vcmUsIHRoaXMucmVxdWVzdC5yc3QpO1xuXG4gICAgICBpZiAodG9rZW4ucm93Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnJlcXVlc3Qucm93Q291bnQhICs9IHRva2VuLnJvd0NvdW50O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVzZXRDb25uZWN0aW9uKHRva2VuOiBSZXNldENvbm5lY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyZXNldENvbm5lY3Rpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdGhlIGF0dGVudGlvbiBhY2tub3dsZWRnZW1lbnQgbWVzc2FnZS5cbiAqXG4gKiBUaGlzIG1lc3NhZ2Ugb25seSBjb250YWlucyBhIGBET05FYCB0b2tlbiB0aGF0IGFja25vd2xlZGdlc1xuICogdGhhdCB0aGUgYXR0ZW50aW9uIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdHRlbnRpb25Ub2tlbkhhbmRsZXIgZXh0ZW5kcyBUb2tlbkhhbmRsZXIge1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG4gIGRlY2xhcmUgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgYW4gYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCB3YXMgcmVjZWl2ZWQuXG4gICAqL1xuICBkZWNsYXJlIGF0dGVudGlvblJlY2VpdmVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG5cbiAgICB0aGlzLmF0dGVudGlvblJlY2VpdmVkID0gZmFsc2U7XG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIGlmICh0b2tlbi5hdHRlbnRpb24pIHtcbiAgICAgIHRoaXMuYXR0ZW50aW9uUmVjZWl2ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFBMEQsU0FBQUQsdUJBQUFHLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFpQ25ELE1BQU1HLG9CQUFvQixTQUFTQyxLQUFLLENBQUM7RUFDOUNDLFdBQVdBLENBQUNDLE9BQXFCLEVBQUVDLEtBQVksRUFBRTtJQUMvQyxLQUFLLENBQUMsb0JBQW9CLEdBQUdBLEtBQUssQ0FBQ0MsSUFBSSxHQUFHLFFBQVEsR0FBR0YsT0FBTyxDQUFDRCxXQUFXLENBQUNHLElBQUksR0FBRyxHQUFHLENBQUM7RUFDdEY7QUFDRjtBQUFDQyxPQUFBLENBQUFOLG9CQUFBLEdBQUFBLG9CQUFBO0FBRU0sTUFBTU8sWUFBWSxDQUFDO0VBQ3hCQyxhQUFhQSxDQUFD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
|
|
444
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwiZW1pdCIsIm5ld1ZhbHVlIiwiZGF0YWJhc2VDb2xsYXRpb24iLCJtZXNzYWdlSW8iLCJwYWNrZXRTaXplIiwidHJhbnNhY3Rpb25EZXNjcmlwdG9ycyIsInB1c2giLCJpblRyYW5zYWN0aW9uIiwibGVuZ3RoIiwiY2xvc2UiLCJMb2dpbjdUb2tlbkhhbmRsZXIiLCJsb2dpbkFja1JlY2VpdmVkIiwiZXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJtZXNzYWdlIiwiaXNMb2dpbkVycm9yVHJhbnNpZW50IiwidHJhbnNpZW50RXJyb3JMb29rdXAiLCJpc1RyYW5zaWVudEVycm9yIiwibnVtYmVyIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsImNvbmZpZyIsIm9wdGlvbnMiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJpc1RyYW5zaWVudCIsImxvZ2luRXJyb3IiLCJudGxtcGFja2V0IiwibnRsbXBhY2tldEJ1ZmZlciIsImZlZEF1dGhJbmZvVG9rZW4iLCJhdXRoZW50aWNhdGlvbiIsInR5cGUiLCJmZWRBdXRoIiwidW5kZWZpbmVkIiwidXRmOFN1cHBvcnQiLCJ0ZHNWZXJzaW9uIiwiaW50ZXJmYWNlIiwic2VydmVyIiwic3BsaXQiLCJyb3V0aW5nRGF0YSIsInBvcnQiLCJSZXF1ZXN0VG9rZW5IYW5kbGVyIiwicmVxdWVzdCIsImVycm9ycyIsImNhbmNlbGVkIiwiUmVxdWVzdEVycm9yIiwic3RhdGUiLCJjbGFzcyIsInNlcnZlck5hbWUiLCJwcm9jTmFtZSIsImxpbmVOdW1iZXIiLCJSZXF1ZXN0IiwiQWdncmVnYXRlRXJyb3IiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJqIiwibGVuIiwiY29sIiwiY29sTmFtZSIsIm9yZGVyQ29sdW1ucyIsInJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uIiwicm93cyIsInJvd0NvbGxlY3Rpb25PbkRvbmUiLCJyc3QiLCJwcm9jUmV0dXJuU3RhdHVzVmFsdWUiLCJ2YWx1ZSIsInBhcmFtTmFtZSIsIm1ldGFkYXRhIiwic3FsRXJyb3IiLCJyb3dDb3VudCIsIm1vcmUiLCJBdHRlbnRpb25Ub2tlbkhhbmRsZXIiLCJhdHRlbnRpb25SZWNlaXZlZCIsImF0dGVudGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4uL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uRXJyb3IsIFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBDaGFyc2V0RW52Q2hhbmdlVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICBDb2xNZXRhZGF0YVRva2VuLFxuICBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZUVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbixcbiAgRG9uZUluUHJvY1Rva2VuLFxuICBEb25lUHJvY1Rva2VuLFxuICBEb25lVG9rZW4sXG4gIEVycm9yTWVzc2FnZVRva2VuLFxuICBGZWF0dXJlRXh0QWNrVG9rZW4sXG4gIEZlZEF1dGhJbmZvVG9rZW4sXG4gIEluZm9NZXNzYWdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIExvZ2luQWNrVG9rZW4sXG4gIE5CQ1Jvd1Rva2VuLFxuICBPcmRlclRva2VuLFxuICBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSZXR1cm5TdGF0dXNUb2tlbixcbiAgUmV0dXJuVmFsdWVUb2tlbixcbiAgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIFJvd1Rva2VuLFxuICBTU1BJVG9rZW4sXG4gIFRva2VuXG59IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IEJ1bGtMb2FkIGZyb20gJy4uL2J1bGstbG9hZCc7XG5cbmV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkVG9rZW5FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoaGFuZGxlcjogVG9rZW5IYW5kbGVyLCB0b2tlbjogVG9rZW4pIHtcbiAgICBzdXBlcignVW5leHBlY3RlZCB0b2tlbiBgJyArIHRva2VuLm5hbWUgKyAnYCBpbiBgJyArIGhhbmRsZXIuY29uc3RydWN0b3IubmFtZSArICdgJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuSGFuZGxlciB7XG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU1NQSSh0b2tlbjogU1NQSVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byB0aGUgaW5pdGlhbCBTUUwgQmF0Y2ggcmVxdWVzdFxuICogdGhhdCBzZXRzIHVwIGRpZmZlcmVudCBjb25uZWN0aW9uIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdGlhbFNxbFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdjb2x1bW5NZXRhZGF0YScgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAnb3JkZXInIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdyb3cnIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIExvZ2luNyBtZXNzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgTG9naW43VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGRlY2xhcmUgZmVkQXV0aEluZm9Ub2tlbjogRmVkQXV0aEluZm9Ub2tlbiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSByb3V0aW5nRGF0YTogeyBzZXJ2ZXI6IHN0cmluZywgcG9ydDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBsb2dpbkFja1JlY2VpdmVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcblxuICAgIGNvbnN0IGVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcih0b2tlbi5tZXNzYWdlLCAnRUxPR0lOJyk7XG5cbiAgICBjb25zdCBpc0xvZ2luRXJyb3JUcmFuc2llbnQgPSB0aGlzLmNvbm5lY3Rpb24udHJhbnNpZW50RXJyb3JMb29rdXAuaXNUcmFuc2llbnRFcnJvcih0b2tlbi5udW1iZXIpO1xuICAgIGlmIChpc0xvZ2luRXJyb3JUcmFuc2llbnQgJiYgdGhpcy5jb25uZWN0aW9uLmN1clRyYW5zaWVudFJldHJ5Q291bnQgIT09IHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5tYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMpIHtcbiAgICAgIGVycm9yLmlzVHJhbnNpZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ubG9naW5FcnJvciA9IGVycm9yO1xuICB9XG5cbiAgb25TU1BJKHRva2VuOiBTU1BJVG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubnRsbXBhY2tldCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm50bG1wYWNrZXQgPSB0b2tlbi5udGxtcGFja2V0O1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm50bG1wYWNrZXRCdWZmZXIgPSB0b2tlbi5udGxtcGFja2V0QnVmZmVyO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRoaXMuZmVkQXV0aEluZm9Ub2tlbiA9IHRva2VuO1xuICB9XG5cbiAgb25GZWF0dXJlRXh0QWNrKHRva2VuOiBGZWF0dXJlRXh0QWNrVG9rZW4pIHtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0aW9uIH0gPSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignRGlkIG5vdCByZWNlaXZlIEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24gYWNrbm93bGVkZ2VtZW50Jyk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcihgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbiBhY2tub3dsZWRnbWVudCBmb3IgJHthdXRoZW50aWNhdGlvbi50eXBlfSBhdXRoZW50aWNhdGlvbiBtZXRob2QgaW5jbHVkZXMgZXh0cmEgZGF0YWApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkICYmIHRva2VuLnV0ZjhTdXBwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignUmVjZWl2ZWQgYWNrbm93bGVkZ2VtZW50IGZvciB1bmtub3duIGZlYXR1cmUnKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignRGlkIG5vdCByZXF1ZXN0IEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24sIGJ1dCByZWNlaXZlZCB0aGUgYWNrbm93bGVkZ21lbnQnKTtcbiAgICB9XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgaWYgKCF0b2tlbi50ZHNWZXJzaW9uKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCBURFMgdmVyc2lvblxuICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggdW5rbm93biBURFMgdmVyc2lvbi4nLCAnRVREUycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdG9rZW4uaW50ZXJmYWNlKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCBpbnRlcmZhY2VcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignU2VydmVyIHJlc3BvbmRlZCB3aXRoIHVuc3VwcG9ydGVkIGludGVyZmFjZS4nLCAnRUlOVEVSRkFDRU5PVFNVUFAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1c2UgbmVnb3RpYXRlZCB2ZXJzaW9uXG4gICAgdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSB0b2tlbi50ZHNWZXJzaW9uO1xuXG4gICAgdGhpcy5sb2dpbkFja1JlY2VpdmVkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uUm91dGluZ0NoYW5nZSh0b2tlbjogUm91dGluZ0VudkNoYW5nZVRva2VuKSB7XG4gICAgLy8gUmVtb3ZlcyBpbnN0YW5jZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSByZWRpcmVjdCB1cmwuIEUuZy4sIHJlZGlyZWN0LmRiLm5ldFxcaW5zdGFuY2UxIC0tPiByZWRpcmVjdC5kYi5uZXRcbiAgICBjb25zdCBbIHNlcnZlciBdID0gdG9rZW4ubmV3VmFsdWUuc2VydmVyLnNwbGl0KCdcXFxcJyk7XG5cbiAgICB0aGlzLnJvdXRpbmdEYXRhID0ge1xuICAgICAgc2VydmVyLCBwb3J0OiB0b2tlbi5uZXdWYWx1ZS5wb3J0XG4gICAgfTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lcih0b2tlbjogRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyRW52Q2hhbmdlVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIFJQQyBSZXF1ZXN0LFxuICogYSBTUUwgQmF0Y2ggUmVxdWVzdCwgYSBCdWxrIExvYWQgQkNQIFJlcXVlc3Qgb3IgYSBUcmFuc2FjdGlvbiBNYW5hZ2VyIFJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcbiAgZGVjbGFyZSBlcnJvcnM6IFJlcXVlc3RFcnJvcltdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFJlcXVlc3RFcnJvcih0b2tlbi5tZXNzYWdlLCAnRVJFUVVFU1QnKTtcblxuICAgICAgZXJyb3IubnVtYmVyID0gdG9rZW4ubnVtYmVyO1xuICAgICAgZXJyb3Iuc3RhdGUgPSB0b2tlbi5zdGF0ZTtcbiAgICAgIGVycm9yLmNsYXNzID0gdG9rZW4uY2xhc3M7XG4gICAgICBlcnJvci5zZXJ2ZXJOYW1lID0gdG9rZW4uc2VydmVyTmFtZTtcbiAgICAgIGVycm9yLnByb2NOYW1lID0gdG9rZW4ucHJvY05hbWU7XG4gICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gZXJyb3I7XG4gICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBBZ2dyZWdhdGVFcnJvcih0aGlzLmVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdG9rZW4uY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbCA9IHRva2VuLmNvbHVtbnNbal07XG4gICAgICAgICAgaWYgKGNvbHVtbnNbY29sLmNvbE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbnNbY29sLmNvbE5hbWVdID0gY29sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2NvbHVtbk1ldGFkYXRhJywgdG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnb3JkZXInLCB0b2tlbi5vcmRlckNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUm93KHRva2VuOiBSb3dUb2tlbiB8IE5CQ1Jvd1Rva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb24pIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd3MhLnB1c2godG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0IS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgncm93JywgdG9rZW4uY29sdW1ucyk7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5TdGF0dXModG9rZW46IFJldHVyblN0YXR1c1Rva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIC8vIEtlZXAgdmFsdWUgZm9yIHBhc3NpbmcgaW4gJ2RvbmVQcm9jJyBldmVudC5cbiAgICAgIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdyZXR1cm5WYWx1ZScsIHRva2VuLnBhcmFtTmFtZSwgdG9rZW4udmFsdWUsIHRva2VuLm1ldGFkYXRhKTtcbiAgICB9XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0b2tlbi5zcWxFcnJvciAmJiAhdGhpcy5yZXF1ZXN0LmVycm9yKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBET05FX0VSUk9SIGZsYWdzIHdhcyBzZXQsIGJ1dCBhbiBFUlJPUiB0b2tlbiB3YXMgbm90IHNlbnQuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IoJ0FuIHVua25vd24gZXJyb3IgaGFzIG9jY3VycmVkLicsICdVTktOT1dOJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdkb25lUHJvYycsIHRva2VuLnJvd0NvdW50LCB0b2tlbi5tb3JlLCB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlLCB0aGlzLnJlcXVlc3QucnN0KTtcblxuICAgICAgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRva2VuLnJvd0NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd0NvdW50ISArPSB0b2tlbi5yb3dDb3VudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRvbmVJblByb2ModG9rZW46IERvbmVJblByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZUluUHJvYycsIHRva2VuLnJvd0NvdW50LCB0b2tlbi5tb3JlLCB0aGlzLnJlcXVlc3QucnN0KTtcblxuICAgICAgaWYgKHRva2VuLnJvd0NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd0NvdW50ISArPSB0b2tlbi5yb3dDb3VudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZScsIHRva2VuLnJvd0NvdW50LCB0b2tlbi5tb3JlLCB0aGlzLnJlcXVlc3QucnN0KTtcblxuICAgICAgaWYgKHRva2VuLnJvd0NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd0NvdW50ISArPSB0b2tlbi5yb3dDb3VudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IG1lc3NhZ2UuXG4gKlxuICogVGhpcyBtZXNzYWdlIG9ubHkgY29udGFpbnMgYSBgRE9ORWAgdG9rZW4gdGhhdCBhY2tub3dsZWRnZXNcbiAqIHRoYXQgdGhlIGF0dGVudGlvbiBtZXNzYWdlIHdhcyByZWNlaXZlZCBieSB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY2xhc3MgQXR0ZW50aW9uVG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGFuIGF0dGVudGlvbiBhY2tub3dsZWRnZW1lbnQgd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgZGVjbGFyZSBhdHRlbnRpb25SZWNlaXZlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uLCByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuXG4gICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAodG9rZW4uYXR0ZW50aW9uKSB7XG4gICAgICB0aGlzLmF0dGVudGlvblJlY2VpdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQTBELFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBaUNuRCxNQUFNRyxvQkFBb0IsU0FBU0MsS0FBSyxDQUFDO0VBQzlDQyxXQUFXQSxDQUFDQyxPQUFxQixFQUFFQyxLQUFZLEVBQUU7SUFDL0MsS0FBSyxDQUFDLG9CQUFvQixHQUFHQSxLQUFLLENBQUNDLElBQUksR0FBRyxRQUFRLEdBQUdGLE9BQU8sQ0FBQ0QsV0FBVyxDQUFDRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0VBQ3RGO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBTixvQkFBQSxHQUFBQSxvQkFBQTtBQUVNLE1BQU1PLFlBQVksQ0FBQztFQUN4QkMsYUFBYUEsQ0FBQ0os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
|