1 | export class AuthConfig {
|
2 | constructor(json) {
|
3 | /**
|
4 | * The client's id as registered with the auth server
|
5 | */
|
6 | this.clientId = '';
|
7 | /**
|
8 | * The client's redirectUri as registered with the auth server
|
9 | */
|
10 | this.redirectUri = '';
|
11 | /**
|
12 | * An optional second redirectUri where the auth server
|
13 | * redirects the user to after logging out.
|
14 | */
|
15 | this.postLogoutRedirectUri = '';
|
16 | /**
|
17 | * Defines whether to use 'redirectUri' as a replacement
|
18 | * of 'postLogoutRedirectUri' if the latter is not set.
|
19 | */
|
20 | this.redirectUriAsPostLogoutRedirectUriFallback = true;
|
21 | /**
|
22 | * The auth server's endpoint that allows to log
|
23 | * the user in when using implicit flow.
|
24 | */
|
25 | this.loginUrl = '';
|
26 | /**
|
27 | * The requested scopes
|
28 | */
|
29 | this.scope = 'openid profile';
|
30 | this.resource = '';
|
31 | this.rngUrl = '';
|
32 | /**
|
33 | * Defines whether to use OpenId Connect during
|
34 | * implicit flow.
|
35 | */
|
36 | this.oidc = true;
|
37 | /**
|
38 | * Defines whether to request an access token during
|
39 | * implicit flow.
|
40 | */
|
41 | this.requestAccessToken = true;
|
42 | this.options = null;
|
43 | /**
|
44 | * The issuer's uri.
|
45 | */
|
46 | this.issuer = '';
|
47 | /**
|
48 | * The logout url.
|
49 | */
|
50 | this.logoutUrl = '';
|
51 | /**
|
52 | * Defines whether to clear the hash fragment after logging in.
|
53 | */
|
54 | this.clearHashAfterLogin = true;
|
55 | /**
|
56 | * Url of the token endpoint as defined by OpenId Connect and OAuth 2.
|
57 | */
|
58 | this.tokenEndpoint = null;
|
59 | /**
|
60 | * Url of the revocation endpoint as defined by OpenId Connect and OAuth 2.
|
61 | */
|
62 | this.revocationEndpoint = null;
|
63 | /**
|
64 | * Names of known parameters sent out in the TokenResponse. https://tools.ietf.org/html/rfc6749#section-5.1
|
65 | */
|
66 | this.customTokenParameters = [];
|
67 | /**
|
68 | * Url of the userinfo endpoint as defined by OpenId Connect.
|
69 | */
|
70 | this.userinfoEndpoint = null;
|
71 | this.responseType = '';
|
72 | /**
|
73 | * Defines whether additional debug information should
|
74 | * be shown at the console. Note that in certain browsers
|
75 | * the verbosity of the console needs to be explicitly set
|
76 | * to include Debug level messages.
|
77 | */
|
78 | this.showDebugInformation = false;
|
79 | /**
|
80 | * The redirect uri used when doing silent refresh.
|
81 | */
|
82 | this.silentRefreshRedirectUri = '';
|
83 | this.silentRefreshMessagePrefix = '';
|
84 | /**
|
85 | * Set this to true to display the iframe used for
|
86 | * silent refresh for debugging.
|
87 | */
|
88 | this.silentRefreshShowIFrame = false;
|
89 | /**
|
90 | * Timeout for silent refresh.
|
91 | * @internal
|
92 | * @deprecated use silentRefreshTimeout
|
93 | */
|
94 | this.siletRefreshTimeout = 1000 * 20;
|
95 | /**
|
96 | * Timeout for silent refresh.
|
97 | */
|
98 | this.silentRefreshTimeout = 1000 * 20;
|
99 | /**
|
100 | * Some auth servers don't allow using password flow
|
101 | * w/o a client secret while the standards do not
|
102 | * demand for it. In this case, you can set a password
|
103 | * here. As this password is exposed to the public
|
104 | * it does not bring additional security and is therefore
|
105 | * as good as using no password.
|
106 | */
|
107 | this.dummyClientSecret = '';
|
108 | /**
|
109 | * Defines whether https is required.
|
110 | * The default value is remoteOnly which only allows
|
111 | * http for localhost, while every other domains need
|
112 | * to be used with https.
|
113 | */
|
114 | this.requireHttps = 'remoteOnly';
|
115 | /**
|
116 | * Defines whether every url provided by the discovery
|
117 | * document has to start with the issuer's url.
|
118 | */
|
119 | this.strictDiscoveryDocumentValidation = true;
|
120 | /**
|
121 | * JSON Web Key Set (https://tools.ietf.org/html/rfc7517)
|
122 | * with keys used to validate received id_tokens.
|
123 | * This is taken out of the disovery document. Can be set manually too.
|
124 | */
|
125 | this.jwks = null;
|
126 | /**
|
127 | * Map with additional query parameter that are appended to
|
128 | * the request when initializing implicit flow.
|
129 | */
|
130 | this.customQueryParams = null;
|
131 | this.silentRefreshIFrameName = 'angular-oauth-oidc-silent-refresh-iframe';
|
132 | /**
|
133 | * Defines when the token_timeout event should be raised.
|
134 | * If you set this to the default value 0.75, the event
|
135 | * is triggered after 75% of the token's life time.
|
136 | */
|
137 | this.timeoutFactor = 0.75;
|
138 | /**
|
139 | * If true, the lib will try to check whether the user
|
140 | * is still logged in on a regular basis as described
|
141 | * in http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification
|
142 | */
|
143 | this.sessionChecksEnabled = false;
|
144 | /**
|
145 | * Interval in msec for checking the session
|
146 | * according to http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification
|
147 | */
|
148 | this.sessionCheckIntervall = 3 * 1000;
|
149 | /**
|
150 | * Url for the iframe used for session checks
|
151 | */
|
152 | this.sessionCheckIFrameUrl = null;
|
153 | /**
|
154 | * Name of the iframe to use for session checks
|
155 | */
|
156 | this.sessionCheckIFrameName = 'angular-oauth-oidc-check-session-iframe';
|
157 | /**
|
158 | * This property has been introduced to disable at_hash checks
|
159 | * and is indented for Identity Provider that does not deliver
|
160 | * an at_hash EVEN THOUGH its recommended by the OIDC specs.
|
161 | * Of course, when disabling these checks then we are bypassing
|
162 | * a security check which means we are more vulnerable.
|
163 | */
|
164 | this.disableAtHashCheck = false;
|
165 | /**
|
166 | * Defines wether to check the subject of a refreshed token after silent refresh.
|
167 | * Normally, it should be the same as before.
|
168 | */
|
169 | this.skipSubjectCheck = false;
|
170 | this.useIdTokenHintForSilentRefresh = false;
|
171 | /**
|
172 | * Defined whether to skip the validation of the issuer in the discovery document.
|
173 | * Normally, the discovey document's url starts with the url of the issuer.
|
174 | */
|
175 | this.skipIssuerCheck = false;
|
176 | /**
|
177 | * final state sent to issuer is built as follows:
|
178 | * state = nonce + nonceStateSeparator + additional state
|
179 | * Default separator is ';' (encoded %3B).
|
180 | * In rare cases, this character might be forbidden or inconvenient to use by the issuer so it can be customized.
|
181 | */
|
182 | this.nonceStateSeparator = ';';
|
183 | /**
|
184 | * Set this to true to use HTTP BASIC auth for AJAX calls
|
185 | */
|
186 | this.useHttpBasicAuth = false;
|
187 | /**
|
188 | * Decreases the Expiration time of tokens by this number of seconds
|
189 | */
|
190 | this.decreaseExpirationBySec = 0;
|
191 | /**
|
192 | * The interceptors waits this time span if there is no token
|
193 | */
|
194 | this.waitForTokenInMsec = 0;
|
195 | /**
|
196 | * Code Flow is by defauld used together with PKCI which is also higly recommented.
|
197 | * You can disbale it here by setting this flag to true.
|
198 | * https://tools.ietf.org/html/rfc7636#section-1.1
|
199 | */
|
200 | this.disablePKCE = false;
|
201 | /**
|
202 | * Set this to true to preserve the requested route including query parameters after code flow login.
|
203 | * This setting enables deep linking for the code flow.
|
204 | */
|
205 | this.preserveRequestedRoute = false;
|
206 | /**
|
207 | * Allows to disable the timer for the id_token used
|
208 | * for token refresh
|
209 | */
|
210 | this.disableIdTokenTimer = false;
|
211 | /**
|
212 | * Blocks other origins requesting a silent refresh
|
213 | */
|
214 | this.checkOrigin = false;
|
215 | /**
|
216 | * This property allows you to override the method that is used to open the login url,
|
217 | * allowing a way for implementations to specify their own method of routing to new
|
218 | * urls.
|
219 | */
|
220 | this.openUri = (uri) => {
|
221 | location.href = uri;
|
222 | };
|
223 | if (json) {
|
224 | Object.assign(this, json);
|
225 | }
|
226 | }
|
227 | }
|
228 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9saWIvc3JjL2F1dGguY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBeVJyQixZQUFZLElBQTBCO1FBeFJ0Qzs7V0FFRztRQUNJLGFBQVEsR0FBSSxFQUFFLENBQUM7UUFFdEI7O1dBRUc7UUFDSSxnQkFBVyxHQUFJLEVBQUUsQ0FBQztRQUV6Qjs7O1dBR0c7UUFDSSwwQkFBcUIsR0FBSSxFQUFFLENBQUM7UUFFbkM7OztXQUdHO1FBQ0ksK0NBQTBDLEdBQUksSUFBSSxDQUFDO1FBRTFEOzs7V0FHRztRQUNJLGFBQVEsR0FBSSxFQUFFLENBQUM7UUFFdEI7O1dBRUc7UUFDSSxVQUFLLEdBQUksZ0JBQWdCLENBQUM7UUFFMUIsYUFBUSxHQUFJLEVBQUUsQ0FBQztRQUVmLFdBQU0sR0FBSSxFQUFFLENBQUM7UUFFcEI7OztXQUdHO1FBQ0ksU0FBSSxHQUFJLElBQUksQ0FBQztRQUVwQjs7O1dBR0c7UUFDSSx1QkFBa0IsR0FBSSxJQUFJLENBQUM7UUFFM0IsWUFBTyxHQUFTLElBQUksQ0FBQztRQUU1Qjs7V0FFRztRQUNJLFdBQU0sR0FBSSxFQUFFLENBQUM7UUFFcEI7O1dBRUc7UUFDSSxjQUFTLEdBQUksRUFBRSxDQUFDO1FBRXZCOztXQUVHO1FBQ0ksd0JBQW1CLEdBQUksSUFBSSxDQUFDO1FBRW5DOztXQUVHO1FBQ0ksa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFckM7O1dBRUc7UUFDSSx1QkFBa0IsR0FBWSxJQUFJLENBQUM7UUFFMUM7O1dBRUc7UUFDSSwwQkFBcUIsR0FBYyxFQUFFLENBQUM7UUFFN0M7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFakMsaUJBQVksR0FBSSxFQUFFLENBQUM7UUFFMUI7Ozs7O1dBS0c7UUFDSSx5QkFBb0IsR0FBSSxLQUFLLENBQUM7UUFFckM7O1dBRUc7UUFDSSw2QkFBd0IsR0FBSSxFQUFFLENBQUM7UUFFL0IsK0JBQTBCLEdBQUksRUFBRSxDQUFDO1FBRXhDOzs7V0FHRztRQUNJLDRCQUF1QixHQUFJLEtBQUssQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ0ksd0JBQW1CLEdBQVksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVoRDs7V0FFRztRQUNJLHlCQUFvQixHQUFZLElBQUksR0FBRyxFQUFFLENBQUM7UUFFakQ7Ozs7Ozs7V0FPRztRQUNJLHNCQUFpQixHQUFZLEVBQUUsQ0FBQztRQUV2Qzs7Ozs7V0FLRztRQUNJLGlCQUFZLEdBQTRCLFlBQVksQ0FBQztRQUU1RDs7O1dBR0c7UUFDSSxzQ0FBaUMsR0FBSSxJQUFJLENBQUM7UUFFakQ7Ozs7V0FJRztRQUNJLFNBQUksR0FBWSxJQUFJLENBQUM7UUFFNUI7OztXQUdHO1FBQ0ksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBRWxDLDRCQUF1QixHQUFJLDBDQUEwQyxDQUFDO1FBRTdFOzs7O1dBSUc7UUFDSSxrQkFBYSxHQUFJLElBQUksQ0FBQztRQUU3Qjs7OztXQUlHO1FBQ0kseUJBQW9CLEdBQUksS0FBSyxDQUFDO1FBRXJDOzs7V0FHRztRQUNJLDBCQUFxQixHQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFekM7O1dBRUc7UUFDSSwwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFFN0M7O1dBRUc7UUFDSSwyQkFBc0IsR0FBSSx5Q0FBeUMsQ0FBQztRQUUzRTs7Ozs7O1dBTUc7UUFDSSx1QkFBa0IsR0FBSSxLQUFLLENBQUM7UUFFbkM7OztXQUdHO1FBQ0kscUJBQWdCLEdBQUksS0FBSyxDQUFDO1FBRTFCLG1DQUE4QixHQUFJLEtBQUssQ0FBQztRQUUvQzs7O1dBR0c7UUFDSSxvQkFBZSxHQUFJLEtBQUssQ0FBQztRQVNoQzs7Ozs7V0FLRztRQUNJLHdCQUFtQixHQUFJLEdBQUcsQ0FBQztRQUVsQzs7V0FFRztRQUNJLHFCQUFnQixHQUFJLEtBQUssQ0FBQztRQU9qQzs7V0FFRztRQUNJLDRCQUF1QixHQUFJLENBQUMsQ0FBQztRQUVwQzs7V0FFRztRQUNJLHVCQUFrQixHQUFJLENBQUMsQ0FBQztRQVUvQjs7OztXQUlHO1FBQ0ksZ0JBQVcsR0FBSSxLQUFLLENBQUM7UUFFNUI7OztXQUdHO1FBQ0ksMkJBQXNCLEdBQUksS0FBSyxDQUFDO1FBRXZDOzs7V0FHRztRQUNJLHdCQUFtQixHQUFJLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNJLGdCQUFXLEdBQUksS0FBSyxDQUFDO1FBUTVCOzs7O1dBSUc7UUFDSSxZQUFPLEdBQTJCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDL0MsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBWkEsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUM7Q0FVRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBdXRoQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBjbGllbnQncyBpZCBhcyByZWdpc3RlcmVkIHdpdGggdGhlIGF1dGggc2VydmVyXG4gICAqL1xuICBwdWJsaWMgY2xpZW50SWQ/ID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQncyByZWRpcmVjdFVyaSBhcyByZWdpc3RlcmVkIHdpdGggdGhlIGF1dGggc2VydmVyXG4gICAqL1xuICBwdWJsaWMgcmVkaXJlY3RVcmk/ID0gJyc7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHNlY29uZCByZWRpcmVjdFVyaSB3aGVyZSB0aGUgYXV0aCBzZXJ2ZXJcbiAgICogcmVkaXJlY3RzIHRoZSB1c2VyIHRvIGFmdGVyIGxvZ2dpbmcgb3V0LlxuICAgKi9cbiAgcHVibGljIHBvc3RMb2dvdXRSZWRpcmVjdFVyaT8gPSAnJztcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGV0aGVyIHRvIHVzZSAncmVkaXJlY3RVcmknIGFzIGEgcmVwbGFjZW1lbnRcbiAgICogb2YgJ3Bvc3RMb2dvdXRSZWRpcmVjdFVyaScgaWYgdGhlIGxhdHRlciBpcyBub3Qgc2V0LlxuICAgKi9cbiAgcHVibGljIHJlZGlyZWN0VXJpQXNQb3N0TG9nb3V0UmVkaXJlY3RVcmlGYWxsYmFjaz8gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aCBzZXJ2ZXIncyBlbmRwb2ludCB0aGF0IGFsbG93cyB0byBsb2dcbiAgICogdGhlIHVzZXIgaW4gd2hlbiB1c2luZyBpbXBsaWNpdCBmbG93LlxuICAgKi9cbiAgcHVibGljIGxvZ2luVXJsPyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdGVkIHNjb3Blc1xuICAgKi9cbiAgcHVibGljIHNjb3BlPyA9ICdvcGVuaWQgcHJvZmlsZSc7XG5cbiAgcHVibGljIHJlc291cmNlPyA9ICcnO1xuXG4gIHB1YmxpYyBybmdVcmw/ID0gJyc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hldGhlciB0byB1c2UgT3BlbklkIENvbm5lY3QgZHVyaW5nXG4gICAqIGltcGxpY2l0IGZsb3cuXG4gICAqL1xuICBwdWJsaWMgb2lkYz8gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoZXRoZXIgdG8gcmVxdWVzdCBhbiBhY2Nlc3MgdG9rZW4gZHVyaW5nXG4gICAqIGltcGxpY2l0IGZsb3cuXG4gICAqL1xuICBwdWJsaWMgcmVxdWVzdEFjY2Vzc1Rva2VuPyA9IHRydWU7XG5cbiAgcHVibGljIG9wdGlvbnM/OiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWVyJ3MgdXJpLlxuICAgKi9cbiAgcHVibGljIGlzc3Vlcj8gPSAnJztcblxuICAvKipcbiAgICogVGhlIGxvZ291dCB1cmwuXG4gICAqL1xuICBwdWJsaWMgbG9nb3V0VXJsPyA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoZXRoZXIgdG8gY2xlYXIgdGhlIGhhc2ggZnJhZ21lbnQgYWZ0ZXIgbG9nZ2luZyBpbi5cbiAgICovXG4gIHB1YmxpYyBjbGVhckhhc2hBZnRlckxvZ2luPyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFVybCBvZiB0aGUgdG9rZW4gZW5kcG9pbnQgYXMgZGVmaW5lZCBieSBPcGVuSWQgQ29ubmVjdCBhbmQgT0F1dGggMi5cbiAgICovXG4gIHB1YmxpYyB0b2tlbkVuZHBvaW50Pzogc3RyaW5nID0gbnVsbDtcblxuICAvKipcbiAgICogVXJsIG9mIHRoZSByZXZvY2F0aW9uIGVuZHBvaW50IGFzIGRlZmluZWQgYnkgT3BlbklkIENvbm5lY3QgYW5kIE9BdXRoIDIuXG4gICAqL1xuICBwdWJsaWMgcmV2b2NhdGlvbkVuZHBvaW50Pzogc3RyaW5nID0gbnVsbDtcblxuICAvKipcbiAgICogTmFtZXMgb2Yga25vd24gcGFyYW1ldGVycyBzZW50IG91dCBpbiB0aGUgVG9rZW5SZXNwb25zZS4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi01LjFcbiAgICovXG4gIHB1YmxpYyBjdXN0b21Ub2tlblBhcmFtZXRlcnM/OiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBVcmwgb2YgdGhlIHVzZXJpbmZvIGVuZHBvaW50IGFzIGRlZmluZWQgYnkgT3BlbklkIENvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgdXNlcmluZm9FbmRwb2ludD86IHN0cmluZyA9IG51bGw7XG5cbiAgcHVibGljIHJlc3BvbnNlVHlwZT8gPSAnJztcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hvdWxkXG4gICAqIGJlIHNob3duIGF0IHRoZSBjb25zb2xlLiBOb3RlIHRoYXQgaW4gY2VydGFpbiBicm93c2Vyc1xuICAgKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBjb25zb2xlIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgc2V0XG4gICAqIHRvIGluY2x1ZGUgRGVidWcgbGV2ZWwgbWVzc2FnZXMuXG4gICAqL1xuICBwdWJsaWMgc2hvd0RlYnVnSW5mb3JtYXRpb24/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSByZWRpcmVjdCB1cmkgdXNlZCB3aGVuIGRvaW5nIHNpbGVudCByZWZyZXNoLlxuICAgKi9cbiAgcHVibGljIHNpbGVudFJlZnJlc2hSZWRpcmVjdFVyaT8gPSAnJztcblxuICBwdWJsaWMgc2lsZW50UmVmcmVzaE1lc3NhZ2VQcmVmaXg/ID0gJyc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gZGlzcGxheSB0aGUgaWZyYW1lIHVzZWQgZm9yXG4gICAqIHNpbGVudCByZWZyZXNoIGZvciBkZWJ1Z2dpbmcuXG4gICAqL1xuICBwdWJsaWMgc2lsZW50UmVmcmVzaFNob3dJRnJhbWU/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgZm9yIHNpbGVudCByZWZyZXNoLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNpbGVudFJlZnJlc2hUaW1lb3V0XG4gICAqL1xuICBwdWJsaWMgc2lsZXRSZWZyZXNoVGltZW91dD86IG51bWJlciA9IDEwMDAgKiAyMDtcblxuICAvKipcbiAgICogVGltZW91dCBmb3Igc2lsZW50IHJlZnJlc2guXG4gICAqL1xuICBwdWJsaWMgc2lsZW50UmVmcmVzaFRpbWVvdXQ/OiBudW1iZXIgPSAxMDAwICogMjA7XG5cbiAgLyoqXG4gICAqIFNvbWUgYXV0aCBzZXJ2ZXJzIGRvbid0IGFsbG93IHVzaW5nIHBhc3N3b3JkIGZsb3dcbiAgICogdy9vIGEgY2xpZW50IHNlY3JldCB3aGlsZSB0aGUgc3RhbmRhcmRzIGRvIG5vdFxuICAgKiBkZW1hbmQgZm9yIGl0LiBJbiB0aGlzIGNhc2UsIHlvdSBjYW4gc2V0IGEgcGFzc3dvcmRcbiAgICogaGVyZS4gQXMgdGhpcyBwYXNzd29yZCBpcyBleHBvc2VkIHRvIHRoZSBwdWJsaWNcbiAgICogaXQgZG9lcyBub3QgYnJpbmcgYWRkaXRpb25hbCBzZWN1cml0eSBhbmQgaXMgdGhlcmVmb3JlXG4gICAqIGFzIGdvb2QgYXMgdXNpbmcgbm8gcGFzc3dvcmQuXG4gICAqL1xuICBwdWJsaWMgZHVtbXlDbGllbnRTZWNyZXQ/OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGV0aGVyIGh0dHBzIGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyByZW1vdGVPbmx5IHdoaWNoIG9ubHkgYWxsb3dzXG4gICAqIGh0dHAgZm9yIGxvY2FsaG9zdCwgd2hpbGUgZXZlcnkgb3RoZXIgZG9tYWlucyBuZWVkXG4gICAqIHRvIGJlIHVzZWQgd2l0aCBodHRwcy5cbiAgICovXG4gIHB1YmxpYyByZXF1aXJlSHR0cHM/OiBib29sZWFuIHwgJ3JlbW90ZU9ubHknID0gJ3JlbW90ZU9ubHknO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoZXRoZXIgZXZlcnkgdXJsIHByb3ZpZGVkIGJ5IHRoZSBkaXNjb3ZlcnlcbiAgICogZG9jdW1lbnQgaGFzIHRvIHN0YXJ0IHdpdGggdGhlIGlzc3VlcidzIHVybC5cbiAgICovXG4gIHB1YmxpYyBzdHJpY3REaXNjb3ZlcnlEb2N1bWVudFZhbGlkYXRpb24/ID0gdHJ1ZTtcblxuICAvKipcbiAgICogSlNPTiBXZWIgS2V5IFNldCAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTcpXG4gICAqIHdpdGgga2V5cyB1c2VkIHRvIHZhbGlkYXRlIHJlY2VpdmVkIGlkX3Rva2Vucy5cbiAgICogVGhpcyBpcyB0YWtlbiBvdXQgb2YgdGhlIGRpc292ZXJ5IGRvY3VtZW50LiBDYW4gYmUgc2V0IG1hbnVhbGx5IHRvby5cbiAgICovXG4gIHB1YmxpYyBqd2tzPzogb2JqZWN0ID0gbnVsbDtcblxuICAvKipcbiAgICogTWFwIHdpdGggYWRkaXRpb25hbCBxdWVyeSBwYXJhbWV0ZXIgdGhhdCBhcmUgYXBwZW5kZWQgdG9cbiAgICogdGhlIHJlcXVlc3Qgd2hlbiBpbml0aWFsaXppbmcgaW1wbGljaXQgZmxvdy5cbiAgICovXG4gIHB1YmxpYyBjdXN0b21RdWVyeVBhcmFtcz86IG9iamVjdCA9IG51bGw7XG5cbiAgcHVibGljIHNpbGVudFJlZnJlc2hJRnJhbWVOYW1lPyA9ICdhbmd1bGFyLW9hdXRoLW9pZGMtc2lsZW50LXJlZnJlc2gtaWZyYW1lJztcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGVuIHRoZSB0b2tlbl90aW1lb3V0IGV2ZW50IHNob3VsZCBiZSByYWlzZWQuXG4gICAqIElmIHlvdSBzZXQgdGhpcyB0byB0aGUgZGVmYXVsdCB2YWx1ZSAwLjc1LCB0aGUgZXZlbnRcbiAgICogaXMgdHJpZ2dlcmVkIGFmdGVyIDc1JSBvZiB0aGUgdG9rZW4ncyBsaWZlIHRpbWUuXG4gICAqL1xuICBwdWJsaWMgdGltZW91dEZhY3Rvcj8gPSAwLjc1O1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgbGliIHdpbGwgdHJ5IHRvIGNoZWNrIHdoZXRoZXIgdGhlIHVzZXJcbiAgICogaXMgc3RpbGwgbG9nZ2VkIGluIG9uIGEgcmVndWxhciBiYXNpcyBhcyBkZXNjcmliZWRcbiAgICogaW4gaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3Qtc2Vzc2lvbi0xXzAuaHRtbCNDaGFuZ2VOb3RpZmljYXRpb25cbiAgICovXG4gIHB1YmxpYyBzZXNzaW9uQ2hlY2tzRW5hYmxlZD8gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW50ZXJ2YWwgaW4gbXNlYyBmb3IgY2hlY2tpbmcgdGhlIHNlc3Npb25cbiAgICogYWNjb3JkaW5nIHRvIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LXNlc3Npb24tMV8wLmh0bWwjQ2hhbmdlTm90aWZpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc2Vzc2lvbkNoZWNrSW50ZXJ2YWxsPyA9IDMgKiAxMDAwO1xuXG4gIC8qKlxuICAgKiBVcmwgZm9yIHRoZSBpZnJhbWUgdXNlZCBmb3Igc2Vzc2lvbiBjaGVja3NcbiAgICovXG4gIHB1YmxpYyBzZXNzaW9uQ2hlY2tJRnJhbWVVcmw/OiBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBpZnJhbWUgdG8gdXNlIGZvciBzZXNzaW9uIGNoZWNrc1xuICAgKi9cbiAgcHVibGljIHNlc3Npb25DaGVja0lGcmFtZU5hbWU/ID0gJ2FuZ3VsYXItb2F1dGgtb2lkYy1jaGVjay1zZXNzaW9uLWlmcmFtZSc7XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBkaXNhYmxlIGF0X2hhc2ggY2hlY2tzXG4gICAqIGFuZCBpcyBpbmRlbnRlZCBmb3IgSWRlbnRpdHkgUHJvdmlkZXIgdGhhdCBkb2VzIG5vdCBkZWxpdmVyXG4gICAqIGFuIGF0X2hhc2ggRVZFTiBUSE9VR0ggaXRzIHJlY29tbWVuZGVkIGJ5IHRoZSBPSURDIHNwZWNzLlxuICAgKiBPZiBjb3Vyc2UsIHdoZW4gZGlzYWJsaW5nIHRoZXNlIGNoZWNrcyB0aGVuIHdlIGFyZSBieXBhc3NpbmdcbiAgICogYSBzZWN1cml0eSBjaGVjayB3aGljaCBtZWFucyB3ZSBhcmUgbW9yZSB2dWxuZXJhYmxlLlxuICAgKi9cbiAgcHVibGljIGRpc2FibGVBdEhhc2hDaGVjaz8gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGVmaW5lcyB3ZXRoZXIgdG8gY2hlY2sgdGhlIHN1YmplY3Qgb2YgYSByZWZyZXNoZWQgdG9rZW4gYWZ0ZXIgc2lsZW50IHJlZnJlc2guXG4gICAqIE5vcm1hbGx5LCBpdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgYmVmb3JlLlxuICAgKi9cbiAgcHVibGljIHNraXBTdWJqZWN0Q2hlY2s/ID0gZmFsc2U7XG5cbiAgcHVibGljIHVzZUlkVG9rZW5IaW50Rm9yU2lsZW50UmVmcmVzaD8gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGVmaW5lZCB3aGV0aGVyIHRvIHNraXAgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGlzc3VlciBpbiB0aGUgZGlzY292ZXJ5IGRvY3VtZW50LlxuICAgKiBOb3JtYWxseSwgdGhlIGRpc2NvdmV5IGRvY3VtZW50J3MgdXJsIHN0YXJ0cyB3aXRoIHRoZSB1cmwgb2YgdGhlIGlzc3Vlci5cbiAgICovXG4gIHB1YmxpYyBza2lwSXNzdWVyQ2hlY2s/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFjY29yZGluZyB0byByZmM2NzQ5IGl0IGlzIHJlY29tbWVuZGVkIChidXQgbm90IHJlcXVpcmVkKSB0aGF0IHRoZSBhdXRoXG4gICAqIHNlcnZlciBleHBvc2VzIHRoZSBhY2Nlc3NfdG9rZW4ncyBsaWZlIHRpbWUgaW4gc2Vjb25kcy5cbiAgICogVGhpcyBpcyBhIGZhbGxiYWNrIHZhbHVlIGZvciB0aGUgY2FzZSB0aGlzIHZhbHVlIGlzIG5vdCBleHBvc2VkLlxuICAgKi9cbiAgcHVibGljIGZhbGxiYWNrQWNjZXNzVG9rZW5FeHBpcmF0aW9uVGltZUluU2VjPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBmaW5hbCBzdGF0ZSBzZW50IHRvIGlzc3VlciBpcyBidWlsdCBhcyBmb2xsb3dzOlxuICAgKiBzdGF0ZSA9IG5vbmNlICsgbm9uY2VTdGF0ZVNlcGFyYXRvciArIGFkZGl0aW9uYWwgc3RhdGVcbiAgICogRGVmYXVsdCBzZXBhcmF0b3IgaXMgJzsnIChlbmNvZGVkICUzQikuXG4gICAqIEluIHJhcmUgY2FzZXMsIHRoaXMgY2hhcmFjdGVyIG1pZ2h0IGJlIGZvcmJpZGRlbiBvciBpbmNvbnZlbmllbnQgdG8gdXNlIGJ5IHRoZSBpc3N1ZXIgc28gaXQgY2FuIGJlIGN1c3RvbWl6ZWQuXG4gICAqL1xuICBwdWJsaWMgbm9uY2VTdGF0ZVNlcGFyYXRvcj8gPSAnOyc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gdXNlIEhUVFAgQkFTSUMgYXV0aCBmb3IgQUpBWCBjYWxsc1xuICAgKi9cbiAgcHVibGljIHVzZUh0dHBCYXNpY0F1dGg/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB3aW5kb3cgb2YgdGltZSAoaW4gc2Vjb25kcykgdG8gYWxsb3cgdGhlIGN1cnJlbnQgdGltZSB0byBkZXZpYXRlIHdoZW4gdmFsaWRhdGluZyBpZF90b2tlbidzIGlhdCBhbmQgZXhwIHZhbHVlcy5cbiAgICovXG4gIHB1YmxpYyBjbG9ja1NrZXdJblNlYz86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVjcmVhc2VzIHRoZSBFeHBpcmF0aW9uIHRpbWUgb2YgdG9rZW5zIGJ5IHRoaXMgbnVtYmVyIG9mIHNlY29uZHNcbiAgICovXG4gIHB1YmxpYyBkZWNyZWFzZUV4cGlyYXRpb25CeVNlYz8gPSAwO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJjZXB0b3JzIHdhaXRzIHRoaXMgdGltZSBzcGFuIGlmIHRoZXJlIGlzIG5vIHRva2VuXG4gICAqL1xuICBwdWJsaWMgd2FpdEZvclRva2VuSW5Nc2VjPyA9IDA7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IHdhbnQgdG8gdXNlIHNpbGVudCByZWZyZXNoIHRvZ2V0aGVyIHdpdGhcbiAgICogY29kZSBmbG93LiBBcyBzaWxlbnQgcmVmcmVzaCBpcyB0aGUgb25seSBvcHRpb24gZm9yIHJlZnJlc2hpbmdcbiAgICogd2l0aCBpbXBsaWNpdCBmbG93LCB5b3UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IHR1cm4gaXQgb24gaW5cbiAgICogdGhpcyBjYXNlLlxuICAgKi9cbiAgcHVibGljIHVzZVNpbGVudFJlZnJlc2g/O1xuXG4gIC8qKlxuICAgKiBDb2RlIEZsb3cgaXMgYnkgZGVmYXVsZCB1c2VkIHRvZ2V0aGVyIHdpdGggUEtDSSB3aGljaCBpcyBhbHNvIGhpZ2x5IHJlY29tbWVudGVkLlxuICAgKiBZb3UgY2FuIGRpc2JhbGUgaXQgaGVyZSBieSBzZXR0aW5nIHRoaXMgZmxhZyB0byB0cnVlLlxuICAgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzYzNiNzZWN0aW9uLTEuMVxuICAgKi9cbiAgcHVibGljIGRpc2FibGVQS0NFPyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIHByZXNlcnZlIHRoZSByZXF1ZXN0ZWQgcm91dGUgaW5jbHVkaW5nIHF1ZXJ5IHBhcmFtZXRlcnMgYWZ0ZXIgY29kZSBmbG93IGxvZ2luLlxuICAgKiBUaGlzIHNldHRpbmcgZW5hYmxlcyBkZWVwIGxpbmtpbmcgZm9yIHRoZSBjb2RlIGZsb3cuXG4gICAqL1xuICBwdWJsaWMgcHJlc2VydmVSZXF1ZXN0ZWRSb3V0ZT8gPSBmYWxzZTtcblxuICAvKipcbiAgICogQWxsb3dzIHRvIGRpc2FibGUgdGhlIHRpbWVyIGZvciB0aGUgaWRfdG9rZW4gdXNlZFxuICAgKiBmb3IgdG9rZW4gcmVmcmVzaFxuICAgKi9cbiAgcHVibGljIGRpc2FibGVJZFRva2VuVGltZXI/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEJsb2NrcyBvdGhlciBvcmlnaW5zIHJlcXVlc3RpbmcgYSBzaWxlbnQgcmVmcmVzaFxuICAgKi9cbiAgcHVibGljIGNoZWNrT3JpZ2luPyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGpzb24/OiBQYXJ0aWFsPEF1dGhDb25maWc+KSB7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywganNvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGUgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBvcGVuIHRoZSBsb2dpbiB1cmwsXG4gICAqIGFsbG93aW5nIGEgd2F5IGZvciBpbXBsZW1lbnRhdGlvbnMgdG8gc3BlY2lmeSB0aGVpciBvd24gbWV0aG9kIG9mIHJvdXRpbmcgdG8gbmV3XG4gICAqIHVybHMuXG4gICAqL1xuICBwdWJsaWMgb3BlblVyaT86ICh1cmk6IHN0cmluZykgPT4gdm9pZCA9ICh1cmkpID0+IHtcbiAgICBsb2NhdGlvbi5ocmVmID0gdXJpO1xuICB9O1xufVxuIl19 |
\ | No newline at end of file |