@agilemotion/oui-react-js 2.0.4 → 2.0.7

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.
@@ -54,6 +54,12 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
54
54
  const [fieldParentErrors] = _react.default.useState({});
55
55
  const [visible, setVisible] = _react.default.useState(true);
56
56
  const loadingRef = _react.default.useRef(true);
57
+ // Validity register: Map<fieldId, { valid, message, forceMarker }>.
58
+ // Single source of truth for "is this field valid?". BaseField writes
59
+ // here from doValidation; form.value reads here without invoking any
60
+ // field methods (kills the bi-directional render-time chain that
61
+ // produced React #185).
62
+ const fieldValidity = _react.default.useRef(new Map());
57
63
  let sectionCounter = 0;
58
64
  const api = () => {
59
65
  return {
@@ -84,6 +90,48 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
84
90
  removeField: id => {
85
91
  removeField(id);
86
92
  },
93
+ setFieldValidity: (id, result) => {
94
+ fieldValidity.current.set(id, result);
95
+ },
96
+ clearFieldValidity: id => {
97
+ fieldValidity.current.delete(id);
98
+ },
99
+ validateAll: () => {
100
+ // Explicit "force-validate every field" command. Replaces the
101
+ // old hack of reading form.value purely for its side effects.
102
+ // Fields write into fieldValidity via doValidation as a side
103
+ // effect of validate; we then walk the register for invalid
104
+ // fields to drive UX (scrollTo first, refresh container error
105
+ // callback) — same UX the getter used to provide, now opt-in.
106
+ for (const field of fields) {
107
+ if (!_Utils.default.isNull(field.handle) && !_Utils.default.isNull(field.handle.api)) {
108
+ // Pass the actual current value so doValidation's
109
+ // (currentValue, required, markers) cache key
110
+ // reflects reality. Without this we were passing
111
+ // null, which made cache hits opaque in logs and
112
+ // forced Utils.validateField to fall back to
113
+ // values[id] every time.
114
+ const path = getValuePath(field.id, null);
115
+ const currentValue = !_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject) ? path.valueObject[path.valueProperty] : null;
116
+ field.handle.api.validate(values.current, currentValue);
117
+ }
118
+ }
119
+ let firstInvalid = null;
120
+ for (const field of fields) {
121
+ if (field.bindValueToForm === false) continue;
122
+ const v = fieldValidity.current.get(field.id);
123
+ if (v && v.valid === false) {
124
+ doValidateParent(field, true, false);
125
+ if (firstInvalid === null) firstInvalid = field;
126
+ }
127
+ }
128
+ if (!_Utils.default.isNull(firstInvalid) && !_Utils.default.isNull(firstInvalid.handle) && !_Utils.default.isNull(firstInvalid.handle.api) && typeof firstInvalid.handle.api.scrollTo === 'function') {
129
+ firstInvalid.handle.api.scrollTo();
130
+ }
131
+ if (!_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
132
+ containerErrorCallback.current(fieldParentErrors);
133
+ }
134
+ },
87
135
  loadData: (actionConfig, event) => {
88
136
  loadData(actionConfig, config, event ? event.data : null);
89
137
  },
@@ -129,43 +177,44 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
129
177
  }
130
178
  },
131
179
  get value() {
180
+ // Read returns values.current iff every bound field's
181
+ // register entry is valid. Side effect: invokes each
182
+ // field's cached onValidityChange to refresh marker UI
183
+ // from register state — no re-validation, no setFieldValidity
184
+ // writes. Symmetric (fires for valid + invalid) so a field
185
+ // whose UI got out of sync with the register (stale hasError
186
+ // from some non-doHandleChange path) is repainted to match.
187
+ // setStates are idempotent (React bails on same value), so
188
+ // repeated form.value reads cost zero re-renders after the
189
+ // first paint. The markers gate inside the callback ensures
190
+ // refreshes only paint when global markers are enabled.
191
+ let formValid = true;
132
192
  if (loadingRef.current === false && values.current) {
133
- let data = null;
134
- let valid = true;
135
- data = {};
136
- let map = !_Utils.default.isNull(masterValues) ? JSON.parse(JSON.stringify(masterValues)) : {};
137
- if (_Utils.default.isNull(map.id)) {
138
- map.id = values.current.id;
139
- }
140
- let firstInvalidField = null;
141
193
  for (const field of fields) {
142
- if (field.bindValueToForm === false) {
143
- continue;
194
+ if (field.bindValueToForm === false) continue;
195
+ const v = fieldValidity.current.get(field.id);
196
+ formValid = formValid && (v === undefined || v.valid);
197
+ if (v && typeof v.onValidityChange === 'function') {
198
+ v.onValidityChange(v.valid, v.message);
144
199
  }
145
- let fieldValid = field.handle.api.validate(values.current, null);
146
- if (fieldValid === false || _Utils.default.isNull(fieldValid)) {
147
- //console.log("Invalid form field [" + field.handle.api.id + "]");
148
- if (firstInvalidField == null) {
149
- firstInvalidField = field;
200
+ // Outbound-normalize the stored value so non-string field
201
+ // types (Date for DatePicker, lookup objects, etc.) serialize
202
+ // to wire format on JSON.stringify. Restores the behavior the
203
+ // old getter provided via parseValue(_, false). Idempotent for
204
+ // typed valueParsers — repeat reads see the already-normalized
205
+ // value and re-emit the same string. parseValue is a pure JS
206
+ // transform with no React state side effects, so unlike the
207
+ // validate call we removed in seq=44, this can't drive a
208
+ // re-render loop.
209
+ if (!_Utils.default.isNull(field.handle) && !_Utils.default.isNull(field.handle.api) && typeof field.handle.api.parseValue === 'function') {
210
+ const path = getValuePath(field.id, values.current);
211
+ if (!_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject)) {
212
+ path.valueObject[path.valueProperty] = field.handle.api.parseValue(path.valueObject[path.valueProperty], false);
150
213
  }
151
- doValidateParent(field, !fieldValid, false);
152
- valid = false;
153
- } else if (valid) {
154
- let id = field.id;
155
- let path = getValuePath(id, values.current);
156
- path.valueObject[path.valueProperty] = field.handle.api.parseValue(path.valueObject[path.valueProperty], false);
157
214
  }
158
215
  }
159
- if (firstInvalidField) {
160
- firstInvalidField.handle.api.scrollTo();
161
- }
162
- data = values.current;
163
- if (!_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
164
- containerErrorCallback.current(fieldParentErrors);
165
- }
166
- return valid ? data : null;
167
216
  }
168
- return null;
217
+ return formValid ? values.current : null;
169
218
  },
170
219
  setFieldError: (id, error) => {
171
220
  return setFieldError(id, error);
@@ -359,6 +408,16 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
359
408
  loadingRef.current = false;
360
409
  let event = new _Event.default(props.handle, props.viewId, null);
361
410
  _Observable.default.fireEvent(_EventType.default.COMPONENT_LOAD, event);
411
+
412
+ // Initial load complete. Enable markers globally so all subsequent
413
+ // validation flows (save click, value changes, button-driven
414
+ // validateAll) surface error UI. BaseField self-validation during
415
+ // initial load locally suppresses markers in its own try/finally,
416
+ // so this re-enable doesn't cause a load-time flash for fields
417
+ // that mount during this same effect cycle. Async data arriving
418
+ // later will re-validate via BaseField's [props.values, config]
419
+ // useEffect, which also locally suppresses markers.
420
+ _ApplicationManager.default.enableFormMarkers(true);
362
421
  return () => {
363
422
  _Observable.default.clearComponentEventListeners(props.handle);
364
423
  };
@@ -483,6 +542,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
483
542
  fields.splice(i, 1);
484
543
  }
485
544
  }
545
+ fieldValidity.current.delete(id);
486
546
  };
487
547
  function doValidateParent(field, invalid) {
488
548
  let updateErrors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
@@ -557,6 +617,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
557
617
  let gridFieldPath = getValuePath(groupFieldId, null);
558
618
  if (!_Utils.default.isNull(gridFieldPath)) {
559
619
  let groupFieldVal = gridFieldPath.valueObject[gridFieldPath.valueProperty];
620
+ console.log('RE-Validating form', groupFieldVal);
560
621
  validateField(groupField, groupFieldId, groupFieldVal);
561
622
  }
562
623
  }
@@ -655,4 +716,4 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
655
716
  }, !_Utils.default.isNull(props.config.id) ? render(props.config) : /*#__PURE__*/_react.default.createElement("div", null, "ERROR: A form must have an ID"));
656
717
  });
657
718
  var _default = exports.default = Form;
658
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwic2VjdGlvbkNvdW50ZXIiLCJhcGkiLCJpZCIsImRvVXBkYXRlVmFsdWUiLCJuYW1lIiwidXBkYXRlVmFsdWUiLCJjbGVhciIsImRvQ2xlYXIiLCJzZXRWYWx1ZSIsImRvSGFuZGxlQ2hhbmdlIiwiaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSIsIm9wdGlvbnMiLCJzZWxlY3RlZElkIiwiaGFuZGxlQ2hhbmdlIiwiZ2V0VmFsdWVQYXRoIiwiYWRkRmllbGQiLCJyZWYiLCJwYXJlbnRJZCIsImJpbmRWYWx1ZVRvRm9ybSIsInJlbW92ZUZpZWxkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJkb1ZhbGlkYXRlUGFyZW50IiwiZ2V0RmllbGQiLCJmaWVsZERhdGFCaW5kaW5ncyIsImZpZWxkTmFtZXMiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJqIiwiY29tcG9uZW50cyIsImNvbXBvbmVudCIsInR5cGUiLCJnZXRGaWVsZHNGcm9tVGFiIiwiayIsImZpZWxkIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsImN1cnJlbnQiLCJtb2RlbCIsInBhcnNlVmFsdWVzIiwidHJhbnNmb3JtRGF0YU9iamVjdCIsInZhbGlkIiwibWFwIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiZmlyc3RJbnZhbGlkRmllbGQiLCJmaWVsZFZhbGlkIiwiaGFuZGxlIiwidmFsaWRhdGUiLCJwYXRoIiwidmFsdWVPYmplY3QiLCJ2YWx1ZVByb3BlcnR5IiwicGFyc2VWYWx1ZSIsInNjcm9sbFRvIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJnZXRDaGlsZHJlbiIsImNoaWxkcmVuIiwibW9yZUNoaWxkcmVuIiwicHJvcGVydGllcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0eSIsInNlY3Rpb25IYW5kbGUiLCJjaGlsZCIsInJlZnJlc2giLCJwYXJzZWRDb25maWciLCJldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uIiwiY3JlYXRlU2VjdGlvbkhhbmRsZSIsInVwZGF0ZVZpZXdUaXRsZSIsInZpZXciLCJnZXRWaWV3IiwidGl0bGUiLCJpbmNsdWRlcyIsInVwZGF0ZUFwcEJhclRpdGxlIiwiaGFuZGxlRGF0YUFycml2ZWQiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIkRBVEFfQVJSSVZFRCIsInByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zIiwiZXZlbnRDb25maWciLCJjb21wb25lbnRDb25maWciLCJldmVudERhdGEiLCJ1bmRlZmluZWQiLCJzZXJ2aWNlIiwiZGF0YVNlcnZpY2UiLCJjb21wb25lbnRWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSIsImludm9rZVJwYyIsInRoZW4iLCJyZXN1bHQiLCJjb25zb2xlIiwiY2F0Y2giLCJlcnJvclR5cGUiLCJwdWJsaXNoRXJyb3JNZXNzYWdlIiwic2VydmljZUNhbGxBY3Rpb25IYW5kbGVyIiwiZXhlY3V0ZSIsInBhcmFtZXRlciIsImlzRXhwcmVzc2lvbiIsImZpbGxFdmVudERhdGFWYWx1ZSIsImlzRXZlbnREYXRhIiwidG9TdHJpbmciLCJzdGFydHNXaXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJhZGRTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb24iLCJkeW5hbWljSlMiLCJleGVjdXRlU2NyaXB0IiwiY29uY2F0IiwidmFsIiwicmVzb2x2ZUV4cHJlc3Npb25WYWx1ZSIsInVzZUVmZmVjdCIsImV2ZW50SGFuZGxpbmdDb25maWciLCJzdWJzY3JpcHRpb25zIiwiYXV0b0xvYWREYXRhIiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwic3Vic2NyaXB0aW9uIiwiZXZlbnRUeXBlIiwiQ09NUE9ORU5UX0xPQUQiLCJhY3Rpb25zIiwiYWN0aW9uVHlwZSIsImFkZFN1YnNjcmlwdGlvbnMiLCJhZGRTeXN0ZW1TdWJzY3JpcHRpb25zIiwiaGFuZGxlTG9hZENvbXBsZXRlIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsImVuYWJsZUZvcm1NYXJrZXJzIiwidmFsdWVDaGFuZ2VIYW5kbGVyIiwibW9kZWxDaGFuZ2VIYW5kbGVyIiwia2V5IiwicGFyc2VkVmFsdWVzIiwib2JqZWN0VmFsdWUiLCJkYXRhQXJyaXZlZEhhbmRsZXIiLCJzcGxpY2UiLCJ1cGRhdGVFcnJvcnMiLCJpc1BhcmVudEludmFsaWQiLCJ2YWxpZGF0ZUZpZWxkIiwidmFscyIsImN1cnJlbnRWYWx1ZXMiLCJncm91cEZpZWxkIiwidmFsaWRhdGlvbkdyb3VwIiwiZ2V0VmFsaWRhdGlvbkdyb3VwIiwiZ3JvdXBGaWVsZElkIiwiZ3JpZEZpZWxkUGF0aCIsImdyb3VwRmllbGRWYWwiLCJWQUxVRV9DSEFOR0UiLCJzZWxlY3Rpb24iLCJzZWxlY3RlZFZhbHVlIiwicmVuZGVyIiwiZm9ybSIsImNyZWF0ZUVsZW1lbnQiLCJrZXlIYW5kbGVyIiwiZGlzYWJsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsIm1lcmdlU3R5bGVzIiwicGFkZGluZyIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vRm9ybS5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7bWFrZVN0eWxlc30gZnJvbSAnQG11aS9zdHlsZXMnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCBTZWN0aW9uIGZyb20gJy4vU2VjdGlvbic7XG5pbXBvcnQgJy4vRm9ybS5jc3MnO1xuaW1wb3J0IHtpbnZva2VScGN9IGZyb20gJy4uLy4uL1Jlc3RTZXJ2aWNlJztcbmltcG9ydCB7TXV0ZXh9IGZyb20gJ2FzeW5jLW11dGV4JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyIGZyb20gJy4uLy4uL2V2ZW50L1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgZHluYW1pY0pTIGZyb20gJy4uLy4uL0R5bmFtaWNKUyc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IHtjbGVhcn0gZnJvbSBcIkB0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudC9kaXN0L2NsZWFyXCI7XG5cbmNvbnN0IHVzZVN0eWxlcyA9IG1ha2VTdHlsZXModGhlbWUgPT4gKHtcbiAgICBjb250YWluZXI6IHtcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAnJiB0ciB0ZCc6IHtcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdDoge1xuICAgICAgICBtYXJnaW46IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgICAgIG1pbldpZHRoOiAxMjAsXG4gICAgICAgIG1pbkhlaWdodDogNDhcbiAgICB9LFxuICAgIHNlbGVjdEVtcHR5OiB7XG4gICAgICAgIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZygyKSxcbiAgICB9LFxuICAgIHJvb3Q6IHt9XG59KSk7XG5cbmNvbnN0IEZvcm0gPSBSZWFjdC5tZW1vKChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBSZWFjdC51c2VSZWYoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpID8gcHJvcHMudmFsdWVzIDoge30pO1xuICAgICAgICBjb25zdCBbbWFzdGVyVmFsdWVzLCBzZXRNYXN0ZXJWYWx1ZXNdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IFtjb25maWcsIHNldENvbmZpZ10gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCkpO1xuICAgICAgICBjb25zdCBbYmluZGVyXSA9IFJlYWN0LnVzZVN0YXRlKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYmluZGVyKSA/ICdQTEFJTl9PQkpFQ1QnIDogcHJvcHMuY29uZmlnLmJpbmRlcik7XG4gICAgICAgIGNvbnN0IFtmaWVsZHNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgICAgICBjb25zdCBjb250YWluZXJFcnJvckNhbGxiYWNrID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICAgIGNvbnN0IFtzZWN0aW9uSGFuZGxlc10gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgICAgIGNvbnN0IFtmaWVsZFBhcmVudEVycm9yc10gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICAgICAgICBjb25zdCBsb2FkaW5nUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWREYXRhOiAoYWN0aW9uQ29uZmlnLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2FkRGF0YShhY3Rpb25Db25maWcsIGNvbmZpZywgZXZlbnQgPyBldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiaW5kRGF0YTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9CaW5kRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlUGFyZW50OiAoaWQsIGludmFsaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChnZXRGaWVsZChpZCksIGludmFsaWQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IGZpZWxkRGF0YUJpbmRpbmdzKCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmNvbmZpZy5zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb24gPSBwcm9wcy5jb25maWcuc2VjdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNlY3Rpb24uY29tcG9uZW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSBzZWN0aW9uLmNvbXBvbmVudHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGdldEZpZWxkc0Zyb21UYWIoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBjb21wb25lbnQuZmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZmllbGRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1trXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKCFVdGlscy5pc051bGwoZmllbGQuZGF0YUJpbmRpbmcpID8gZmllbGQuZGF0YUJpbmRpbmcgOiBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkTmFtZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRDb250YWluZXJFcnJvckhhbmRsZXIoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50ID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgbW9kZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKG1vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMoe30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QobW9kZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhtb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UgJiYgdmFsdWVzLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXAgPSAhVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1hc3RlclZhbHVlcykpIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKG1hcC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuaWQgPSB2YWx1ZXMuY3VycmVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0SW52YWxpZEZpZWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkVmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRWYWxpZCA9PT0gZmFsc2UgfHwgVXRpbHMuaXNOdWxsKGZpZWxkVmFsaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJJbnZhbGlkIGZvcm0gZmllbGQgW1wiICsgZmllbGQuaGFuZGxlLmFwaS5pZCArIFwiXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmlyc3RJbnZhbGlkRmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkRmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZmllbGQsICFmaWVsZFZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBmaWVsZC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBnZXRWYWx1ZVBhdGgoaWQsIHZhbHVlcy5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gZmllbGQuaGFuZGxlLmFwaS5wYXJzZVZhbHVlKHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmlyc3RJbnZhbGlkRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEludmFsaWRGaWVsZC5oYW5kbGUuYXBpLnNjcm9sbFRvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB2YWx1ZXMuY3VycmVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudChmaWVsZFBhcmVudEVycm9ycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZCA/IGRhdGEgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyhwcm9wcy5oYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcpICYmICFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHByb3BzLnZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtwcm9wcy5jb25maWcsIHByb3BzLnZhbHVlc10pO1xuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXN0ZXJWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRGF0YUFycml2ZWQobWFzdGVyVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW21hc3RlclZhbHVlc10pO1xuXG4gICAgICAgIGNvbnN0IGdldEZpZWxkc0Zyb21UYWIgPSAodGFiKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGRzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhYlBhZ2Ugb2YgdGFiLnRhYlBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGFiUGFnZS5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2Zvcm1TZWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZHNldCBvZiBjb21wb25lbnQuY29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZmllbGRzZXQuZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1EYXRhT2JqZWN0ID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3JtVmFsdWVzID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnKSB7XG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgbWFwID0gZGF0YS5tYXA7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwobWFwKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VucyA9IHByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBmb3JtVmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IHRva2Vuc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IHRva2Vucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodm9bdG9rZW5dKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9bdG9rZW5dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2byA9IHZvW3Rva2VuXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSBtYXBbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlcyA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmb3JtVmFsdWVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGRvQ2xlYXIoKSB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnMoZmFsc2UpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgICAgICAgZmllbGQuaGFuZGxlLmFwaS5jbGVhcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIoe30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnModHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkb0JpbmREYXRhKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbHVlID0gZmllbGQuaGFuZGxlLmFwaS5wYXJzZVZhbHVlKGRhdGFba2V5XSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVZhbHVlcyhkYXRhKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgcGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsdWUgPSBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlLmFwaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gZmllbGQuaGFuZGxlLmFwaS5wYXJzZVZhbHVlKG9iamVjdFZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdOVUxMIGZpZWxkIHJlZmVyZW5jZSB3aGlsZSBwYXJzaW5nIGZvcm0gdmFsdWUgLSAnICsgZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWVzLmN1cnJlbnQgPSBwYXJzZWRWYWx1ZXM7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuZGF0YUFycml2ZWRIYW5kbGVyKHBhcnNlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIC8vcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHBhcnNlZFZhbHVlcyk7XG4gICAgICAgICAgICAvL31cbiAgICAgICAgfVxuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLnZhbHVlc10pO1xuXG4gICAgICAgIGNvbnN0IGdldEZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZW1vdmVGaWVsZCA9IChpZCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkLCB1cGRhdGVFcnJvcnMgPSB0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkLnBhcmVudElkKSkge1xuICAgICAgICAgICAgICAgIGxldCBpc1BhcmVudEludmFsaWQgPSBpbnZhbGlkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0gIT09IGZpZWxkICYmIGZpZWxkc1tpXS5wYXJlbnRJZCA9PT0gZmllbGQucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50SW52YWxpZCA9IGlzUGFyZW50SW52YWxpZCB8fCAhKFV0aWxzLmlzTnVsbChmaWVsZHNbaV0uZXJyb3IpIHx8IGZpZWxkc1tpXS5lcnJvci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRQYXJlbnRFcnJvcnNbZmllbGQucGFyZW50SWRdID0gaXNQYXJlbnRJbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlRXJyb3JzICYmICFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudChmaWVsZFBhcmVudEVycm9ycyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZFBhcmVudEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAoZmllbGQsIGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRWYWx1ZVBhdGggPSAoaWQsIHZhbHMpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0ge307XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHZhbHM7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjdXJyZW50VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvW3Rva2Vuc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbnNbaV1dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gdm87XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb0hhbmRsZUNoYW5nZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGlkLCBudWxsKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlUHJvcGVydHkpICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkID0gdmFsaWRhdGVGaWVsZChmaWVsZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25Hcm91cCA9IGdyb3VwRmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbGlkYXRpb25Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT09IGdyb3VwRmllbGQgJiYgdmFsaWRhdGlvbkdyb3VwID09PSBmaWVsZC5oYW5kbGUuYXBpLmdldFZhbGlkYXRpb25Hcm91cCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkSWQgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncmlkRmllbGRQYXRoID0gZ2V0VmFsdWVQYXRoKGdyb3VwRmllbGRJZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZ3JpZEZpZWxkUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkVmFsID0gZ3JpZEZpZWxkUGF0aC52YWx1ZU9iamVjdFtncmlkRmllbGRQYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZChncm91cEZpZWxkLCBncm91cEZpZWxkSWQsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoaW52YWxpZCA/IG51bGwgOiB2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZXMuY3VycmVudCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRGaWVsZCA9IChpZCwgaGFuZGxlLCBwYXJlbnRJZCwgYmluZFZhbHVlVG9Gb3JtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZpZWxkLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGQgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkLmlkID0gaWQ7XG4gICAgICAgICAgICBmaWVsZC5oYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICBmaWVsZC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgZmllbGQuYmluZFZhbHVlVG9Gb3JtID0gYmluZFZhbHVlVG9Gb3JtO1xuICAgICAgICAgICAgZmllbGQucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSA9IChuYW1lLCBvcHRpb25zLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmIChVdGlscy5pc051bGwob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS5pZCA9PT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UobmFtZSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoVXRpbHMuaXNOdWxsKGZvcm0uc2VjdGlvbnMpIHx8IGZvcm0uc2VjdGlvbnMubGVuZ3RoID09PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoc2VjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uaWQgPSBzZWN0aW9uQ291bnRlciArICctZm9ybS1zZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17c2VjdGlvbkNvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiBrZXlIYW5kbGVyPXtwcm9wcy5rZXlIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtjcmVhdGVTZWN0aW9uSGFuZGxlKHNlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLmhhbmRsZS5hcGkpID8gcHJvcHMuaGFuZGxlLmFwaSA6IGFwaSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt2YWx1ZXMuY3VycmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gaWQ9e3Byb3BzLmNvbmZpZy5pZH0gc3R5bGU9e1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSA9PT0gJ2RlZmF1bHRGb3JtJyA/XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4IDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnNzB2aCdcbiAgICAgICAgICAgICAgICAgICAgfSwgcHJvcHMuY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5pZCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RVJST1I6IEEgZm9ybSBtdXN0IGhhdmUgYW4gSUQ8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj4pO1xuICAgIH0pXG47XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sbUJBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLHlCQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxVQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVyxNQUFBLEdBQUFaLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBWSxNQUFBLEdBQUFaLE9BQUE7QUFBNkQsU0FBQUQsdUJBQUFjLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyxRQUFBSCxDQUFBLEVBQUFJLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQVAsQ0FBQSxPQUFBTSxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBUixDQUFBLEdBQUFJLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFYLENBQUEsRUFBQUksQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQWYsQ0FBQSxhQUFBSSxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUQsT0FBQSxDQUFBRyxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFlLGVBQUEsQ0FBQW5CLENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFyQixDQUFBLEVBQUFNLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBRixPQUFBLENBQUFHLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBdEIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBSixDQUFBO0FBQUEsU0FBQW1CLGdCQUFBbkIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBbUIsY0FBQSxDQUFBbkIsQ0FBQSxNQUFBSixDQUFBLEdBQUFNLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQXRCLENBQUEsRUFBQUksQ0FBQSxJQUFBb0IsS0FBQSxFQUFBbkIsQ0FBQSxFQUFBTyxVQUFBLE1BQUFhLFlBQUEsTUFBQUMsUUFBQSxVQUFBMUIsQ0FBQSxDQUFBSSxDQUFBLElBQUFDLENBQUEsRUFBQUwsQ0FBQTtBQUFBLFNBQUF1QixlQUFBbEIsQ0FBQSxRQUFBc0IsQ0FBQSxHQUFBQyxZQUFBLENBQUF2QixDQUFBLHVDQUFBc0IsQ0FBQSxHQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBQyxhQUFBdkIsQ0FBQSxFQUFBRCxDQUFBLDJCQUFBQyxDQUFBLEtBQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBTCxDQUFBLEdBQUFLLENBQUEsQ0FBQXdCLE1BQUEsQ0FBQUMsV0FBQSxrQkFBQTlCLENBQUEsUUFBQTJCLENBQUEsR0FBQTNCLENBQUEsQ0FBQStCLElBQUEsQ0FBQTFCLENBQUEsRUFBQUQsQ0FBQSx1Q0FBQXVCLENBQUEsU0FBQUEsQ0FBQSxZQUFBSyxTQUFBLHlFQUFBNUIsQ0FBQSxHQUFBNkIsTUFBQSxHQUFBQyxNQUFBLEVBQUE3QixDQUFBO0FBRTdELE1BQU04QixTQUFTLEdBQUcsSUFBQUMsa0JBQVUsRUFBQ0MsS0FBSyxLQUFLO0VBQ25DQyxTQUFTLEVBQUU7SUFDUEMsT0FBTyxFQUFFLE1BQU07SUFDZkMsUUFBUSxFQUFFLE1BQU07SUFDaEJDLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFO01BQ1BDLGFBQWEsRUFBRTtJQUNuQjtFQUNKLENBQUM7RUFDREMsTUFBTSxFQUFFO0lBQ0pDLE1BQU0sRUFBRVAsS0FBSyxDQUFDUSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hCQyxRQUFRLEVBQUUsR0FBRztJQUNiQyxTQUFTLEVBQUU7RUFDZixDQUFDO0VBQ0RDLFdBQVcsRUFBRTtJQUNUQyxTQUFTLEVBQUVaLEtBQUssQ0FBQ1EsT0FBTyxDQUFDLENBQUM7RUFDOUIsQ0FBQztFQUNESyxJQUFJLEVBQUUsQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTUMsSUFBSSxnQkFBR0MsY0FBSyxDQUFDQyxJQUFJLENBQUVDLEtBQUssSUFBSztFQUMzQixNQUFNQyxNQUFNLEdBQUdILGNBQUssQ0FBQ0ksTUFBTSxDQUFDLENBQUNDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNDLE1BQU0sQ0FBQyxHQUFHRCxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM1RSxNQUFNLENBQUNJLFlBQVksRUFBRUMsZUFBZSxDQUFDLEdBQUdSLGNBQUssQ0FBQ1MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUM1RCxNQUFNLENBQUNDLE1BQU0sRUFBRUMsU0FBUyxDQUFDLEdBQUdYLGNBQUssQ0FBQ1MsUUFBUSxDQUFDSixjQUFLLENBQUNPLFdBQVcsQ0FBQ1YsS0FBSyxDQUFDUSxNQUFNLEVBQUVSLEtBQUssQ0FBQ1csTUFBTSxDQUFDLENBQUM7RUFDekYsTUFBTSxDQUFDQyxNQUFNLENBQUMsR0FBR2QsY0FBSyxDQUFDUyxRQUFRLENBQUNKLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNRLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDLEdBQUcsY0FBYyxHQUFHWixLQUFLLENBQUNRLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDO0VBQ3pHLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEdBQUdmLGNBQUssQ0FBQ1MsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUNuQyxNQUFNTyxzQkFBc0IsR0FBR2hCLGNBQUssQ0FBQ0ksTUFBTSxDQUFDLENBQUM7RUFDN0MsTUFBTSxDQUFDYSxjQUFjLENBQUMsR0FBR2pCLGNBQUssQ0FBQ1MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNDLE1BQU0sQ0FBQ1MsaUJBQWlCLENBQUMsR0FBR2xCLGNBQUssQ0FBQ1MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE1BQU0sQ0FBQ1UsT0FBTyxFQUFFQyxVQUFVLENBQUMsR0FBR3BCLGNBQUssQ0FBQ1MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUNsRCxNQUFNWSxVQUFVLEdBQUdyQixjQUFLLENBQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDckMsSUFBSWtCLGNBQWMsR0FBRyxDQUFDO0VBRXRCLE1BQU1DLEdBQUcsR0FBR0EsQ0FBQSxLQUFNO0lBQ2QsT0FBTztNQUNILElBQUlDLEVBQUVBLENBQUEsRUFBRztRQUNMLE9BQU90QixLQUFLLENBQUNRLE1BQU0sQ0FBQ2MsRUFBRTtNQUMxQixDQUFDO01BQ0RDLGFBQWEsRUFBRUEsQ0FBQ0MsSUFBSSxFQUFFdEQsS0FBSyxLQUFLO1FBQzVCLE9BQU91RCxXQUFXLENBQUNELElBQUksRUFBRXRELEtBQUssQ0FBQztNQUNuQyxDQUFDO01BQ0R3RCxLQUFLLEVBQUVBLENBQUEsS0FBTTtRQUNUQyxPQUFPLENBQUMsQ0FBQztNQUNiLENBQUM7TUFDREMsUUFBUSxFQUFFQSxDQUFDTixFQUFFLEVBQUVwRCxLQUFLLEtBQUs7UUFDckIyRCxjQUFjLENBQUNQLEVBQUUsRUFBRXBELEtBQUssQ0FBQztNQUM3QixDQUFDO01BQ0Q0RCxzQkFBc0IsRUFBRUEsQ0FBQ04sSUFBSSxFQUFFTyxPQUFPLEVBQUVDLFVBQVUsS0FBSztRQUNuRCxPQUFPRixzQkFBc0IsQ0FBQ04sSUFBSSxFQUFFTyxPQUFPLEVBQUVDLFVBQVUsQ0FBQztNQUM1RCxDQUFDO01BQ0RDLFlBQVksRUFBRUEsQ0FBQ1gsRUFBRSxFQUFFcEQsS0FBSyxLQUFLO1FBQ3pCMkQsY0FBYyxDQUFDUCxFQUFFLEVBQUVwRCxLQUFLLENBQUM7TUFDN0IsQ0FBQztNQUNEZ0UsWUFBWSxFQUFFQSxDQUFDWixFQUFFLEVBQUVyQixNQUFNLEtBQUs7UUFDMUIsT0FBT2lDLFlBQVksQ0FBQ1osRUFBRSxFQUFFckIsTUFBTSxDQUFDO01BQ25DLENBQUM7TUFDRGtDLFFBQVEsRUFBRUEsQ0FBQ2IsRUFBRSxFQUFFYyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsZUFBZSxLQUFLO1FBQzlDLE9BQU9ILFFBQVEsQ0FBQ2IsRUFBRSxFQUFFYyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsZUFBZSxDQUFDO01BQ3ZELENBQUM7TUFDREMsV0FBVyxFQUFHakIsRUFBRSxJQUFLO1FBQ2pCaUIsV0FBVyxDQUFDakIsRUFBRSxDQUFDO01BQ25CLENBQUM7TUFDRGtCLFFBQVEsRUFBRUEsQ0FBQ0MsWUFBWSxFQUFFQyxLQUFLLEtBQUs7UUFDL0JGLFFBQVEsQ0FBQ0MsWUFBWSxFQUFFakMsTUFBTSxFQUFFa0MsS0FBSyxHQUFHQSxLQUFLLENBQUNDLElBQUksR0FBRyxJQUFJLENBQUM7TUFDN0QsQ0FBQztNQUNEQyxRQUFRLEVBQUdELElBQUksSUFBSztRQUNoQkUsVUFBVSxDQUFDRixJQUFJLENBQUM7TUFDcEIsQ0FBQztNQUNERyxjQUFjLEVBQUVBLENBQUN4QixFQUFFLEVBQUV5QixPQUFPLEtBQUs7UUFDN0JDLGdCQUFnQixDQUFDQyxRQUFRLENBQUMzQixFQUFFLENBQUMsRUFBRXlCLE9BQU8sQ0FBQztNQUMzQyxDQUFDO01BQ0QsSUFBSUcsaUJBQWlCQSxDQUFBLEVBQUc7UUFDcEIsSUFBSUMsVUFBVSxHQUFHLEVBQUU7UUFDbkIsS0FBSyxJQUFJOUUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHMkIsS0FBSyxDQUFDUSxNQUFNLENBQUM0QyxRQUFRLENBQUN6RixNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO1VBQ25ELElBQUlnRixPQUFPLEdBQUdyRCxLQUFLLENBQUNRLE1BQU0sQ0FBQzRDLFFBQVEsQ0FBQy9FLENBQUMsQ0FBQztVQUN0QyxLQUFLLElBQUlpRixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELE9BQU8sQ0FBQ0UsVUFBVSxDQUFDNUYsTUFBTSxFQUFFMkYsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsSUFBSUUsU0FBUyxHQUFHSCxPQUFPLENBQUNFLFVBQVUsQ0FBQ0QsQ0FBQyxDQUFDO1lBQ3JDLElBQUl6QyxNQUFNLEdBQUcsSUFBSTtZQUVqQixJQUFJMkMsU0FBUyxDQUFDQyxJQUFJLEtBQUssS0FBSyxFQUFFO2NBQzFCNUMsTUFBTSxHQUFHNkMsZ0JBQWdCLENBQUNGLFNBQVMsQ0FBQztZQUN4QyxDQUFDLE1BQU07Y0FDSDNDLE1BQU0sR0FBRzJDLFNBQVMsQ0FBQzNDLE1BQU07WUFDN0I7WUFFQSxLQUFLLElBQUk4QyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc5QyxNQUFNLENBQUNsRCxNQUFNLEVBQUVnRyxDQUFDLEVBQUUsRUFBRTtjQUNwQyxJQUFJQyxLQUFLLEdBQUcvQyxNQUFNLENBQUM4QyxDQUFDLENBQUM7Y0FDckJSLFVBQVUsQ0FBQzVGLElBQUksQ0FBQyxDQUFDNEMsY0FBSyxDQUFDQyxNQUFNLENBQUN3RCxLQUFLLENBQUNDLFdBQVcsQ0FBQyxHQUFHRCxLQUFLLENBQUNDLFdBQVcsR0FBR0QsS0FBSyxDQUFDdEMsRUFBRSxDQUFDO1lBQ3BGO1VBQ0o7UUFDSjtRQUVBLE9BQU82QixVQUFVO01BQ3JCLENBQUM7TUFDRFcsd0JBQXdCQSxDQUFDQyxRQUFRLEVBQUU7UUFDL0JqRCxzQkFBc0IsQ0FBQ2tELE9BQU8sR0FBR0QsUUFBUTtNQUM3QyxDQUFDO01BQ0QsSUFBSUUsS0FBS0EsQ0FBQSxFQUFHO1FBQ1IsT0FBT2hFLE1BQU0sQ0FBQytELE9BQU87TUFDekIsQ0FBQztNQUNELElBQUlDLEtBQUtBLENBQUNBLEtBQUssRUFBRTtRQUNiLElBQUk5RCxjQUFLLENBQUNDLE1BQU0sQ0FBQzZELEtBQUssQ0FBQyxFQUFFO1VBQ3JCQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZjVELGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLE1BQU07VUFDSDRELFdBQVcsQ0FBQ0MsbUJBQW1CLENBQUNGLEtBQUssQ0FBQyxDQUFDO1VBQ3ZDM0QsZUFBZSxDQUFDMkQsS0FBSyxDQUFDO1FBQzFCO01BQ0osQ0FBQztNQUNELElBQUkvRixLQUFLQSxDQUFBLEVBQUc7UUFDUixJQUFJaUQsVUFBVSxDQUFDNkMsT0FBTyxLQUFLLEtBQUssSUFBSS9ELE1BQU0sQ0FBQytELE9BQU8sRUFBRTtVQUNoRCxJQUFJckIsSUFBSSxHQUFHLElBQUk7VUFDZixJQUFJeUIsS0FBSyxHQUFHLElBQUk7VUFFaEJ6QixJQUFJLEdBQUcsQ0FBQyxDQUFDO1VBQ1QsSUFBSTBCLEdBQUcsR0FBRyxDQUFDbEUsY0FBSyxDQUFDQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxHQUFHaUUsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ0UsU0FBUyxDQUFDbkUsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDckYsSUFBSUYsY0FBSyxDQUFDQyxNQUFNLENBQUNpRSxHQUFHLENBQUMvQyxFQUFFLENBQUMsRUFBRTtZQUN0QitDLEdBQUcsQ0FBQy9DLEVBQUUsR0FBR3JCLE1BQU0sQ0FBQytELE9BQU8sQ0FBQzFDLEVBQUU7VUFDOUI7VUFFQSxJQUFJbUQsaUJBQWlCLEdBQUcsSUFBSTtVQUM1QixLQUFLLE1BQU1iLEtBQUssSUFBSS9DLE1BQU0sRUFBRTtZQUN4QixJQUFJK0MsS0FBSyxDQUFDdEIsZUFBZSxLQUFLLEtBQUssRUFBRTtjQUNqQztZQUNKO1lBRUEsSUFBSW9DLFVBQVUsR0FBR2QsS0FBSyxDQUFDZSxNQUFNLENBQUN0RCxHQUFHLENBQUN1RCxRQUFRLENBQUMzRSxNQUFNLENBQUMrRCxPQUFPLEVBQUUsSUFBSSxDQUFDO1lBQ2hFLElBQUlVLFVBQVUsS0FBSyxLQUFLLElBQUl2RSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3NFLFVBQVUsQ0FBQyxFQUFFO2NBQ2xEO2NBQ0EsSUFBR0QsaUJBQWlCLElBQUksSUFBSSxFQUFFO2dCQUMxQkEsaUJBQWlCLEdBQUdiLEtBQUs7Y0FDN0I7Y0FFQVosZ0JBQWdCLENBQUNZLEtBQUssRUFBRSxDQUFDYyxVQUFVLEVBQUUsS0FBSyxDQUFDO2NBQzNDTixLQUFLLEdBQUcsS0FBSztZQUNqQixDQUFDLE1BQU0sSUFBSUEsS0FBSyxFQUFFO2NBQ2QsSUFBSTlDLEVBQUUsR0FBR3NDLEtBQUssQ0FBQ3RDLEVBQUU7Y0FDakIsSUFBSXVELElBQUksR0FBRzNDLFlBQVksQ0FBQ1osRUFBRSxFQUFFckIsTUFBTSxDQUFDK0QsT0FBTyxDQUFDO2NBQzNDYSxJQUFJLENBQUNDLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDRSxhQUFhLENBQUMsR0FBR25CLEtBQUssQ0FBQ2UsTUFBTSxDQUFDdEQsR0FBRyxDQUFDMkQsVUFBVSxDQUFDSCxJQUFJLENBQUNDLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDRSxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDbkg7VUFDSjtVQUVBLElBQUdOLGlCQUFpQixFQUFFO1lBQ2xCQSxpQkFBaUIsQ0FBQ0UsTUFBTSxDQUFDdEQsR0FBRyxDQUFDNEQsUUFBUSxDQUFDLENBQUM7VUFDM0M7VUFFQXRDLElBQUksR0FBRzFDLE1BQU0sQ0FBQytELE9BQU87VUFFckIsSUFBSSxDQUFDN0QsY0FBSyxDQUFDQyxNQUFNLENBQUNVLHNCQUFzQixDQUFDa0QsT0FBTyxDQUFDLElBQUlrQiwyQkFBa0IsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQyxFQUFFO1lBQzVGckUsc0JBQXNCLENBQUNrRCxPQUFPLENBQUNoRCxpQkFBaUIsQ0FBQztVQUNyRDtVQUVBLE9BQU9vRCxLQUFLLEdBQUd6QixJQUFJLEdBQUcsSUFBSTtRQUM5QjtRQUVBLE9BQU8sSUFBSTtNQUNmLENBQUM7TUFDRHlDLGFBQWEsRUFBRUEsQ0FBQzlELEVBQUUsRUFBRStELEtBQUssS0FBSztRQUMxQixPQUFPRCxhQUFhLENBQUM5RCxFQUFFLEVBQUUrRCxLQUFLLENBQUM7TUFDbkMsQ0FBQztNQUNEQyxXQUFXLEVBQUVBLENBQUEsS0FBTTtRQUNmLElBQUlDLFFBQVEsR0FBRyxFQUFFO1FBQ2pCLEtBQUssSUFBSWxILENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dDLE1BQU0sQ0FBQ2xELE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7VUFDcEMsSUFBSXVGLEtBQUssR0FBRy9DLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQztVQUNyQmtILFFBQVEsQ0FBQ2hJLElBQUksQ0FBQ3FHLEtBQUssQ0FBQ2UsTUFBTSxDQUFDO1VBQzNCLElBQUlhLFlBQVksR0FBRzVCLEtBQUssQ0FBQ2UsTUFBTSxDQUFDdEQsR0FBRyxDQUFDaUUsV0FBVyxDQUFDLENBQUM7VUFDakQsS0FBSyxJQUFJaEMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHa0MsWUFBWSxDQUFDN0gsTUFBTSxFQUFFMkYsQ0FBQyxFQUFFLEVBQUU7WUFDMUNpQyxRQUFRLENBQUNoSSxJQUFJLENBQUNpSSxZQUFZLENBQUNsQyxDQUFDLENBQUMsQ0FBQztVQUNsQztRQUNKO1FBRUEsSUFBSW1DLFVBQVUsR0FBR3pJLE1BQU0sQ0FBQzBJLG1CQUFtQixDQUFDM0UsY0FBYyxDQUFDO1FBQzNELEtBQUssTUFBTTRFLFFBQVEsSUFBSUYsVUFBVSxFQUFFO1VBQy9CLElBQUlHLGFBQWEsR0FBRzdFLGNBQWMsQ0FBQzRFLFFBQVEsQ0FBQztVQUM1Q0osUUFBUSxDQUFDaEksSUFBSSxDQUFDcUksYUFBYSxDQUFDO1VBQzVCLEtBQUssTUFBTUMsS0FBSyxJQUFJRCxhQUFhLENBQUN2RSxHQUFHLENBQUNpRSxXQUFXLENBQUMsQ0FBQyxFQUFFO1lBQ2pEQyxRQUFRLENBQUNoSSxJQUFJLENBQUNzSSxLQUFLLENBQUM7VUFDeEI7UUFDSjtRQUVBLE9BQU9OLFFBQVE7TUFDbkIsQ0FBQztNQUNETyxPQUFPQSxDQUFBLEVBQUc7UUFDTixJQUFJTCxVQUFVLEdBQUd6SSxNQUFNLENBQUMwSSxtQkFBbUIsQ0FBQzNFLGNBQWMsQ0FBQztRQUMzRCxLQUFLLE1BQU00RSxRQUFRLElBQUlGLFVBQVUsRUFBRTtVQUMvQixJQUFJRyxhQUFhLEdBQUc3RSxjQUFjLENBQUM0RSxRQUFRLENBQUM7VUFDNUMsSUFBSUMsYUFBYSxDQUFDdkUsR0FBRyxDQUFDeUUsT0FBTyxFQUFFO1lBQzNCRixhQUFhLENBQUN2RSxHQUFHLENBQUN5RSxPQUFPLENBQUMsQ0FBQztVQUMvQjtRQUNKO1FBRUEsSUFBSUMsWUFBWSxHQUFHNUYsY0FBSyxDQUFDTyxXQUFXLENBQUNWLEtBQUssQ0FBQ1EsTUFBTSxFQUFFUixLQUFLLENBQUNXLE1BQU0sQ0FBQztRQUNoRSxJQUFJLENBQUNSLGNBQUssQ0FBQ0MsTUFBTSxDQUFDMkYsWUFBWSxDQUFDOUUsT0FBTyxDQUFDLEVBQUU7VUFDckNDLFVBQVUsQ0FBQ2YsY0FBSyxDQUFDNkYseUJBQXlCLENBQUNELFlBQVksQ0FBQzlFLE9BQU8sRUFBRThFLFlBQVksQ0FBQ3pFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGO01BQ0o7SUFDSixDQUFDO0VBQ0wsQ0FBQztFQUVELE1BQU0yRSxtQkFBbUIsR0FBSTVDLE9BQU8sSUFBSztJQUNyQyxJQUFJbEQsY0FBSyxDQUFDQyxNQUFNLENBQUNXLGNBQWMsQ0FBQ3NDLE9BQU8sQ0FBQy9CLEVBQUUsQ0FBQyxDQUFDLEVBQUU7TUFDMUMsSUFBSXFELE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDZjVELGNBQWMsQ0FBQ3NDLE9BQU8sQ0FBQy9CLEVBQUUsQ0FBQyxHQUFHcUQsTUFBTTtNQUNuQyxPQUFPQSxNQUFNO0lBQ2pCO0lBRUEsT0FBTzVELGNBQWMsQ0FBQ3NDLE9BQU8sQ0FBQy9CLEVBQUUsQ0FBQztFQUNyQyxDQUFDO0VBRUQsU0FBUzRFLGVBQWVBLENBQUEsRUFBRztJQUN2QixJQUFJbEcsS0FBSyxDQUFDVyxNQUFNLEVBQUU7TUFDZCxJQUFJd0YsSUFBSSxHQUFHakIsMkJBQWtCLENBQUNrQixPQUFPLENBQUNwRyxLQUFLLENBQUNXLE1BQU0sQ0FBQztNQUNuRCxJQUFJd0YsSUFBSSxFQUFFO1FBQ04sSUFBSUUsS0FBSyxHQUFHRixJQUFJLENBQUMzRixNQUFNLENBQUM2RixLQUFLO1FBRTdCLElBQUdBLEtBQUssRUFBRTtVQUNOLElBQUlBLEtBQUssQ0FBQ0MsUUFBUSxDQUFDdEcsS0FBSyxDQUFDUSxNQUFNLENBQUNjLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDNEQsMkJBQWtCLENBQUNxQixpQkFBaUIsQ0FBQ0osSUFBSSxDQUFDM0YsTUFBTSxDQUFDYyxFQUFFLEVBQUUrRSxLQUFLLENBQUM7VUFDL0Q7UUFDSjtNQUNKO0lBQ0o7RUFDSjtFQUVBLFNBQVNHLGlCQUFpQkEsQ0FBQzdELElBQUksRUFBRTtJQUM3QnVELGVBQWUsQ0FBQyxDQUFDO0lBRWpCLElBQUksQ0FBQy9GLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdUMsSUFBSSxDQUFDLEVBQUU7TUFDckIsSUFBSUQsS0FBSyxHQUFHLElBQUkrRCxjQUFLLENBQUN6RyxLQUFLLENBQUMyRSxNQUFNLEVBQUUzRSxLQUFLLENBQUNXLE1BQU0sRUFBRWdDLElBQUksQ0FBQztNQUN2RCtELG1CQUFZLENBQUNDLFNBQVMsQ0FBQ0Msa0JBQVMsQ0FBQ0MsWUFBWSxFQUFFbkUsS0FBSyxDQUFDO0lBQ3pEO0lBRUFnRSxtQkFBWSxDQUFDSSxtQ0FBbUMsQ0FBQzlHLEtBQUssQ0FBQ1EsTUFBTSxDQUFDYyxFQUFFLENBQUM7SUFDakUsS0FBSyxNQUFNc0MsS0FBSyxJQUFJL0MsTUFBTSxFQUFFO01BQ3hCNkYsbUJBQVksQ0FBQ0ksbUNBQW1DLENBQUNsRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ3RELEdBQUcsQ0FBQ0MsRUFBRSxDQUFDO0lBQ3pFO0VBQ0o7RUFFQSxTQUFTa0IsUUFBUUEsQ0FBQ3VFLFdBQVcsRUFBRUMsZUFBZSxFQUFvQjtJQUFBLElBQWxCQyxTQUFTLEdBQUF2SixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBd0osU0FBQSxHQUFBeEosU0FBQSxNQUFHLElBQUk7SUFDNUQsSUFBSXlKLE9BQU8sR0FBRyxDQUFDaEgsY0FBSyxDQUFDQyxNQUFNLENBQUM0RyxlQUFlLENBQUNJLFdBQVcsQ0FBQyxHQUFHSixlQUFlLENBQUNJLFdBQVcsR0FDbEZMLFdBQVcsS0FBSyxJQUFJLEdBQUdBLFdBQVcsQ0FBQ0ssV0FBVyxHQUFHLElBQUk7SUFDekQsSUFBSUMsY0FBYyxHQUFHLENBQUNsSCxjQUFLLENBQUNDLE1BQU0sQ0FBQzRHLGVBQWUsQ0FBQzlJLEtBQUssQ0FBQyxHQUFHZ0gsMkJBQWtCLENBQUNvQywyQkFBMkIsQ0FBQ04sZUFBZSxDQUFDOUksS0FBSyxFQUFFK0ksU0FBUyxDQUFDLEdBQ3hJLENBQUM5RyxjQUFLLENBQUNDLE1BQU0sQ0FBQzJHLFdBQVcsQ0FBQyxHQUFHN0IsMkJBQWtCLENBQUNvQywyQkFBMkIsQ0FBQ1AsV0FBVyxDQUFDN0ksS0FBSyxFQUFFK0ksU0FBUyxDQUFDLEdBQUcsSUFBSTtJQUVwSCxJQUFJLENBQUM5RyxjQUFLLENBQUNDLE1BQU0sQ0FBQytHLE9BQU8sQ0FBQyxFQUFFO01BQ3hCeEYsT0FBTyxDQUFDLENBQUM7TUFDVCxJQUFJd0YsT0FBTyxDQUFDMUQsSUFBSSxLQUFLLEtBQUssRUFBRTtRQUN4QixJQUFBOEQsc0JBQVMsRUFBQztVQUNOSixPQUFPLEVBQUVBLE9BQU87VUFDaEIzRCxTQUFTLEVBQUV4RCxLQUFLLENBQUMyRSxNQUFNO1VBQ3ZCaEUsTUFBTSxFQUFFWCxLQUFLLENBQUNXO1FBQ2xCLENBQUMsQ0FBQyxDQUFDNkcsSUFBSSxDQUFFQyxNQUFNLElBQUs7VUFDaEIsSUFBSTtZQUNBLElBQUksQ0FBQ3RILGNBQUssQ0FBQ0MsTUFBTSxDQUFDcUgsTUFBTSxDQUFDLEVBQUU7Y0FDdkJ2RCxXQUFXLENBQUNDLG1CQUFtQixDQUFDc0QsTUFBTSxDQUFDLENBQUM7Y0FDeENuSCxlQUFlLENBQUNtSCxNQUFNLENBQUM7WUFDM0I7WUFFQXRHLFVBQVUsQ0FBQzZDLE9BQU8sR0FBRyxLQUFLO1VBQzlCLENBQUMsQ0FBQyxPQUFPdEgsQ0FBQyxFQUFFO1lBQ1JnTCxPQUFPLENBQUNyQyxLQUFLLENBQUMzSSxDQUFDLENBQUM7VUFDcEI7UUFDSixDQUFDLENBQUMsQ0FBQ2lMLEtBQUssQ0FBRWpMLENBQUMsSUFBSztVQUNaLElBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDa0wsU0FBUyxLQUFLLG1CQUFtQixFQUFFO1lBQzFDekcsVUFBVSxDQUFDNkMsT0FBTyxHQUFHLEtBQUs7WUFDMUJ3QyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7VUFDM0IsQ0FBQyxNQUFNO1lBQ0hrQixPQUFPLENBQUNyQyxLQUFLLENBQUMzSSxDQUFDLENBQUM7WUFDaEJ5RCxjQUFLLENBQUMwSCxtQkFBbUIsQ0FBQ25MLENBQUMsRUFBRXNELEtBQUssQ0FBQ1csTUFBTSxDQUFDO1VBQzlDO1FBQ0osQ0FBQyxDQUFDO01BQ04sQ0FBQyxNQUFNO1FBQ0gsSUFBSVIsY0FBSyxDQUFDQyxNQUFNLENBQUMyRyxXQUFXLENBQUMsRUFBRTtVQUMzQkEsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQjtRQUVBQSxXQUFXLENBQUNJLE9BQU8sR0FBR0EsT0FBTztRQUM3QjtRQUNBVyxpQ0FBd0IsQ0FBQ0MsT0FBTyxDQUFDaEIsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUvRyxLQUFLLENBQUNXLE1BQU0sRUFDakVnQyxJQUFJLElBQUs7VUFDTixJQUFJQSxJQUFJLEVBQUU7WUFDTnVCLFdBQVcsQ0FBQ0MsbUJBQW1CLENBQUN4QixJQUFJLENBQUMsQ0FBQztZQUN0Q3JDLGVBQWUsQ0FBQ3FDLElBQUksQ0FBQztVQUN6QjtVQUVBeEIsVUFBVSxDQUFDNkMsT0FBTyxHQUFHLEtBQUs7UUFDOUIsQ0FBQyxFQUFFLE1BQU0sQ0FDVCxDQUFDLEVBQUdnRSxTQUFTLElBQUs7VUFDZDdHLFVBQVUsQ0FBQzZDLE9BQU8sR0FBRyxLQUFLO1VBQzFCd0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQztNQUNWO01BRUEsT0FBTyxJQUFJO0lBQ2YsQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDckcsY0FBSyxDQUFDQyxNQUFNLENBQUNpSCxjQUFjLENBQUMsRUFBRTtRQUMvQixJQUFJLENBQUNuQywyQkFBa0IsQ0FBQytDLFlBQVksQ0FBQ1osY0FBYyxDQUFDLEVBQUU7VUFDbERBLGNBQWMsR0FBR25DLDJCQUFrQixDQUFDZ0Qsa0JBQWtCLENBQUNiLGNBQWMsRUFBRUosU0FBUyxDQUFDO1FBQ3JGO1FBRUEsSUFBSWtCLFdBQVcsR0FBR2QsY0FBYyxDQUFDZSxRQUFRLENBQUMsQ0FBQyxDQUN0Q0MsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUM5QixJQUFJbkQsMkJBQWtCLENBQUMrQyxZQUFZLENBQUNaLGNBQWMsQ0FBQyxJQUFJLENBQUNjLFdBQVcsRUFBRTtVQUNqRSxJQUFJdEQsSUFBSSxHQUFHMUUsY0FBSyxDQUFDbUksb0JBQW9CLENBQUNqQixjQUFjLENBQUM7VUFDckQsSUFBSSxDQUFDbEgsY0FBSyxDQUFDQyxNQUFNLENBQUN5RSxJQUFJLENBQUNDLFdBQVcsQ0FBQyxFQUFFO1lBQ2pDNEIsbUJBQVksQ0FBQzZCLDhCQUE4QixDQUFDdkksS0FBSyxDQUFDVyxNQUFNLEVBQUVYLEtBQUssQ0FBQ1csTUFBTSxFQUFFWCxLQUFLLENBQUNRLE1BQU0sQ0FBQ2MsRUFBRSxFQUFFLE1BQU07Y0FDM0YsSUFBSXBELEtBQUssR0FBR3NLLGtCQUFTLENBQUNDLGFBQWEsSUFBQUMsTUFBQSxDQUFJMUksS0FBSyxDQUFDUSxNQUFNLENBQUNjLEVBQUUscUJBQWtCK0YsY0FBYyxDQUFDO2NBQ3ZGLElBQUksQ0FBQ2xILGNBQUssQ0FBQ0MsTUFBTSxDQUFDbEMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLElBQUl5SyxHQUFHLEdBQUd6SyxLQUFLO2dCQUNmLElBQUkwQyxNQUFNLEtBQUssWUFBWSxJQUFJVCxjQUFLLENBQUNDLE1BQU0sQ0FBQ2xDLEtBQUssQ0FBQ21HLEdBQUcsQ0FBQyxFQUFFO2tCQUNwRHNFLEdBQUcsR0FBRyxDQUFDLENBQUM7a0JBQ1JBLEdBQUcsQ0FBQ3RFLEdBQUcsR0FBR25HLEtBQUs7Z0JBQ25CO2dCQUVBZ0csV0FBVyxDQUFDQyxtQkFBbUIsQ0FBQ3dFLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQ3JJLGVBQWUsQ0FBQ3FJLEdBQUcsQ0FBQztjQUN4QjtZQUNKLENBQUMsQ0FBQztVQUNOO1FBQ0osQ0FBQyxNQUFNO1VBQ0gsSUFBSUEsR0FBRyxHQUFHUixXQUFXLEdBQUdqRCwyQkFBa0IsQ0FBQzBELHNCQUFzQixDQUFDdkIsY0FBYyxFQUFFSixTQUFTLENBQUMsR0FBR0ksY0FBYztVQUM3RyxJQUFJekcsTUFBTSxLQUFLLFlBQVksSUFBSVQsY0FBSyxDQUFDQyxNQUFNLENBQUNpSCxjQUFjLENBQUNoRCxHQUFHLENBQUMsRUFBRTtZQUM3RHNFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDUkEsR0FBRyxDQUFDdEUsR0FBRyxHQUFHZ0QsY0FBYztVQUM1QjtVQUVBbkQsV0FBVyxDQUFDQyxtQkFBbUIsQ0FBQ3dFLEdBQUcsQ0FBQyxDQUFDO1VBQ3JDckksZUFBZSxDQUFDcUksR0FBRyxDQUFDO1FBQ3hCO01BQ0osQ0FBQyxNQUFNO1FBQ0h6QyxlQUFlLENBQUMsQ0FBQztNQUNyQjtNQUVBL0UsVUFBVSxDQUFDNkMsT0FBTyxHQUFHLEtBQUs7TUFDMUIsT0FBTyxLQUFLO0lBQ2hCO0VBQ0o7RUFFQWxFLGNBQUssQ0FBQytJLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLE9BQU8sTUFBTTtNQUNUN0ksS0FBSyxDQUFDMkUsTUFBTSxDQUFDdEQsR0FBRyxHQUFHLElBQUk7SUFDM0IsQ0FBQztFQUNMLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTnZCLGNBQUssQ0FBQytJLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCN0ksS0FBSyxDQUFDMkUsTUFBTSxDQUFDdEQsR0FBRyxHQUFHQSxHQUFHLENBQUMsQ0FBQztFQUM1QixDQUFDLENBQUM7RUFFRnZCLGNBQUssQ0FBQytJLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCN0ksS0FBSyxDQUFDMkUsTUFBTSxDQUFDdEQsR0FBRyxHQUFHQSxHQUFHLENBQUMsQ0FBQztJQUN4QixJQUFJeUgsbUJBQW1CLEdBQUczSSxjQUFLLENBQUNDLE1BQU0sQ0FBQ0ksTUFBTSxDQUFDc0ksbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR3RJLE1BQU0sQ0FBQ3NJLG1CQUFtQjtJQUNwR0EsbUJBQW1CLENBQUNDLGFBQWEsR0FBRzVJLGNBQUssQ0FBQ0MsTUFBTSxDQUFDMEksbUJBQW1CLENBQUNDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBR0QsbUJBQW1CLENBQUNDLGFBQWE7SUFFNUgsSUFBSUMsWUFBWSxHQUFHN0ksY0FBSyxDQUFDOEkscUJBQXFCLENBQUN6SSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQztJQUM1RSxJQUFJd0ksWUFBWSxLQUFLLElBQUksSUFBSUEsWUFBWSxLQUFLLElBQUksRUFBRTtNQUNoRCxJQUFJRSxZQUFZLEdBQUc7UUFDZkMsU0FBUyxFQUFFdkMsa0JBQVMsQ0FBQ3dDLGNBQWM7UUFDbkNDLE9BQU8sRUFBRSxDQUNMO1VBQ0lDLFVBQVUsRUFBRTtRQUNoQixDQUFDO01BRVQsQ0FBQztNQUVEUixtQkFBbUIsQ0FBQ0MsYUFBYSxDQUFDeEwsSUFBSSxDQUFDMkwsWUFBWSxDQUFDO0lBQ3hELENBQUMsTUFBTTtNQUNIMUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QjtJQUVBRSxtQkFBWSxDQUFDNkMsZ0JBQWdCLENBQUNULG1CQUFtQixFQUFFOUksS0FBSyxDQUFDMkUsTUFBTSxFQUFFM0UsS0FBSyxDQUFDVyxNQUFNLENBQUM7SUFDOUUrRixtQkFBWSxDQUFDOEMsc0JBQXNCLENBQUN4SixLQUFLLENBQUNXLE1BQU0sRUFBRUgsTUFBTSxDQUFDO0lBQ3pEQyxTQUFTLENBQUNELE1BQU0sQ0FBQztJQUVqQixLQUFLLE1BQU1vRCxLQUFLLElBQUkvQyxNQUFNLEVBQUU7TUFDeEIsSUFBSThELE1BQU0sR0FBR2YsS0FBSyxDQUFDZSxNQUFNO01BQ3pCLElBQUksQ0FBQ3hFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdUUsTUFBTSxDQUFDLEVBQUU7UUFDdkJBLE1BQU0sQ0FBQ3RELEdBQUcsQ0FBQ29JLGtCQUFrQixDQUFDLENBQUM7TUFDbkM7SUFDSjtJQUVBdEksVUFBVSxDQUFDNkMsT0FBTyxHQUFHLEtBQUs7SUFDMUIsSUFBSXRCLEtBQUssR0FBRyxJQUFJK0QsY0FBSyxDQUFDekcsS0FBSyxDQUFDMkUsTUFBTSxFQUFFM0UsS0FBSyxDQUFDVyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQ3ZEK0YsbUJBQVksQ0FBQ0MsU0FBUyxDQUFDQyxrQkFBUyxDQUFDd0MsY0FBYyxFQUFFMUcsS0FBSyxDQUFDO0lBRXZELE9BQU8sTUFBTTtNQUNUZ0UsbUJBQVksQ0FBQ2dELDRCQUE0QixDQUFDMUosS0FBSyxDQUFDMkUsTUFBTSxDQUFDO0lBQzNELENBQUM7RUFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU43RSxjQUFLLENBQUMrSSxTQUFTLENBQUMsTUFBTTtJQUNsQixJQUFJLENBQUMxSSxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDUSxNQUFNLENBQUMsSUFBSSxDQUFDTCxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDQyxNQUFNLENBQUMsRUFBRTtNQUM1RGlFLFdBQVcsQ0FBQ2xFLEtBQUssQ0FBQ0MsTUFBTSxDQUFDO0lBQzdCO0VBQ0osQ0FBQyxFQUFFLENBQUNELEtBQUssQ0FBQ1EsTUFBTSxFQUFFUixLQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0VBRWhDSCxjQUFLLENBQUMrSSxTQUFTLENBQUMsTUFBTTtJQUNsQixJQUFJLENBQUMxSSxjQUFLLENBQUNDLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLEVBQUU7TUFDN0JtRyxpQkFBaUIsQ0FBQ25HLFlBQVksQ0FBQztJQUNuQztFQUNKLENBQUMsRUFBRSxDQUFDQSxZQUFZLENBQUMsQ0FBQztFQUVsQixNQUFNcUQsZ0JBQWdCLEdBQUlpRyxHQUFHLElBQUs7SUFDOUIsSUFBSTlJLE1BQU0sR0FBRyxFQUFFO0lBQ2YsS0FBSyxNQUFNK0ksT0FBTyxJQUFJRCxHQUFHLENBQUNFLFFBQVEsRUFBRTtNQUNoQyxLQUFLLE1BQU1yRyxTQUFTLElBQUlvRyxPQUFPLENBQUNyRyxVQUFVLEVBQUU7UUFDeEMsSUFBSUMsU0FBUyxDQUFDQyxJQUFJLEtBQUssYUFBYSxFQUFFO1VBQ2xDLEtBQUssTUFBTXFHLFFBQVEsSUFBSXRHLFNBQVMsQ0FBQ0QsVUFBVSxFQUFFO1lBQ3pDMUMsTUFBTSxHQUFHQSxNQUFNLENBQUM2SCxNQUFNLENBQUNvQixRQUFRLENBQUNqSixNQUFNLENBQUM7VUFDM0M7UUFDSjtNQUNKO0lBQ0o7SUFFQSxPQUFPQSxNQUFNO0VBQ2pCLENBQUM7RUFFRCxNQUFNc0QsbUJBQW1CLEdBQUl4QixJQUFJLElBQUs7SUFDbEMsSUFBSW9ILFVBQVUsR0FBRyxJQUFJO0lBRXJCLElBQUluSixNQUFNLEtBQUssWUFBWSxFQUFFO01BQ3pCbUosVUFBVSxHQUFHLENBQUMsQ0FBQztNQUVmLElBQUk1SixjQUFLLENBQUNDLE1BQU0sQ0FBQ3VDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sSUFBSTtNQUNmO01BRUEsSUFBSTBCLEdBQUcsR0FBRzFCLElBQUksQ0FBQzBCLEdBQUc7TUFDbEIsSUFBSSxDQUFDbEUsY0FBSyxDQUFDQyxNQUFNLENBQUNpRSxHQUFHLENBQUMsRUFBRTtRQUNwQixJQUFJb0IsVUFBVSxHQUFHekksTUFBTSxDQUFDMEksbUJBQW1CLENBQUNyQixHQUFHLENBQUM7UUFFaEQsS0FBSyxJQUFJaEcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHb0gsVUFBVSxDQUFDOUgsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtVQUN4QyxJQUFJc0gsUUFBUSxHQUFHRixVQUFVLENBQUNwSCxDQUFDLENBQUM7VUFDNUIsSUFBSTJMLE1BQU0sR0FBR3JFLFFBQVEsQ0FBQ3NFLEtBQUssQ0FBQyxHQUFHLENBQUM7VUFDaEMsSUFBSUMsRUFBRSxHQUFHSCxVQUFVO1VBRW5CLEtBQUssSUFBSXpHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzBHLE1BQU0sQ0FBQ3JNLE1BQU0sRUFBRTJGLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUk2RyxLQUFLLEdBQUdILE1BQU0sQ0FBQzFHLENBQUMsQ0FBQztZQUNyQixJQUFJQSxDQUFDLEdBQUcwRyxNQUFNLENBQUNyTSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2NBQ3ZCLElBQUl3QyxjQUFLLENBQUNDLE1BQU0sQ0FBQzhKLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekJELEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2NBQ2xCO2NBRUFELEVBQUUsR0FBR0EsRUFBRSxDQUFDQyxLQUFLLENBQUM7WUFDbEIsQ0FBQyxNQUFNO2NBQ0hELEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEdBQUc5RixHQUFHLENBQUNzQixRQUFRLENBQUM7WUFDN0I7VUFDSjtRQUNKO01BQ0o7SUFDSixDQUFDLE1BQU07TUFDSG9FLFVBQVUsR0FBR3BILElBQUk7SUFDckI7SUFFQSxPQUFPb0gsVUFBVTtFQUNyQixDQUFDO0VBRUQsU0FBU3BJLE9BQU9BLENBQUEsRUFBRztJQUNmdUQsMkJBQWtCLENBQUNrRixpQkFBaUIsQ0FBQyxLQUFLLENBQUM7SUFDM0MsS0FBSyxJQUFJL0wsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd0MsTUFBTSxDQUFDbEQsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNwQyxJQUFJdUYsS0FBSyxHQUFHL0MsTUFBTSxDQUFDeEMsQ0FBQyxDQUFDO01BQ3JCdUYsS0FBSyxDQUFDZSxNQUFNLENBQUN0RCxHQUFHLENBQUNLLEtBQUssQ0FBQyxDQUFDO0lBQzVCO0lBRUF6QixNQUFNLENBQUMrRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksQ0FBQzdELGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNxSyxrQkFBa0IsQ0FBQyxFQUFFO01BQ3pDckssS0FBSyxDQUFDcUssa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEM7SUFFQSxJQUFJLENBQUNsSyxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDc0ssa0JBQWtCLENBQUMsRUFBRTtNQUN6Q3RLLEtBQUssQ0FBQ3NLLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDO0lBRUFwRiwyQkFBa0IsQ0FBQ2tGLGlCQUFpQixDQUFDLElBQUksQ0FBQztFQUM5QztFQUVBLFNBQVN2SCxVQUFVQSxDQUFDRixJQUFJLEVBQUU7SUFDdEIsSUFBSSxDQUFDeEMsY0FBSyxDQUFDQyxNQUFNLENBQUN1QyxJQUFJLENBQUMsRUFBRTtNQUNyQixLQUFLLE1BQU00SCxHQUFHLElBQUl2TixNQUFNLENBQUNDLElBQUksQ0FBQzBGLElBQUksQ0FBQyxFQUFFO1FBQ2pDLElBQUlpQixLQUFLLEdBQUdYLFFBQVEsQ0FBQ3NILEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUNwSyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3dELEtBQUssQ0FBQyxFQUFFO1VBQ3RCQSxLQUFLLENBQUNlLE1BQU0sQ0FBQ3RELEdBQUcsQ0FBQ25ELEtBQUssR0FBRzBGLEtBQUssQ0FBQ2UsTUFBTSxDQUFDdEQsR0FBRyxDQUFDMkQsVUFBVSxDQUFDckMsSUFBSSxDQUFDNEgsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ3pFO01BQ0o7SUFDSjtFQUNKO0VBRUEsU0FBU3JHLFdBQVdBLENBQUN2QixJQUFJLEVBQUU7SUFDdkIsSUFBSTZILFlBQVksR0FBR2xHLElBQUksQ0FBQ0MsS0FBSyxDQUFDRCxJQUFJLENBQUNFLFNBQVMsQ0FBQzdCLElBQUksQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSXRFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dDLE1BQU0sQ0FBQ2xELE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7TUFDcEMsSUFBSXVGLEtBQUssR0FBRy9DLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQztNQUNyQixJQUFJd0csSUFBSSxHQUFHM0MsWUFBWSxDQUFDMEIsS0FBSyxDQUFDdEMsRUFBRSxFQUFFa0osWUFBWSxDQUFDO01BQy9DLElBQUlDLFdBQVcsR0FBRzVGLElBQUksQ0FBQ0MsV0FBVyxDQUFDRCxJQUFJLENBQUNFLGFBQWEsQ0FBQztNQUN0RCxJQUFJLENBQUM1RSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3dELEtBQUssQ0FBQ2UsTUFBTSxDQUFDdEQsR0FBRyxDQUFDLEVBQUU7UUFDakN3RCxJQUFJLENBQUNDLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDRSxhQUFhLENBQUMsR0FBR25CLEtBQUssQ0FBQ2UsTUFBTSxDQUFDdEQsR0FBRyxDQUFDMkQsVUFBVSxDQUFDeUYsV0FBVyxFQUFFLElBQUksQ0FBQztNQUN6RixDQUFDLE1BQU07UUFDSC9DLE9BQU8sQ0FBQ3JDLEtBQUssQ0FBQyxrREFBa0QsR0FBR3pCLEtBQUssQ0FBQ3RDLEVBQUUsQ0FBQztNQUNoRjtJQUNKO0lBRUFyQixNQUFNLENBQUMrRCxPQUFPLEdBQUd3RyxZQUFZO0lBQzdCLElBQUksQ0FBQ3JLLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUMwSyxrQkFBa0IsQ0FBQyxFQUFFO01BQ3pDMUssS0FBSyxDQUFDMEssa0JBQWtCLENBQUNGLFlBQVksQ0FBQztJQUMxQzs7SUFFQTtJQUNJO0lBQ0o7RUFDSjtFQUVBMUssY0FBSyxDQUFDK0ksU0FBUyxDQUFDLE1BQU07SUFDbEIsSUFBSSxDQUFDMUksY0FBSyxDQUFDQyxNQUFNLENBQUNKLEtBQUssQ0FBQ0MsTUFBTSxDQUFDLEVBQUU7TUFDN0JpRSxXQUFXLENBQUNsRSxLQUFLLENBQUNDLE1BQU0sQ0FBQztJQUM3QjtFQUNKLENBQUMsRUFBRSxDQUFDRCxLQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0VBRWxCLE1BQU1nRCxRQUFRLEdBQUkzQixFQUFFLElBQUs7SUFDckIsS0FBSyxJQUFJakQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd0MsTUFBTSxDQUFDbEQsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNwQyxJQUFJd0MsTUFBTSxDQUFDeEMsQ0FBQyxDQUFDLENBQUNpRCxFQUFFLEtBQUtBLEVBQUUsRUFBRTtRQUNyQixPQUFPVCxNQUFNLENBQUN4QyxDQUFDLENBQUM7TUFDcEI7SUFDSjtJQUVBLE9BQU8sSUFBSTtFQUNmLENBQUM7RUFFRCxNQUFNa0UsV0FBVyxHQUFJakIsRUFBRSxJQUFLO0lBQ3hCLEtBQUssSUFBSWpELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dDLE1BQU0sQ0FBQ2xELE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7TUFDcEMsSUFBSXdDLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDaUQsRUFBRSxLQUFLQSxFQUFFLEVBQUU7UUFDckJULE1BQU0sQ0FBQzhKLE1BQU0sQ0FBQ3RNLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkI7SUFDSjtFQUNKLENBQUM7RUFFRCxTQUFTMkUsZ0JBQWdCQSxDQUFDWSxLQUFLLEVBQUViLE9BQU8sRUFBdUI7SUFBQSxJQUFyQjZILFlBQVksR0FBQWxOLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF3SixTQUFBLEdBQUF4SixTQUFBLE1BQUcsSUFBSTtJQUV6RCxJQUFJLENBQUN5QyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3dELEtBQUssQ0FBQ3ZCLFFBQVEsQ0FBQyxFQUFFO01BQy9CLElBQUl3SSxlQUFlLEdBQUc5SCxPQUFPO01BQzdCLEtBQUssSUFBSTFFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dDLE1BQU0sQ0FBQ2xELE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsSUFBSXdDLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQyxLQUFLdUYsS0FBSyxJQUFJL0MsTUFBTSxDQUFDeEMsQ0FBQyxDQUFDLENBQUNnRSxRQUFRLEtBQUt1QixLQUFLLENBQUN2QixRQUFRLEVBQUU7VUFDOUR3SSxlQUFlLEdBQUdBLGVBQWUsSUFBSSxFQUFFMUssY0FBSyxDQUFDQyxNQUFNLENBQUNTLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDZ0gsS0FBSyxDQUFDLElBQUl4RSxNQUFNLENBQUN4QyxDQUFDLENBQUMsQ0FBQ2dILEtBQUssQ0FBQzFILE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDekc7TUFDSjtNQUVBcUQsaUJBQWlCLENBQUM0QyxLQUFLLENBQUN2QixRQUFRLENBQUMsR0FBR3dJLGVBQWU7SUFDdkQ7SUFFQSxJQUFJRCxZQUFZLElBQUksQ0FBQ3pLLGNBQUssQ0FBQ0MsTUFBTSxDQUFDVSxzQkFBc0IsQ0FBQ2tELE9BQU8sQ0FBQyxJQUFJa0IsMkJBQWtCLENBQUNDLG9CQUFvQixDQUFDLENBQUMsRUFBRTtNQUM1R3JFLHNCQUFzQixDQUFDa0QsT0FBTyxDQUFDaEQsaUJBQWlCLENBQUM7SUFDckQ7SUFFQSxPQUFPQSxpQkFBaUI7RUFDNUI7RUFFQSxNQUFNOEosYUFBYSxHQUFHQSxDQUFDbEgsS0FBSyxFQUFFdEMsRUFBRSxFQUFFcEQsS0FBSyxLQUFLO0lBQ3hDLElBQUlpRCxVQUFVLENBQUM2QyxPQUFPLEtBQUssS0FBSyxFQUFFO01BQzlCSixLQUFLLENBQUN5QixLQUFLLEdBQUcsSUFBSTtNQUNsQixJQUFJdEMsT0FBTyxHQUFHYSxLQUFLLENBQUNlLE1BQU0sQ0FBQ3RELEdBQUcsQ0FBQ3VELFFBQVEsQ0FBQW5ILGFBQUEsQ0FBQUEsYUFBQSxLQUNoQ3dDLE1BQU0sQ0FBQytELE9BQU87UUFDakIsQ0FBQzFDLEVBQUUsR0FBR3BEO01BQUssSUFDWkEsS0FBSyxDQUFDLEtBQUssS0FBSztNQUNuQjhFLGdCQUFnQixDQUFDWSxLQUFLLEVBQUViLE9BQU8sQ0FBQztNQUVoQyxPQUFPQSxPQUFPO0lBQ2xCO0lBRUEsT0FBTyxJQUFJO0VBQ2YsQ0FBQztFQUVELE1BQU1iLFlBQVksR0FBR0EsQ0FBQ1osRUFBRSxFQUFFeUosSUFBSSxLQUFLO0lBQy9CLElBQUlsRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSW1HLGFBQWEsR0FBR0QsSUFBSTtJQUN4QixJQUFJNUssY0FBSyxDQUFDQyxNQUFNLENBQUMySyxJQUFJLENBQUMsRUFBRTtNQUNwQkMsYUFBYSxHQUFHL0ssTUFBTSxDQUFDK0QsT0FBTztJQUNsQztJQUVBLElBQUksQ0FBQzdELGNBQUssQ0FBQ0MsTUFBTSxDQUFDNEssYUFBYSxDQUFDLEVBQUU7TUFDOUIsSUFBSWhCLE1BQU0sR0FBRzFJLEVBQUUsQ0FBQzJJLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDMUIsSUFBSUQsTUFBTSxDQUFDck0sTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNyQmtILElBQUksQ0FBQ0MsV0FBVyxHQUFHa0csYUFBYTtRQUNoQ25HLElBQUksQ0FBQ0UsYUFBYSxHQUFHaUYsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNsQyxDQUFDLE1BQU0sSUFBSUEsTUFBTSxDQUFDck0sTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQixJQUFJdU0sRUFBRSxHQUFHYyxhQUFhO1FBQ3RCLEtBQUssSUFBSTNNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzJMLE1BQU0sQ0FBQ3JNLE1BQU0sR0FBRyxDQUFDLEVBQUVVLENBQUMsRUFBRSxFQUFFO1VBQ3hDLElBQUksQ0FBQzhCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDOEosRUFBRSxDQUFDRixNQUFNLENBQUMzTCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUI2TCxFQUFFLEdBQUdBLEVBQUUsQ0FBQ0YsTUFBTSxDQUFDM0wsQ0FBQyxDQUFDLENBQUM7VUFDdEIsQ0FBQyxNQUFNO1lBQ0g2TCxFQUFFLENBQUNGLE1BQU0sQ0FBQzNMLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCNkwsRUFBRSxHQUFHQSxFQUFFLENBQUNGLE1BQU0sQ0FBQzNMLENBQUMsQ0FBQyxDQUFDO1VBQ3RCO1FBQ0o7UUFFQSxJQUFJLENBQUM4QixjQUFLLENBQUNDLE1BQU0sQ0FBQzhKLEVBQUUsQ0FBQyxFQUFFO1VBQ25CckYsSUFBSSxDQUFDQyxXQUFXLEdBQUdvRixFQUFFO1VBQ3JCckYsSUFBSSxDQUFDRSxhQUFhLEdBQUdpRixNQUFNLENBQUNBLE1BQU0sQ0FBQ3JNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEQ7TUFDSjtJQUNKO0lBRUEsT0FBT2tILElBQUk7RUFDZixDQUFDO0VBRUQsTUFBTWhELGNBQWMsR0FBR0EsQ0FBQ1AsRUFBRSxFQUFFcEQsS0FBSyxLQUFLO0lBQ2xDLElBQUkyRyxJQUFJLEdBQUczQyxZQUFZLENBQUNaLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFFakMsSUFBSSxDQUFDbkIsY0FBSyxDQUFDQyxNQUFNLENBQUN5RSxJQUFJLENBQUNDLFdBQVcsQ0FBQyxJQUFJLENBQUMzRSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3lFLElBQUksQ0FBQ0UsYUFBYSxDQUFDLElBQUk1RCxVQUFVLENBQUM2QyxPQUFPLEtBQUssS0FBSyxFQUFFO01BQ3RHYSxJQUFJLENBQUNDLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDRSxhQUFhLENBQUMsR0FBRzdHLEtBQUs7TUFDNUMsSUFBSTZFLE9BQU8sR0FBRyxLQUFLO01BQ25CLElBQUlhLEtBQUssR0FBR1gsUUFBUSxDQUFDM0IsRUFBRSxDQUFDO01BRXhCLElBQUksQ0FBQ25CLGNBQUssQ0FBQ0MsTUFBTSxDQUFDd0QsS0FBSyxDQUFDLEVBQUU7UUFDdEJiLE9BQU8sR0FBRytILGFBQWEsQ0FBQ2xILEtBQUssRUFBRXRDLEVBQUUsRUFBRXBELEtBQUssQ0FBQztRQUN6QyxLQUFLLElBQUlHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dDLE1BQU0sQ0FBQ2xELE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7VUFDcEMsSUFBSTRNLFVBQVUsR0FBR3BLLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQztVQUMxQixJQUFJNk0sZUFBZSxHQUFHRCxVQUFVLENBQUN0RyxNQUFNLENBQUN0RCxHQUFHLENBQUM4SixrQkFBa0IsQ0FBQyxDQUFDO1VBQ2hFLElBQUksQ0FBQ2hMLGNBQUssQ0FBQ0MsTUFBTSxDQUFDOEssZUFBZSxDQUFDLEVBQUU7WUFDaEMsSUFBSXRILEtBQUssS0FBS3FILFVBQVUsSUFBSUMsZUFBZSxLQUFLdEgsS0FBSyxDQUFDZSxNQUFNLENBQUN0RCxHQUFHLENBQUM4SixrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7Y0FDbkYsSUFBSUMsWUFBWSxHQUFHSCxVQUFVLENBQUN0RyxNQUFNLENBQUN0RCxHQUFHLENBQUNDLEVBQUU7Y0FDM0MsSUFBSStKLGFBQWEsR0FBR25KLFlBQVksQ0FBQ2tKLFlBQVksRUFBRSxJQUFJLENBQUM7Y0FFcEQsSUFBSSxDQUFDakwsY0FBSyxDQUFDQyxNQUFNLENBQUNpTCxhQUFhLENBQUMsRUFBRTtnQkFDOUIsSUFBSUMsYUFBYSxHQUFHRCxhQUFhLENBQUN2RyxXQUFXLENBQUN1RyxhQUFhLENBQUN0RyxhQUFhLENBQUM7Z0JBQzFFK0YsYUFBYSxDQUFDRyxVQUFVLEVBQUVHLFlBQVksRUFBRUUsYUFBYSxDQUFDO2NBQzFEO1lBQ0o7VUFDSjtRQUNKO01BQ0o7TUFFQSxJQUFJLENBQUNuTCxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDcUssa0JBQWtCLENBQUMsRUFBRTtRQUN6Q3JLLEtBQUssQ0FBQ3FLLGtCQUFrQixDQUFDdEgsT0FBTyxHQUFHLElBQUksR0FBRzlDLE1BQU0sQ0FBQytELE9BQU8sRUFBRTFDLEVBQUUsRUFBRXBELEtBQUssQ0FBQztNQUN4RTtNQUVBLElBQUksQ0FBQ2lDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNzSyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3pDdEssS0FBSyxDQUFDc0ssa0JBQWtCLENBQUNySyxNQUFNLENBQUMrRCxPQUFPLEVBQUUxQyxFQUFFLEVBQUVwRCxLQUFLLENBQUM7TUFDdkQ7SUFDSjtJQUVBZ0gsMkJBQWtCLENBQUNrRixpQkFBaUIsQ0FBQyxLQUFLLENBQUM7SUFDM0MxRCxtQkFBWSxDQUFDSSxtQ0FBbUMsQ0FBQzlHLEtBQUssQ0FBQ1EsTUFBTSxDQUFDYyxFQUFFLENBQUM7SUFFakUsSUFBSW9CLEtBQUssR0FBRyxJQUFJK0QsY0FBSyxDQUFDekcsS0FBSyxDQUFDMkUsTUFBTSxFQUFFM0UsS0FBSyxDQUFDVyxNQUFNLEVBQUVWLE1BQU0sQ0FBQytELE9BQU8sQ0FBQztJQUNqRTBDLG1CQUFZLENBQUNDLFNBQVMsQ0FBQ0Msa0JBQVMsQ0FBQzJFLFlBQVksRUFBRTdJLEtBQUssQ0FBQztFQUN6RCxDQUFDO0VBRUQsTUFBTTBDLGFBQWEsR0FBR0EsQ0FBQzlELEVBQUUsRUFBRStELEtBQUssS0FBSztJQUNqQyxJQUFJekIsS0FBSyxHQUFHWCxRQUFRLENBQUMzQixFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDbkIsY0FBSyxDQUFDQyxNQUFNLENBQUN3RCxLQUFLLENBQUMsRUFBRTtNQUN0QkEsS0FBSyxDQUFDeUIsS0FBSyxHQUFHQSxLQUFLO0lBQ3ZCO0VBQ0osQ0FBQztFQUVELE1BQU1sRCxRQUFRLEdBQUdBLENBQUNiLEVBQUUsRUFBRXFELE1BQU0sRUFBRXRDLFFBQVEsRUFBRUMsZUFBZSxLQUFLO0lBQ3hELElBQUlzQixLQUFLLEdBQUdYLFFBQVEsQ0FBQzNCLEVBQUUsQ0FBQztJQUN4QixJQUFJK0QsS0FBSyxHQUFHLElBQUk7SUFFaEIsSUFBSSxDQUFDbEYsY0FBSyxDQUFDQyxNQUFNLENBQUN3RCxLQUFLLENBQUMsRUFBRTtNQUN0QnlCLEtBQUssR0FBR3pCLEtBQUssQ0FBQ3lCLEtBQUs7TUFDbkI5QyxXQUFXLENBQUNqQixFQUFFLENBQUM7SUFDbkI7SUFFQXNDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVkEsS0FBSyxDQUFDdEMsRUFBRSxHQUFHQSxFQUFFO0lBQ2JzQyxLQUFLLENBQUNlLE1BQU0sR0FBR0EsTUFBTTtJQUNyQmYsS0FBSyxDQUFDeUIsS0FBSyxHQUFHQSxLQUFLO0lBQ25CekIsS0FBSyxDQUFDdEIsZUFBZSxHQUFHQSxlQUFlO0lBQ3ZDc0IsS0FBSyxDQUFDdkIsUUFBUSxHQUFHQSxRQUFRO0lBQ3pCeEIsTUFBTSxDQUFDdEQsSUFBSSxDQUFDcUcsS0FBSyxDQUFDO0lBRWxCLElBQUkzRCxNQUFNLENBQUMrRCxPQUFPLEVBQUU7TUFDaEJFLFdBQVcsQ0FBQ2pFLE1BQU0sQ0FBQytELE9BQU8sQ0FBQztJQUMvQjtJQUVBLE9BQU9KLEtBQUs7RUFDaEIsQ0FBQztFQUVELE1BQU05QixzQkFBc0IsR0FBR0EsQ0FBQ04sSUFBSSxFQUFFTyxPQUFPLEVBQUV5SixTQUFTLEtBQUs7SUFDekQsSUFBRyxPQUFPQSxTQUFTLEtBQUssUUFBUSxLQUFLckwsY0FBSyxDQUFDQyxNQUFNLENBQUMyQixPQUFPLENBQUMsSUFBSUEsT0FBTyxDQUFDcEUsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ2pGLE9BQU82TixTQUFTO0lBQ3BCO0lBRUEsSUFBSUMsYUFBYSxHQUFHLElBQUk7SUFFeEIsS0FBSyxJQUFJcE4sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHMEQsT0FBTyxDQUFDcEUsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNyQyxJQUFJMEQsT0FBTyxDQUFDMUQsQ0FBQyxDQUFDLENBQUNpRCxFQUFFLEtBQUtrSyxTQUFTLEVBQUU7UUFDN0JDLGFBQWEsR0FBRzFKLE9BQU8sQ0FBQzFELENBQUMsQ0FBQztNQUM5QjtJQUNKO0lBRUF3RCxjQUFjLENBQUNMLElBQUksRUFBRWlLLGFBQWEsQ0FBQztJQUNuQyxPQUFPQSxhQUFhO0VBQ3hCLENBQUM7RUFFRCxNQUFNaEssV0FBVyxHQUFHQSxDQUFDRCxJQUFJLEVBQUV0RCxLQUFLLEtBQUs7SUFDakM4QixLQUFLLENBQUNxSyxrQkFBa0IsQ0FBQTVNLGFBQUEsQ0FBQUEsYUFBQSxLQUNqQndDLE1BQU0sQ0FBQytELE9BQU87TUFDakIsQ0FBQ3hDLElBQUksR0FBR3REO0lBQUssRUFDaEIsQ0FBQztJQUVGLElBQUc4QixLQUFLLENBQUNzSyxrQkFBa0IsRUFBRTtNQUN6QnRLLEtBQUssQ0FBQ3NLLGtCQUFrQixDQUFBN00sYUFBQSxDQUFBQSxhQUFBLEtBQ2pCd0MsTUFBTSxDQUFDK0QsT0FBTztRQUNqQixDQUFDeEMsSUFBSSxHQUFHdEQ7TUFBSyxFQUNoQixDQUFDO0lBQ047RUFDSixDQUFDO0VBRUQsU0FBU3dOLE1BQU1BLENBQUNDLElBQUksRUFBRTtJQUNsQixPQUNLeEwsY0FBSyxDQUFDQyxNQUFNLENBQUN1TCxJQUFJLENBQUN2SSxRQUFRLENBQUMsSUFBSXVJLElBQUksQ0FBQ3ZJLFFBQVEsQ0FBQ3pGLE1BQU0sS0FBSyxDQUFDLEdBQ3RELElBQUksZ0JBRUpoQyxNQUFBLENBQUFpQixPQUFBLENBQUFnUCxhQUFBLGNBRVFELElBQUksQ0FBQ3ZJLFFBQVEsQ0FBQ2lCLEdBQUcsQ0FBRWhCLE9BQU8sSUFBSztNQUMzQixJQUFJbEQsY0FBSyxDQUFDQyxNQUFNLENBQUNpRCxPQUFPLENBQUMvQixFQUFFLENBQUMsRUFBRTtRQUMxQitCLE9BQU8sQ0FBQy9CLEVBQUUsR0FBR0YsY0FBYyxHQUFHLGVBQWU7TUFDakQ7TUFFQSxvQkFBT3pGLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQWdQLGFBQUE7UUFBS3JCLEdBQUcsRUFBRW5KLGNBQWM7TUFBRyxnQkFDOUJ6RixNQUFBLENBQUFpQixPQUFBLENBQUFnUCxhQUFBLENBQUM1UCxRQUFBLENBQUFZLE9BQU87UUFBQ2lQLFVBQVUsRUFBRTdMLEtBQUssQ0FBQzZMLFVBQVc7UUFDN0JyTCxNQUFNLEVBQUU2QyxPQUFRO1FBQ2hCeUksUUFBUSxFQUFFOUwsS0FBSyxDQUFDOEwsUUFBUztRQUN6Qm5ILE1BQU0sRUFBRXNCLG1CQUFtQixDQUFDNUMsT0FBTyxDQUFFO1FBQ3JDc0ksSUFBSSxFQUFFQSxDQUFBLEtBQU07VUFDUixPQUFPLENBQUN4TCxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDMkUsTUFBTSxDQUFDdEQsR0FBRyxDQUFDLEdBQUdyQixLQUFLLENBQUMyRSxNQUFNLENBQUN0RCxHQUFHLEdBQUdBLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLENBQUU7UUFDRlYsTUFBTSxFQUFFWCxLQUFLLENBQUNXLE1BQU87UUFDckJWLE1BQU0sRUFBRUEsTUFBTSxDQUFDK0Q7TUFBUSxDQUMvQixDQUNBLENBQUM7SUFDVixDQUFDLENBRUosQ0FBQztFQUVsQjtFQUVBLE9BQ0kvQyxPQUFPLGlCQUNQdEYsTUFBQSxDQUFBaUIsT0FBQSxDQUFBZ1AsYUFBQTtJQUFLRyxTQUFTLEVBQUUvTCxLQUFLLENBQUMrTCxTQUFVO0lBQUN6SyxFQUFFLEVBQUV0QixLQUFLLENBQUNRLE1BQU0sQ0FBQ2MsRUFBRztJQUFDMEssS0FBSyxFQUN2RGhNLEtBQUssQ0FBQytMLFNBQVMsS0FBSyxhQUFhLEdBQzdCNUwsY0FBSyxDQUFDOEwsV0FBVyxDQUFDO01BQ2RDLE9BQU8sRUFBRSxRQUFRO01BQ2pCNU0sTUFBTSxFQUFFLEdBQUc7TUFDWDZNLFFBQVEsRUFBRSxNQUFNO01BQ2hCQyxTQUFTLEVBQUU7SUFDZixDQUFDLEVBQUVwTSxLQUFLLENBQUNRLE1BQU0sQ0FBQyxHQUVoQjtFQUNQLEdBRU8sQ0FBQ0wsY0FBSyxDQUFDQyxNQUFNLENBQUNKLEtBQUssQ0FBQ1EsTUFBTSxDQUFDYyxFQUFFLENBQUMsR0FDMUJvSyxNQUFNLENBQUMxTCxLQUFLLENBQUNRLE1BQU0sQ0FBQyxnQkFFcEI3RSxNQUFBLENBQUFpQixPQUFBLENBQUFnUCxhQUFBLGNBQUssK0JBQWtDLENBRTlDLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDTCxJQUFBUyxRQUFBLEdBQUFDLE9BQUEsQ0FBQTFQLE9BQUEsR0FFY2lELElBQUkiLCJpZ25vcmVMaXN0IjpbXX0=
719
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwiZmllbGRWYWxpZGl0eSIsIk1hcCIsInNlY3Rpb25Db3VudGVyIiwiYXBpIiwiaWQiLCJkb1VwZGF0ZVZhbHVlIiwibmFtZSIsInVwZGF0ZVZhbHVlIiwiY2xlYXIiLCJkb0NsZWFyIiwic2V0VmFsdWUiLCJkb0hhbmRsZUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJvcHRpb25zIiwic2VsZWN0ZWRJZCIsImhhbmRsZUNoYW5nZSIsImdldFZhbHVlUGF0aCIsImFkZEZpZWxkIiwicmVmIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJyZW1vdmVGaWVsZCIsInNldEZpZWxkVmFsaWRpdHkiLCJyZXN1bHQiLCJjdXJyZW50Iiwic2V0IiwiY2xlYXJGaWVsZFZhbGlkaXR5IiwiZGVsZXRlIiwidmFsaWRhdGVBbGwiLCJmaWVsZCIsImhhbmRsZSIsInBhdGgiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImZpcnN0SW52YWxpZCIsInYiLCJnZXQiLCJ2YWxpZCIsImRvVmFsaWRhdGVQYXJlbnQiLCJzY3JvbGxUbyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0IiwiZm9ybVZhbGlkIiwidW5kZWZpbmVkIiwib25WYWxpZGl0eUNoYW5nZSIsIm1lc3NhZ2UiLCJwYXJzZVZhbHVlIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlZFZhbHVlcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9iamVjdFZhbHVlIiwiZGF0YUFycml2ZWRIYW5kbGVyIiwic3BsaWNlIiwidXBkYXRlRXJyb3JzIiwiaXNQYXJlbnRJbnZhbGlkIiwidmFsaWRhdGVGaWVsZCIsInZhbHMiLCJjdXJyZW50VmFsdWVzIiwiZ3JvdXBGaWVsZCIsInZhbGlkYXRpb25Hcm91cCIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwRmllbGRJZCIsImdyaWRGaWVsZFBhdGgiLCJncm91cEZpZWxkVmFsIiwibG9nIiwiVkFMVUVfQ0hBTkdFIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsInJlbmRlciIsImZvcm0iLCJjcmVhdGVFbGVtZW50Iiwia2V5SGFuZGxlciIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsInBhZGRpbmciLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Zvcm0uanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge21ha2VTdHlsZXN9IGZyb20gJ0BtdWkvc3R5bGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgU2VjdGlvbiBmcm9tICcuL1NlY3Rpb24nO1xuaW1wb3J0ICcuL0Zvcm0uY3NzJztcbmltcG9ydCB7aW52b2tlUnBjfSBmcm9tICcuLi8uLi9SZXN0U2VydmljZSc7XG5pbXBvcnQge011dGV4fSBmcm9tICdhc3luYy1tdXRleCc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciBmcm9tICcuLi8uLi9ldmVudC9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCB7Y2xlYXJ9IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQvZGlzdC9jbGVhclwiO1xuXG5jb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKHRoZW1lID0+ICh7XG4gICAgY29udGFpbmVyOiB7XG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgJyYgdHIgdGQnOiB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IHtcbiAgICAgICAgbWFyZ2luOiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtaW5XaWR0aDogMTIwLFxuICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgfSxcbiAgICBzZWxlY3RFbXB0eToge1xuICAgICAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgfSxcbiAgICByb290OiB7fVxufSkpO1xuXG5jb25zdCBGb3JtID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSA/IHByb3BzLnZhbHVlcyA6IHt9KTtcbiAgICAgICAgY29uc3QgW21hc3RlclZhbHVlcywgc2V0TWFzdGVyVmFsdWVzXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgICAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUoVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpKTtcbiAgICAgICAgY29uc3QgW2JpbmRlcl0gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmJpbmRlcikgPyAnUExBSU5fT0JKRUNUJyA6IHByb3BzLmNvbmZpZy5iaW5kZXIpO1xuICAgICAgICBjb25zdCBbZmllbGRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRXJyb3JDYWxsYmFjayA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgICBjb25zdCBbc2VjdGlvbkhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbZmllbGRQYXJlbnRFcnJvcnNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICAgICAgLy8gVmFsaWRpdHkgcmVnaXN0ZXI6IE1hcDxmaWVsZElkLCB7IHZhbGlkLCBtZXNzYWdlLCBmb3JjZU1hcmtlciB9Pi5cbiAgICAgICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgXCJpcyB0aGlzIGZpZWxkIHZhbGlkP1wiLiBCYXNlRmllbGQgd3JpdGVzXG4gICAgICAgIC8vIGhlcmUgZnJvbSBkb1ZhbGlkYXRpb247IGZvcm0udmFsdWUgcmVhZHMgaGVyZSB3aXRob3V0IGludm9raW5nIGFueVxuICAgICAgICAvLyBmaWVsZCBtZXRob2RzIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgcmVuZGVyLXRpbWUgY2hhaW4gdGhhdFxuICAgICAgICAvLyBwcm9kdWNlZCBSZWFjdCAjMTg1KS5cbiAgICAgICAgY29uc3QgZmllbGRWYWxpZGl0eSA9IFJlYWN0LnVzZVJlZihuZXcgTWFwKCkpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsaWRpdHk6IChpZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRpdHkuY3VycmVudC5zZXQoaWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhckZpZWxkVmFsaWRpdHk6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0IFwiZm9yY2UtdmFsaWRhdGUgZXZlcnkgZmllbGRcIiBjb21tYW5kLiBSZXBsYWNlcyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGhhY2sgb2YgcmVhZGluZyBmb3JtLnZhbHVlIHB1cmVseSBmb3IgaXRzIHNpZGUgZWZmZWN0cy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmllbGRzIHdyaXRlIGludG8gZmllbGRWYWxpZGl0eSB2aWEgZG9WYWxpZGF0aW9uIGFzIGEgc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBlZmZlY3Qgb2YgdmFsaWRhdGU7IHdlIHRoZW4gd2FsayB0aGUgcmVnaXN0ZXIgZm9yIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGRzIHRvIGRyaXZlIFVYIChzY3JvbGxUbyBmaXJzdCwgcmVmcmVzaCBjb250YWluZXIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2spIOKAlCBzYW1lIFVYIHRoZSBnZXR0ZXIgdXNlZCB0byBwcm92aWRlLCBub3cgb3B0LWluLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aGUgYWN0dWFsIGN1cnJlbnQgdmFsdWUgc28gZG9WYWxpZGF0aW9uJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgY2FjaGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdHMgcmVhbGl0eS4gV2l0aG91dCB0aGlzIHdlIHdlcmUgcGFzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bGwsIHdoaWNoIG1hZGUgY2FjaGUgaGl0cyBvcGFxdWUgaW4gbG9ncyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZWQgVXRpbHMudmFsaWRhdGVGaWVsZCB0byBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXNbaWRdIGV2ZXJ5IHRpbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEludmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SW52YWxpZCA9PT0gbnVsbCkgZmlyc3RJbnZhbGlkID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlLmFwaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaXJzdEludmFsaWQuaGFuZGxlLmFwaS5zY3JvbGxUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQpICYmIGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZERhdGEoYWN0aW9uQ29uZmlnLCBjb25maWcsIGV2ZW50ID8gZXZlbnQuZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmluZERhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvQmluZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmVudDogKGlkLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZ2V0RmllbGQoaWQpLCBpbnZhbGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBmaWVsZERhdGFCaW5kaW5ncygpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gcHJvcHMuY29uZmlnLnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gc2VjdGlvbi5jb21wb25lbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tVGFiKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gY29tcG9uZW50LmZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaCghVXRpbHMuaXNOdWxsKGZpZWxkLmRhdGFCaW5kaW5nKSA/IGZpZWxkLmRhdGFCaW5kaW5nIDogZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQgbW9kZWwobW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgcmV0dXJucyB2YWx1ZXMuY3VycmVudCBpZmYgZXZlcnkgYm91bmQgZmllbGQnc1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBlbnRyeSBpcyB2YWxpZC4gU2lkZSBlZmZlY3Q6IGludm9rZXMgZWFjaFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCdzIGNhY2hlZCBvblZhbGlkaXR5Q2hhbmdlIHRvIHJlZnJlc2ggbWFya2VyIFVJXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gcmVnaXN0ZXIgc3RhdGUg4oCUIG5vIHJlLXZhbGlkYXRpb24sIG5vIHNldEZpZWxkVmFsaWRpdHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGVzLiBTeW1tZXRyaWMgKGZpcmVzIGZvciB2YWxpZCArIGludmFsaWQpIHNvIGEgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2UgVUkgZ290IG91dCBvZiBzeW5jIHdpdGggdGhlIHJlZ2lzdGVyIChzdGFsZSBoYXNFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHNvbWUgbm9uLWRvSGFuZGxlQ2hhbmdlIHBhdGgpIGlzIHJlcGFpbnRlZCB0byBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGVzIGFyZSBpZGVtcG90ZW50IChSZWFjdCBiYWlscyBvbiBzYW1lIHZhbHVlKSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0ZWQgZm9ybS52YWx1ZSByZWFkcyBjb3N0IHplcm8gcmUtcmVuZGVycyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFpbnQuIFRoZSBtYXJrZXJzIGdhdGUgaW5zaWRlIHRoZSBjYWxsYmFjayBlbnN1cmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hlcyBvbmx5IHBhaW50IHdoZW4gZ2xvYmFsIG1hcmtlcnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZSAmJiB2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmluZFZhbHVlVG9Gb3JtID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZvcm1WYWxpZCAmJiAodiA9PT0gdW5kZWZpbmVkIHx8IHYudmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2Lm9uVmFsaWRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vblZhbGlkaXR5Q2hhbmdlKHYudmFsaWQsIHYubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dGJvdW5kLW5vcm1hbGl6ZSB0aGUgc3RvcmVkIHZhbHVlIHNvIG5vbi1zdHJpbmcgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcyAoRGF0ZSBmb3IgRGF0ZVBpY2tlciwgbG9va3VwIG9iamVjdHMsIGV0Yy4pIHNlcmlhbGl6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdpcmUgZm9ybWF0IG9uIEpTT04uc3RyaW5naWZ5LiBSZXN0b3JlcyB0aGUgYmVoYXZpb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGdldHRlciBwcm92aWRlZCB2aWEgcGFyc2VWYWx1ZShfLCBmYWxzZSkuIElkZW1wb3RlbnQgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZWQgdmFsdWVQYXJzZXJzIOKAlCByZXBlYXQgcmVhZHMgc2VlIHRoZSBhbHJlYWR5LW5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgcmUtZW1pdCB0aGUgc2FtZSBzdHJpbmcuIHBhcnNlVmFsdWUgaXMgYSBwdXJlIEpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHdpdGggbm8gUmVhY3Qgc3RhdGUgc2lkZSBlZmZlY3RzLCBzbyB1bmxpa2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY2FsbCB3ZSByZW1vdmVkIGluIHNlcT00NCwgdGhpcyBjYW4ndCBkcml2ZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyIGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQgPyB2YWx1ZXMuY3VycmVudCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkIGNvbXBsZXRlLiBFbmFibGUgbWFya2VycyBnbG9iYWxseSBzbyBhbGwgc3Vic2VxdWVudFxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmbG93cyAoc2F2ZSBjbGljaywgdmFsdWUgY2hhbmdlcywgYnV0dG9uLWRyaXZlblxuICAgICAgICAgICAgLy8gdmFsaWRhdGVBbGwpIHN1cmZhY2UgZXJyb3IgVUkuIEJhc2VGaWVsZCBzZWxmLXZhbGlkYXRpb24gZHVyaW5nXG4gICAgICAgICAgICAvLyBpbml0aWFsIGxvYWQgbG9jYWxseSBzdXBwcmVzc2VzIG1hcmtlcnMgaW4gaXRzIG93biB0cnkvZmluYWxseSxcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgcmUtZW5hYmxlIGRvZXNuJ3QgY2F1c2UgYSBsb2FkLXRpbWUgZmxhc2ggZm9yIGZpZWxkc1xuICAgICAgICAgICAgLy8gdGhhdCBtb3VudCBkdXJpbmcgdGhpcyBzYW1lIGVmZmVjdCBjeWNsZS4gQXN5bmMgZGF0YSBhcnJpdmluZ1xuICAgICAgICAgICAgLy8gbGF0ZXIgd2lsbCByZS12YWxpZGF0ZSB2aWEgQmFzZUZpZWxkJ3MgW3Byb3BzLnZhbHVlcywgY29uZmlnXVxuICAgICAgICAgICAgLy8gdXNlRWZmZWN0LCB3aGljaCBhbHNvIGxvY2FsbHkgc3VwcHJlc3NlcyBtYXJrZXJzLlxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZykgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLmNvbmZpZywgcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChtYXN0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbbWFzdGVyVmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGRzRnJvbVRhYiA9ICh0YWIpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFiUGFnZSBvZiB0YWIudGFiUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0YWJQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZm9ybVNlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNldC5maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybURhdGFPYmplY3QgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1WYWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcpIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtYXAgPSBkYXRhLm1hcDtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGZvcm1WYWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgdG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2b1t0b2tlbl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IG1hcFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9DbGVhcigpIHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0ge307XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvQmluZERhdGEoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkudmFsdWUgPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUoZGF0YVtrZXldLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWVzKGRhdGEpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGZpZWxkLmlkLCBwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUob2JqZWN0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05VTEwgZmllbGQgcmVmZXJlbmNlIHdoaWxlIHBhcnNpbmcgZm9ybSB2YWx1ZSAtICcgKyBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHBhcnNlZFZhbHVlcztcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9pZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy9wcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCwgdXBkYXRlRXJyb3JzID0gdHJ1ZSkge1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5wYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNQYXJlbnRJbnZhbGlkID0gaW52YWxpZDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldICE9PSBmaWVsZCAmJiBmaWVsZHNbaV0ucGFyZW50SWQgPT09IGZpZWxkLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BhcmVudEludmFsaWQgPSBpc1BhcmVudEludmFsaWQgfHwgIShVdGlscy5pc051bGwoZmllbGRzW2ldLmVycm9yKSB8fCBmaWVsZHNbaV0uZXJyb3IubGVuZ3RoID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpZWxkUGFyZW50RXJyb3JzW2ZpZWxkLnBhcmVudElkXSA9IGlzUGFyZW50SW52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVwZGF0ZUVycm9ycyAmJiAhVXRpbHMuaXNOdWxsKGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCkgJiYgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRQYXJlbnRFcnJvcnM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gKGZpZWxkLCBpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBpbnZhbGlkID0gZmllbGQuaGFuZGxlLmFwaS52YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBbaWRdOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0sIHZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaW52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ2V0VmFsdWVQYXRoID0gKGlkLCB2YWxzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHt9O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZXMgPSB2YWxzO1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWxzKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSB2YWx1ZXMuY3VycmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY3VycmVudFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gaWQuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gY3VycmVudFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZVByb3BlcnR5ID0gdG9rZW5zWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZvID0gY3VycmVudFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2b1t0b2tlbnNbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5zW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9bdG9rZW5zW2ldXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5zW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCA9IHZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZVByb3BlcnR5ID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9IYW5kbGVDaGFuZ2UgPSAoaWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGdldFZhbHVlUGF0aChpZCwgbnVsbCk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC52YWx1ZVByb3BlcnR5KSAmJiBsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZCA9IHZhbGlkYXRlRmllbGQoZmllbGQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0aW9uR3JvdXAgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuZ2V0VmFsaWRhdGlvbkdyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWxpZGF0aW9uR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICE9PSBncm91cEZpZWxkICYmIHZhbGlkYXRpb25Hcm91cCA9PT0gZmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZElkID0gZ3JvdXBGaWVsZC5oYW5kbGUuYXBpLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JpZEZpZWxkUGF0aCA9IGdldFZhbHVlUGF0aChncm91cEZpZWxkSWQsIG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGdyaWRGaWVsZFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZFZhbCA9IGdyaWRGaWVsZFBhdGgudmFsdWVPYmplY3RbZ3JpZEZpZWxkUGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1WYWxpZGF0aW5nIGZvcm0nLCBncm91cEZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZ3JvdXBGaWVsZCwgZ3JvdXBGaWVsZElkLCBncm91cEZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKGludmFsaWQgPyBudWxsIDogdmFsdWVzLmN1cnJlbnQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIodmFsdWVzLmN1cnJlbnQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnMoZmFsc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLnByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zKHByb3BzLmNvbmZpZy5pZCk7XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuVkFMVUVfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IChpZCwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWRkRmllbGQgPSAoaWQsIGhhbmRsZSwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBmaWVsZC5lcnJvcjtcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZChpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpZWxkID0ge307XG4gICAgICAgICAgICBmaWVsZC5pZCA9IGlkO1xuICAgICAgICAgICAgZmllbGQuaGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9IGJpbmRWYWx1ZVRvRm9ybTtcbiAgICAgICAgICAgIGZpZWxkLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChmaWVsZCk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHZhbHVlcy5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UgPSAobmFtZSwgb3B0aW9ucywgc2VsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZih0eXBlb2Ygc2VsZWN0aW9uID09PSAnb2JqZWN0JyAmJiAoVXRpbHMuaXNOdWxsKG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFZhbHVlID0gbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbaV0uaWQgPT09IHNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlID0gb3B0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvSGFuZGxlQ2hhbmdlKG5hbWUsIHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdXBkYXRlVmFsdWUgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgW25hbWVdOiB2YWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKGZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKFV0aWxzLmlzTnVsbChmb3JtLnNlY3Rpb25zKSB8fCBmb3JtLnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb24uaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmlkID0gc2VjdGlvbkNvdW50ZXIgKyAnLWZvcm0tc2VjdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e3NlY3Rpb25Db3VudGVyKyt9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24ga2V5SGFuZGxlcj17cHJvcHMua2V5SGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17c2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17Y3JlYXRlU2VjdGlvbkhhbmRsZShzZWN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm09eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChwcm9wcy5oYW5kbGUuYXBpKSA/IHByb3BzLmhhbmRsZS5hcGkgOiBhcGkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ9e3Byb3BzLnZpZXdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17dmFsdWVzLmN1cnJlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZpc2libGUgJiZcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9IGlkPXtwcm9wcy5jb25maWcuaWR9IHN0eWxlPXtcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgPT09ICdkZWZhdWx0Rm9ybScgP1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5tZXJnZVN0eWxlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzcwdmgnXG4gICAgICAgICAgICAgICAgICAgIH0sIHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuaWQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcihwcm9wcy5jb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PkVSUk9SOiBBIGZvcm0gbXVzdCBoYXZlIGFuIElEPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+KTtcbiAgICB9KVxuO1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLG1CQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSx5QkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsVUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsVUFBQSxHQUFBWCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBWixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVksTUFBQSxHQUFBWixPQUFBO0FBQTZELFNBQUFELHVCQUFBYyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBWCxDQUFBLEVBQUFJLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFmLENBQUEsYUFBQUksQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFELE9BQUEsQ0FBQUcsTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBZSxlQUFBLENBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBckIsQ0FBQSxFQUFBTSxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUYsT0FBQSxDQUFBRyxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQXRCLENBQUEsRUFBQUksQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUosQ0FBQTtBQUFBLFNBQUFtQixnQkFBQW5CLENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLFlBQUFELENBQUEsR0FBQW1CLGNBQUEsQ0FBQW5CLENBQUEsTUFBQUosQ0FBQSxHQUFBTSxNQUFBLENBQUFnQixjQUFBLENBQUF0QixDQUFBLEVBQUFJLENBQUEsSUFBQW9CLEtBQUEsRUFBQW5CLENBQUEsRUFBQU8sVUFBQSxNQUFBYSxZQUFBLE1BQUFDLFFBQUEsVUFBQTFCLENBQUEsQ0FBQUksQ0FBQSxJQUFBQyxDQUFBLEVBQUFMLENBQUE7QUFBQSxTQUFBdUIsZUFBQWxCLENBQUEsUUFBQXNCLENBQUEsR0FBQUMsWUFBQSxDQUFBdkIsQ0FBQSx1Q0FBQXNCLENBQUEsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQXZCLENBQUEsRUFBQUQsQ0FBQSwyQkFBQUMsQ0FBQSxLQUFBQSxDQUFBLFNBQUFBLENBQUEsTUFBQUwsQ0FBQSxHQUFBSyxDQUFBLENBQUF3QixNQUFBLENBQUFDLFdBQUEsa0JBQUE5QixDQUFBLFFBQUEyQixDQUFBLEdBQUEzQixDQUFBLENBQUErQixJQUFBLENBQUExQixDQUFBLEVBQUFELENBQUEsdUNBQUF1QixDQUFBLFNBQUFBLENBQUEsWUFBQUssU0FBQSx5RUFBQTVCLENBQUEsR0FBQTZCLE1BQUEsR0FBQUMsTUFBQSxFQUFBN0IsQ0FBQTtBQUU3RCxNQUFNOEIsU0FBUyxHQUFHLElBQUFDLGtCQUFVLEVBQUNDLEtBQUssS0FBSztFQUNuQ0MsU0FBUyxFQUFFO0lBQ1BDLE9BQU8sRUFBRSxNQUFNO0lBQ2ZDLFFBQVEsRUFBRSxNQUFNO0lBQ2hCQyxLQUFLLEVBQUUsTUFBTTtJQUNiLFNBQVMsRUFBRTtNQUNQQyxhQUFhLEVBQUU7SUFDbkI7RUFDSixDQUFDO0VBQ0RDLE1BQU0sRUFBRTtJQUNKQyxNQUFNLEVBQUVQLEtBQUssQ0FBQ1EsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4QkMsUUFBUSxFQUFFLEdBQUc7SUFDYkMsU0FBUyxFQUFFO0VBQ2YsQ0FBQztFQUNEQyxXQUFXLEVBQUU7SUFDVEMsU0FBUyxFQUFFWixLQUFLLENBQUNRLE9BQU8sQ0FBQyxDQUFDO0VBQzlCLENBQUM7RUFDREssSUFBSSxFQUFFLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU1DLElBQUksZ0JBQUdDLGNBQUssQ0FBQ0MsSUFBSSxDQUFFQyxLQUFLLElBQUs7RUFDM0IsTUFBTUMsTUFBTSxHQUFHSCxjQUFLLENBQUNJLE1BQU0sQ0FBQyxDQUFDQyxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDQyxNQUFNLENBQUMsR0FBR0QsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUUsTUFBTSxDQUFDSSxZQUFZLEVBQUVDLGVBQWUsQ0FBQyxHQUFHUixjQUFLLENBQUNTLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDNUQsTUFBTSxDQUFDQyxNQUFNLEVBQUVDLFNBQVMsQ0FBQyxHQUFHWCxjQUFLLENBQUNTLFFBQVEsQ0FBQ0osY0FBSyxDQUFDTyxXQUFXLENBQUNWLEtBQUssQ0FBQ1EsTUFBTSxFQUFFUixLQUFLLENBQUNXLE1BQU0sQ0FBQyxDQUFDO0VBQ3pGLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEdBQUdkLGNBQUssQ0FBQ1MsUUFBUSxDQUFDSixjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDUSxNQUFNLENBQUNJLE1BQU0sQ0FBQyxHQUFHLGNBQWMsR0FBR1osS0FBSyxDQUFDUSxNQUFNLENBQUNJLE1BQU0sQ0FBQztFQUN6RyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxHQUFHZixjQUFLLENBQUNTLFFBQVEsQ0FBQyxFQUFFLENBQUM7RUFDbkMsTUFBTU8sc0JBQXNCLEdBQUdoQixjQUFLLENBQUNJLE1BQU0sQ0FBQyxDQUFDO0VBQzdDLE1BQU0sQ0FBQ2EsY0FBYyxDQUFDLEdBQUdqQixjQUFLLENBQUNTLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzQyxNQUFNLENBQUNTLGlCQUFpQixDQUFDLEdBQUdsQixjQUFLLENBQUNTLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QyxNQUFNLENBQUNVLE9BQU8sRUFBRUMsVUFBVSxDQUFDLEdBQUdwQixjQUFLLENBQUNTLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDbEQsTUFBTVksVUFBVSxHQUFHckIsY0FBSyxDQUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDO0VBQ3JDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxNQUFNa0IsYUFBYSxHQUFHdEIsY0FBSyxDQUFDSSxNQUFNLENBQUMsSUFBSW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0MsSUFBSUMsY0FBYyxHQUFHLENBQUM7RUFFdEIsTUFBTUMsR0FBRyxHQUFHQSxDQUFBLEtBQU07SUFDZCxPQUFPO01BQ0gsSUFBSUMsRUFBRUEsQ0FBQSxFQUFHO1FBQ0wsT0FBT3hCLEtBQUssQ0FBQ1EsTUFBTSxDQUFDZ0IsRUFBRTtNQUMxQixDQUFDO01BQ0RDLGFBQWEsRUFBRUEsQ0FBQ0MsSUFBSSxFQUFFeEQsS0FBSyxLQUFLO1FBQzVCLE9BQU95RCxXQUFXLENBQUNELElBQUksRUFBRXhELEtBQUssQ0FBQztNQUNuQyxDQUFDO01BQ0QwRCxLQUFLLEVBQUVBLENBQUEsS0FBTTtRQUNUQyxPQUFPLENBQUMsQ0FBQztNQUNiLENBQUM7TUFDREMsUUFBUSxFQUFFQSxDQUFDTixFQUFFLEVBQUV0RCxLQUFLLEtBQUs7UUFDckI2RCxjQUFjLENBQUNQLEVBQUUsRUFBRXRELEtBQUssQ0FBQztNQUM3QixDQUFDO01BQ0Q4RCxzQkFBc0IsRUFBRUEsQ0FBQ04sSUFBSSxFQUFFTyxPQUFPLEVBQUVDLFVBQVUsS0FBSztRQUNuRCxPQUFPRixzQkFBc0IsQ0FBQ04sSUFBSSxFQUFFTyxPQUFPLEVBQUVDLFVBQVUsQ0FBQztNQUM1RCxDQUFDO01BQ0RDLFlBQVksRUFBRUEsQ0FBQ1gsRUFBRSxFQUFFdEQsS0FBSyxLQUFLO1FBQ3pCNkQsY0FBYyxDQUFDUCxFQUFFLEVBQUV0RCxLQUFLLENBQUM7TUFDN0IsQ0FBQztNQUNEa0UsWUFBWSxFQUFFQSxDQUFDWixFQUFFLEVBQUV2QixNQUFNLEtBQUs7UUFDMUIsT0FBT21DLFlBQVksQ0FBQ1osRUFBRSxFQUFFdkIsTUFBTSxDQUFDO01BQ25DLENBQUM7TUFDRG9DLFFBQVEsRUFBRUEsQ0FBQ2IsRUFBRSxFQUFFYyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsZUFBZSxLQUFLO1FBQzlDLE9BQU9ILFFBQVEsQ0FBQ2IsRUFBRSxFQUFFYyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsZUFBZSxDQUFDO01BQ3ZELENBQUM7TUFDREMsV0FBVyxFQUFHakIsRUFBRSxJQUFLO1FBQ2pCaUIsV0FBVyxDQUFDakIsRUFBRSxDQUFDO01BQ25CLENBQUM7TUFDRGtCLGdCQUFnQixFQUFFQSxDQUFDbEIsRUFBRSxFQUFFbUIsTUFBTSxLQUFLO1FBQzlCdkIsYUFBYSxDQUFDd0IsT0FBTyxDQUFDQyxHQUFHLENBQUNyQixFQUFFLEVBQUVtQixNQUFNLENBQUM7TUFDekMsQ0FBQztNQUNERyxrQkFBa0IsRUFBR3RCLEVBQUUsSUFBSztRQUN4QkosYUFBYSxDQUFDd0IsT0FBTyxDQUFDRyxNQUFNLENBQUN2QixFQUFFLENBQUM7TUFDcEMsQ0FBQztNQUNEd0IsV0FBVyxFQUFFQSxDQUFBLEtBQU07UUFDZjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLLE1BQU1DLEtBQUssSUFBSXBDLE1BQU0sRUFBRTtVQUN4QixJQUFJLENBQUNWLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkMsS0FBSyxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDL0MsY0FBSyxDQUFDQyxNQUFNLENBQUM2QyxLQUFLLENBQUNDLE1BQU0sQ0FBQzNCLEdBQUcsQ0FBQyxFQUFFO1lBQ2hFO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBLE1BQU00QixJQUFJLEdBQUdmLFlBQVksQ0FBQ2EsS0FBSyxDQUFDekIsRUFBRSxFQUFFLElBQUksQ0FBQztZQUN6QyxNQUFNNEIsWUFBWSxHQUFHLENBQUNqRCxjQUFLLENBQUNDLE1BQU0sQ0FBQytDLElBQUksQ0FBQyxJQUFJLENBQUNoRCxjQUFLLENBQUNDLE1BQU0sQ0FBQytDLElBQUksQ0FBQ0UsV0FBVyxDQUFDLEdBQ3JFRixJQUFJLENBQUNFLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDRyxhQUFhLENBQUMsR0FDcEMsSUFBSTtZQUNWTCxLQUFLLENBQUNDLE1BQU0sQ0FBQzNCLEdBQUcsQ0FBQ2dDLFFBQVEsQ0FBQ3RELE1BQU0sQ0FBQzJDLE9BQU8sRUFBRVEsWUFBWSxDQUFDO1VBQzNEO1FBQ0o7UUFDQSxJQUFJSSxZQUFZLEdBQUcsSUFBSTtRQUN2QixLQUFLLE1BQU1QLEtBQUssSUFBSXBDLE1BQU0sRUFBRTtVQUN4QixJQUFJb0MsS0FBSyxDQUFDVCxlQUFlLEtBQUssS0FBSyxFQUFFO1VBQ3JDLE1BQU1pQixDQUFDLEdBQUdyQyxhQUFhLENBQUN3QixPQUFPLENBQUNjLEdBQUcsQ0FBQ1QsS0FBSyxDQUFDekIsRUFBRSxDQUFDO1VBQzdDLElBQUlpQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0UsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUN4QkMsZ0JBQWdCLENBQUNYLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1lBQ3BDLElBQUlPLFlBQVksS0FBSyxJQUFJLEVBQUVBLFlBQVksR0FBR1AsS0FBSztVQUNuRDtRQUNKO1FBQ0EsSUFBSSxDQUFDOUMsY0FBSyxDQUFDQyxNQUFNLENBQUNvRCxZQUFZLENBQUMsSUFDeEIsQ0FBQ3JELGNBQUssQ0FBQ0MsTUFBTSxDQUFDb0QsWUFBWSxDQUFDTixNQUFNLENBQUMsSUFDbEMsQ0FBQy9DLGNBQUssQ0FBQ0MsTUFBTSxDQUFDb0QsWUFBWSxDQUFDTixNQUFNLENBQUMzQixHQUFHLENBQUMsSUFDdEMsT0FBT2lDLFlBQVksQ0FBQ04sTUFBTSxDQUFDM0IsR0FBRyxDQUFDc0MsUUFBUSxLQUFLLFVBQVUsRUFBRTtVQUMzREwsWUFBWSxDQUFDTixNQUFNLENBQUMzQixHQUFHLENBQUNzQyxRQUFRLENBQUMsQ0FBQztRQUN0QztRQUNBLElBQUksQ0FBQzFELGNBQUssQ0FBQ0MsTUFBTSxDQUFDVSxzQkFBc0IsQ0FBQzhCLE9BQU8sQ0FBQyxJQUFJa0IsMkJBQWtCLENBQUNDLG9CQUFvQixDQUFDLENBQUMsRUFBRTtVQUM1RmpELHNCQUFzQixDQUFDOEIsT0FBTyxDQUFDNUIsaUJBQWlCLENBQUM7UUFDckQ7TUFDSixDQUFDO01BQ0RnRCxRQUFRLEVBQUVBLENBQUNDLFlBQVksRUFBRUMsS0FBSyxLQUFLO1FBQy9CRixRQUFRLENBQUNDLFlBQVksRUFBRXpELE1BQU0sRUFBRTBELEtBQUssR0FBR0EsS0FBSyxDQUFDQyxJQUFJLEdBQUcsSUFBSSxDQUFDO01BQzdELENBQUM7TUFDREMsUUFBUSxFQUFHRCxJQUFJLElBQUs7UUFDaEJFLFVBQVUsQ0FBQ0YsSUFBSSxDQUFDO01BQ3BCLENBQUM7TUFDREcsY0FBYyxFQUFFQSxDQUFDOUMsRUFBRSxFQUFFK0MsT0FBTyxLQUFLO1FBQzdCWCxnQkFBZ0IsQ0FBQ1ksUUFBUSxDQUFDaEQsRUFBRSxDQUFDLEVBQUUrQyxPQUFPLENBQUM7TUFDM0MsQ0FBQztNQUNELElBQUlFLGlCQUFpQkEsQ0FBQSxFQUFHO1FBQ3BCLElBQUlDLFVBQVUsR0FBRyxFQUFFO1FBQ25CLEtBQUssSUFBSXJHLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzJCLEtBQUssQ0FBQ1EsTUFBTSxDQUFDbUUsUUFBUSxDQUFDaEgsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtVQUNuRCxJQUFJdUcsT0FBTyxHQUFHNUUsS0FBSyxDQUFDUSxNQUFNLENBQUNtRSxRQUFRLENBQUN0RyxDQUFDLENBQUM7VUFDdEMsS0FBSyxJQUFJd0csQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxPQUFPLENBQUNFLFVBQVUsQ0FBQ25ILE1BQU0sRUFBRWtILENBQUMsRUFBRSxFQUFFO1lBQ2hELElBQUlFLFNBQVMsR0FBR0gsT0FBTyxDQUFDRSxVQUFVLENBQUNELENBQUMsQ0FBQztZQUNyQyxJQUFJaEUsTUFBTSxHQUFHLElBQUk7WUFFakIsSUFBSWtFLFNBQVMsQ0FBQ0MsSUFBSSxLQUFLLEtBQUssRUFBRTtjQUMxQm5FLE1BQU0sR0FBR29FLGdCQUFnQixDQUFDRixTQUFTLENBQUM7WUFDeEMsQ0FBQyxNQUFNO2NBQ0hsRSxNQUFNLEdBQUdrRSxTQUFTLENBQUNsRSxNQUFNO1lBQzdCO1lBRUEsS0FBSyxJQUFJcUUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHckUsTUFBTSxDQUFDbEQsTUFBTSxFQUFFdUgsQ0FBQyxFQUFFLEVBQUU7Y0FDcEMsSUFBSWpDLEtBQUssR0FBR3BDLE1BQU0sQ0FBQ3FFLENBQUMsQ0FBQztjQUNyQlIsVUFBVSxDQUFDbkgsSUFBSSxDQUFDLENBQUM0QyxjQUFLLENBQUNDLE1BQU0sQ0FBQzZDLEtBQUssQ0FBQ2tDLFdBQVcsQ0FBQyxHQUFHbEMsS0FBSyxDQUFDa0MsV0FBVyxHQUFHbEMsS0FBSyxDQUFDekIsRUFBRSxDQUFDO1lBQ3BGO1VBQ0o7UUFDSjtRQUVBLE9BQU9rRCxVQUFVO01BQ3JCLENBQUM7TUFDRFUsd0JBQXdCQSxDQUFDQyxRQUFRLEVBQUU7UUFDL0J2RSxzQkFBc0IsQ0FBQzhCLE9BQU8sR0FBR3lDLFFBQVE7TUFDN0MsQ0FBQztNQUNELElBQUlDLEtBQUtBLENBQUEsRUFBRztRQUNSLE9BQU9yRixNQUFNLENBQUMyQyxPQUFPO01BQ3pCLENBQUM7TUFDRCxJQUFJMEMsS0FBS0EsQ0FBQ0EsS0FBSyxFQUFFO1FBQ2IsSUFBSW5GLGNBQUssQ0FBQ0MsTUFBTSxDQUFDa0YsS0FBSyxDQUFDLEVBQUU7VUFDckJDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNmakYsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsTUFBTTtVQUNIaUYsV0FBVyxDQUFDQyxtQkFBbUIsQ0FBQ0YsS0FBSyxDQUFDLENBQUM7VUFDdkNoRixlQUFlLENBQUNnRixLQUFLLENBQUM7UUFDMUI7TUFDSixDQUFDO01BQ0QsSUFBSXBILEtBQUtBLENBQUEsRUFBRztRQUNSO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFJdUgsU0FBUyxHQUFHLElBQUk7UUFDcEIsSUFBSXRFLFVBQVUsQ0FBQ3lCLE9BQU8sS0FBSyxLQUFLLElBQUkzQyxNQUFNLENBQUMyQyxPQUFPLEVBQUU7VUFDaEQsS0FBSyxNQUFNSyxLQUFLLElBQUlwQyxNQUFNLEVBQUU7WUFDeEIsSUFBSW9DLEtBQUssQ0FBQ1QsZUFBZSxLQUFLLEtBQUssRUFBRTtZQUNyQyxNQUFNaUIsQ0FBQyxHQUFHckMsYUFBYSxDQUFDd0IsT0FBTyxDQUFDYyxHQUFHLENBQUNULEtBQUssQ0FBQ3pCLEVBQUUsQ0FBQztZQUM3Q2lFLFNBQVMsR0FBR0EsU0FBUyxLQUFLaEMsQ0FBQyxLQUFLaUMsU0FBUyxJQUFJakMsQ0FBQyxDQUFDRSxLQUFLLENBQUM7WUFDckQsSUFBSUYsQ0FBQyxJQUFJLE9BQU9BLENBQUMsQ0FBQ2tDLGdCQUFnQixLQUFLLFVBQVUsRUFBRTtjQUMvQ2xDLENBQUMsQ0FBQ2tDLGdCQUFnQixDQUFDbEMsQ0FBQyxDQUFDRSxLQUFLLEVBQUVGLENBQUMsQ0FBQ21DLE9BQU8sQ0FBQztZQUMxQztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBLElBQUksQ0FBQ3pGLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkMsS0FBSyxDQUFDQyxNQUFNLENBQUMsSUFDeEIsQ0FBQy9DLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkMsS0FBSyxDQUFDQyxNQUFNLENBQUMzQixHQUFHLENBQUMsSUFDL0IsT0FBTzBCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDM0IsR0FBRyxDQUFDc0UsVUFBVSxLQUFLLFVBQVUsRUFBRTtjQUN0RCxNQUFNMUMsSUFBSSxHQUFHZixZQUFZLENBQUNhLEtBQUssQ0FBQ3pCLEVBQUUsRUFBRXZCLE1BQU0sQ0FBQzJDLE9BQU8sQ0FBQztjQUNuRCxJQUFJLENBQUN6QyxjQUFLLENBQUNDLE1BQU0sQ0FBQytDLElBQUksQ0FBQyxJQUFJLENBQUNoRCxjQUFLLENBQUNDLE1BQU0sQ0FBQytDLElBQUksQ0FBQ0UsV0FBVyxDQUFDLEVBQUU7Z0JBQ3hERixJQUFJLENBQUNFLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDRyxhQUFhLENBQUMsR0FDaENMLEtBQUssQ0FBQ0MsTUFBTSxDQUFDM0IsR0FBRyxDQUFDc0UsVUFBVSxDQUFDMUMsSUFBSSxDQUFDRSxXQUFXLENBQUNGLElBQUksQ0FBQ0csYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDO2NBQ2hGO1lBQ0o7VUFDSjtRQUNKO1FBRUEsT0FBT21DLFNBQVMsR0FBR3hGLE1BQU0sQ0FBQzJDLE9BQU8sR0FBRyxJQUFJO01BQzVDLENBQUM7TUFDRGtELGFBQWEsRUFBRUEsQ0FBQ3RFLEVBQUUsRUFBRXVFLEtBQUssS0FBSztRQUMxQixPQUFPRCxhQUFhLENBQUN0RSxFQUFFLEVBQUV1RSxLQUFLLENBQUM7TUFDbkMsQ0FBQztNQUNEQyxXQUFXLEVBQUVBLENBQUEsS0FBTTtRQUNmLElBQUlDLFFBQVEsR0FBRyxFQUFFO1FBQ2pCLEtBQUssSUFBSTVILENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3dDLE1BQU0sQ0FBQ2xELE1BQU0sRUFBRVUsQ0FBQyxFQUFFLEVBQUU7VUFDcEMsSUFBSTRFLEtBQUssR0FBR3BDLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQztVQUNyQjRILFFBQVEsQ0FBQzFJLElBQUksQ0FBQzBGLEtBQUssQ0FBQ0MsTUFBTSxDQUFDO1VBQzNCLElBQUlnRCxZQUFZLEdBQUdqRCxLQUFLLENBQUNDLE1BQU0sQ0FBQzNCLEdBQUcsQ0FBQ3lFLFdBQVcsQ0FBQyxDQUFDO1VBQ2pELEtBQUssSUFBSW5CLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3FCLFlBQVksQ0FBQ3ZJLE1BQU0sRUFBRWtILENBQUMsRUFBRSxFQUFFO1lBQzFDb0IsUUFBUSxDQUFDMUksSUFBSSxDQUFDMkksWUFBWSxDQUFDckIsQ0FBQyxDQUFDLENBQUM7VUFDbEM7UUFDSjtRQUVBLElBQUlzQixVQUFVLEdBQUduSixNQUFNLENBQUNvSixtQkFBbUIsQ0FBQ3JGLGNBQWMsQ0FBQztRQUMzRCxLQUFLLE1BQU1zRixRQUFRLElBQUlGLFVBQVUsRUFBRTtVQUMvQixJQUFJRyxhQUFhLEdBQUd2RixjQUFjLENBQUNzRixRQUFRLENBQUM7VUFDNUNKLFFBQVEsQ0FBQzFJLElBQUksQ0FBQytJLGFBQWEsQ0FBQztVQUM1QixLQUFLLE1BQU1DLEtBQUssSUFBSUQsYUFBYSxDQUFDL0UsR0FBRyxDQUFDeUUsV0FBVyxDQUFDLENBQUMsRUFBRTtZQUNqREMsUUFBUSxDQUFDMUksSUFBSSxDQUFDZ0osS0FBSyxDQUFDO1VBQ3hCO1FBQ0o7UUFFQSxPQUFPTixRQUFRO01BQ25CLENBQUM7TUFDRE8sT0FBT0EsQ0FBQSxFQUFHO1FBQ04sSUFBSUwsVUFBVSxHQUFHbkosTUFBTSxDQUFDb0osbUJBQW1CLENBQUNyRixjQUFjLENBQUM7UUFDM0QsS0FBSyxNQUFNc0YsUUFBUSxJQUFJRixVQUFVLEVBQUU7VUFDL0IsSUFBSUcsYUFBYSxHQUFHdkYsY0FBYyxDQUFDc0YsUUFBUSxDQUFDO1VBQzVDLElBQUlDLGFBQWEsQ0FBQy9FLEdBQUcsQ0FBQ2lGLE9BQU8sRUFBRTtZQUMzQkYsYUFBYSxDQUFDL0UsR0FBRyxDQUFDaUYsT0FBTyxDQUFDLENBQUM7VUFDL0I7UUFDSjtRQUVBLElBQUlDLFlBQVksR0FBR3RHLGNBQUssQ0FBQ08sV0FBVyxDQUFDVixLQUFLLENBQUNRLE1BQU0sRUFBRVIsS0FBSyxDQUFDVyxNQUFNLENBQUM7UUFDaEUsSUFBSSxDQUFDUixjQUFLLENBQUNDLE1BQU0sQ0FBQ3FHLFlBQVksQ0FBQ3hGLE9BQU8sQ0FBQyxFQUFFO1VBQ3JDQyxVQUFVLENBQUNmLGNBQUssQ0FBQ3VHLHlCQUF5QixDQUFDRCxZQUFZLENBQUN4RixPQUFPLEVBQUV3RixZQUFZLENBQUNqRixFQUFFLENBQUMsQ0FBQztRQUN0RjtNQUNKO0lBQ0osQ0FBQztFQUNMLENBQUM7RUFFRCxNQUFNbUYsbUJBQW1CLEdBQUkvQixPQUFPLElBQUs7SUFDckMsSUFBSXpFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDVyxjQUFjLENBQUM2RCxPQUFPLENBQUNwRCxFQUFFLENBQUMsQ0FBQyxFQUFFO01BQzFDLElBQUkwQixNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2ZuQyxjQUFjLENBQUM2RCxPQUFPLENBQUNwRCxFQUFFLENBQUMsR0FBRzBCLE1BQU07TUFDbkMsT0FBT0EsTUFBTTtJQUNqQjtJQUVBLE9BQU9uQyxjQUFjLENBQUM2RCxPQUFPLENBQUNwRCxFQUFFLENBQUM7RUFDckMsQ0FBQztFQUVELFNBQVNvRixlQUFlQSxDQUFBLEVBQUc7SUFDdkIsSUFBSTVHLEtBQUssQ0FBQ1csTUFBTSxFQUFFO01BQ2QsSUFBSWtHLElBQUksR0FBRy9DLDJCQUFrQixDQUFDZ0QsT0FBTyxDQUFDOUcsS0FBSyxDQUFDVyxNQUFNLENBQUM7TUFDbkQsSUFBSWtHLElBQUksRUFBRTtRQUNOLElBQUlFLEtBQUssR0FBR0YsSUFBSSxDQUFDckcsTUFBTSxDQUFDdUcsS0FBSztRQUU3QixJQUFHQSxLQUFLLEVBQUU7VUFDTixJQUFJQSxLQUFLLENBQUNDLFFBQVEsQ0FBQ2hILEtBQUssQ0FBQ1EsTUFBTSxDQUFDZ0IsRUFBRSxDQUFDLEVBQUU7WUFDakNzQywyQkFBa0IsQ0FBQ21ELGlCQUFpQixDQUFDSixJQUFJLENBQUNyRyxNQUFNLENBQUNnQixFQUFFLEVBQUV1RixLQUFLLENBQUM7VUFDL0Q7UUFDSjtNQUNKO0lBQ0o7RUFDSjtFQUVBLFNBQVNHLGlCQUFpQkEsQ0FBQy9DLElBQUksRUFBRTtJQUM3QnlDLGVBQWUsQ0FBQyxDQUFDO0lBRWpCLElBQUksQ0FBQ3pHLGNBQUssQ0FBQ0MsTUFBTSxDQUFDK0QsSUFBSSxDQUFDLEVBQUU7TUFDckIsSUFBSUQsS0FBSyxHQUFHLElBQUlpRCxjQUFLLENBQUNuSCxLQUFLLENBQUNrRCxNQUFNLEVBQUVsRCxLQUFLLENBQUNXLE1BQU0sRUFBRXdELElBQUksQ0FBQztNQUN2RGlELG1CQUFZLENBQUNDLFNBQVMsQ0FBQ0Msa0JBQVMsQ0FBQ0MsWUFBWSxFQUFFckQsS0FBSyxDQUFDO0lBQ3pEO0lBRUFrRCxtQkFBWSxDQUFDSSxtQ0FBbUMsQ0FBQ3hILEtBQUssQ0FBQ1EsTUFBTSxDQUFDZ0IsRUFBRSxDQUFDO0lBQ2pFLEtBQUssTUFBTXlCLEtBQUssSUFBSXBDLE1BQU0sRUFBRTtNQUN4QnVHLG1CQUFZLENBQUNJLG1DQUFtQyxDQUFDdkUsS0FBSyxDQUFDQyxNQUFNLENBQUMzQixHQUFHLENBQUNDLEVBQUUsQ0FBQztJQUN6RTtFQUNKO0VBRUEsU0FBU3dDLFFBQVFBLENBQUN5RCxXQUFXLEVBQUVDLGVBQWUsRUFBb0I7SUFBQSxJQUFsQkMsU0FBUyxHQUFBakssU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWdJLFNBQUEsR0FBQWhJLFNBQUEsTUFBRyxJQUFJO0lBQzVELElBQUlrSyxPQUFPLEdBQUcsQ0FBQ3pILGNBQUssQ0FBQ0MsTUFBTSxDQUFDc0gsZUFBZSxDQUFDRyxXQUFXLENBQUMsR0FBR0gsZUFBZSxDQUFDRyxXQUFXLEdBQ2xGSixXQUFXLEtBQUssSUFBSSxHQUFHQSxXQUFXLENBQUNJLFdBQVcsR0FBRyxJQUFJO0lBQ3pELElBQUlDLGNBQWMsR0FBRyxDQUFDM0gsY0FBSyxDQUFDQyxNQUFNLENBQUNzSCxlQUFlLENBQUN4SixLQUFLLENBQUMsR0FBRzRGLDJCQUFrQixDQUFDaUUsMkJBQTJCLENBQUNMLGVBQWUsQ0FBQ3hKLEtBQUssRUFBRXlKLFNBQVMsQ0FBQyxHQUN4SSxDQUFDeEgsY0FBSyxDQUFDQyxNQUFNLENBQUNxSCxXQUFXLENBQUMsR0FBRzNELDJCQUFrQixDQUFDaUUsMkJBQTJCLENBQUNOLFdBQVcsQ0FBQ3ZKLEtBQUssRUFBRXlKLFNBQVMsQ0FBQyxHQUFHLElBQUk7SUFFcEgsSUFBSSxDQUFDeEgsY0FBSyxDQUFDQyxNQUFNLENBQUN3SCxPQUFPLENBQUMsRUFBRTtNQUN4Qi9GLE9BQU8sQ0FBQyxDQUFDO01BQ1QsSUFBSStGLE9BQU8sQ0FBQzVDLElBQUksS0FBSyxLQUFLLEVBQUU7UUFDeEIsSUFBQWdELHNCQUFTLEVBQUM7VUFDTkosT0FBTyxFQUFFQSxPQUFPO1VBQ2hCN0MsU0FBUyxFQUFFL0UsS0FBSyxDQUFDa0QsTUFBTTtVQUN2QnZDLE1BQU0sRUFBRVgsS0FBSyxDQUFDVztRQUNsQixDQUFDLENBQUMsQ0FBQ3NILElBQUksQ0FBRXRGLE1BQU0sSUFBSztVQUNoQixJQUFJO1lBQ0EsSUFBSSxDQUFDeEMsY0FBSyxDQUFDQyxNQUFNLENBQUN1QyxNQUFNLENBQUMsRUFBRTtjQUN2QjRDLFdBQVcsQ0FBQ0MsbUJBQW1CLENBQUM3QyxNQUFNLENBQUMsQ0FBQztjQUN4Q3JDLGVBQWUsQ0FBQ3FDLE1BQU0sQ0FBQztZQUMzQjtZQUVBeEIsVUFBVSxDQUFDeUIsT0FBTyxHQUFHLEtBQUs7VUFDOUIsQ0FBQyxDQUFDLE9BQU9sRyxDQUFDLEVBQUU7WUFDUndMLE9BQU8sQ0FBQ25DLEtBQUssQ0FBQ3JKLENBQUMsQ0FBQztVQUNwQjtRQUNKLENBQUMsQ0FBQyxDQUFDeUwsS0FBSyxDQUFFekwsQ0FBQyxJQUFLO1VBQ1osSUFBSUEsQ0FBQyxJQUFJQSxDQUFDLENBQUMwTCxTQUFTLEtBQUssbUJBQW1CLEVBQUU7WUFDMUNqSCxVQUFVLENBQUN5QixPQUFPLEdBQUcsS0FBSztZQUMxQnNFLGlCQUFpQixDQUFDLElBQUksQ0FBQztVQUMzQixDQUFDLE1BQU07WUFDSGdCLE9BQU8sQ0FBQ25DLEtBQUssQ0FBQ3JKLENBQUMsQ0FBQztZQUNoQnlELGNBQUssQ0FBQ2tJLG1CQUFtQixDQUFDM0wsQ0FBQyxFQUFFc0QsS0FBSyxDQUFDVyxNQUFNLENBQUM7VUFDOUM7UUFDSixDQUFDLENBQUM7TUFDTixDQUFDLE1BQU07UUFDSCxJQUFJUixjQUFLLENBQUNDLE1BQU0sQ0FBQ3FILFdBQVcsQ0FBQyxFQUFFO1VBQzNCQSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCO1FBRUFBLFdBQVcsQ0FBQ0csT0FBTyxHQUFHQSxPQUFPO1FBQzdCO1FBQ0FVLGlDQUF3QixDQUFDQyxPQUFPLENBQUNkLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFekgsS0FBSyxDQUFDVyxNQUFNLEVBQ2pFd0QsSUFBSSxJQUFLO1VBQ04sSUFBSUEsSUFBSSxFQUFFO1lBQ05vQixXQUFXLENBQUNDLG1CQUFtQixDQUFDckIsSUFBSSxDQUFDLENBQUM7WUFDdEM3RCxlQUFlLENBQUM2RCxJQUFJLENBQUM7VUFDekI7VUFFQWhELFVBQVUsQ0FBQ3lCLE9BQU8sR0FBRyxLQUFLO1FBQzlCLENBQUMsRUFBRSxNQUFNLENBQ1QsQ0FBQyxFQUFHNEYsU0FBUyxJQUFLO1VBQ2RySCxVQUFVLENBQUN5QixPQUFPLEdBQUcsS0FBSztVQUMxQnNFLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUMzQixDQUFDLENBQUM7TUFDVjtNQUVBLE9BQU8sSUFBSTtJQUNmLENBQUMsTUFBTTtNQUNILElBQUksQ0FBQy9HLGNBQUssQ0FBQ0MsTUFBTSxDQUFDMEgsY0FBYyxDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDaEUsMkJBQWtCLENBQUMyRSxZQUFZLENBQUNYLGNBQWMsQ0FBQyxFQUFFO1VBQ2xEQSxjQUFjLEdBQUdoRSwyQkFBa0IsQ0FBQzRFLGtCQUFrQixDQUFDWixjQUFjLEVBQUVILFNBQVMsQ0FBQztRQUNyRjtRQUVBLElBQUlnQixXQUFXLEdBQUdiLGNBQWMsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FDdENDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDOUIsSUFBSS9FLDJCQUFrQixDQUFDMkUsWUFBWSxDQUFDWCxjQUFjLENBQUMsSUFBSSxDQUFDYSxXQUFXLEVBQUU7VUFDakUsSUFBSXhGLElBQUksR0FBR2hELGNBQUssQ0FBQzJJLG9CQUFvQixDQUFDaEIsY0FBYyxDQUFDO1VBQ3JELElBQUksQ0FBQzNILGNBQUssQ0FBQ0MsTUFBTSxDQUFDK0MsSUFBSSxDQUFDRSxXQUFXLENBQUMsRUFBRTtZQUNqQytELG1CQUFZLENBQUMyQiw4QkFBOEIsQ0FBQy9JLEtBQUssQ0FBQ1csTUFBTSxFQUFFWCxLQUFLLENBQUNXLE1BQU0sRUFBRVgsS0FBSyxDQUFDUSxNQUFNLENBQUNnQixFQUFFLEVBQUUsTUFBTTtjQUMzRixJQUFJdEQsS0FBSyxHQUFHOEssa0JBQVMsQ0FBQ0MsYUFBYSxJQUFBQyxNQUFBLENBQUlsSixLQUFLLENBQUNRLE1BQU0sQ0FBQ2dCLEVBQUUscUJBQWtCc0csY0FBYyxDQUFDO2NBQ3ZGLElBQUksQ0FBQzNILGNBQUssQ0FBQ0MsTUFBTSxDQUFDbEMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLElBQUlpTCxHQUFHLEdBQUdqTCxLQUFLO2dCQUNmLElBQUkwQyxNQUFNLEtBQUssWUFBWSxJQUFJVCxjQUFLLENBQUNDLE1BQU0sQ0FBQ2xDLEtBQUssQ0FBQ2tMLEdBQUcsQ0FBQyxFQUFFO2tCQUNwREQsR0FBRyxHQUFHLENBQUMsQ0FBQztrQkFDUkEsR0FBRyxDQUFDQyxHQUFHLEdBQUdsTCxLQUFLO2dCQUNuQjtnQkFFQXFILFdBQVcsQ0FBQ0MsbUJBQW1CLENBQUMyRCxHQUFHLENBQUMsQ0FBQztnQkFDckM3SSxlQUFlLENBQUM2SSxHQUFHLENBQUM7Y0FDeEI7WUFDSixDQUFDLENBQUM7VUFDTjtRQUNKLENBQUMsTUFBTTtVQUNILElBQUlBLEdBQUcsR0FBR1IsV0FBVyxHQUFHN0UsMkJBQWtCLENBQUN1RixzQkFBc0IsQ0FBQ3ZCLGNBQWMsRUFBRUgsU0FBUyxDQUFDLEdBQUdHLGNBQWM7VUFDN0csSUFBSWxILE1BQU0sS0FBSyxZQUFZLElBQUlULGNBQUssQ0FBQ0MsTUFBTSxDQUFDMEgsY0FBYyxDQUFDc0IsR0FBRyxDQUFDLEVBQUU7WUFDN0RELEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDUkEsR0FBRyxDQUFDQyxHQUFHLEdBQUd0QixjQUFjO1VBQzVCO1VBRUF2QyxXQUFXLENBQUNDLG1CQUFtQixDQUFDMkQsR0FBRyxDQUFDLENBQUM7VUFDckM3SSxlQUFlLENBQUM2SSxHQUFHLENBQUM7UUFDeEI7TUFDSixDQUFDLE1BQU07UUFDSHZDLGVBQWUsQ0FBQyxDQUFDO01BQ3JCO01BRUF6RixVQUFVLENBQUN5QixPQUFPLEdBQUcsS0FBSztNQUMxQixPQUFPLEtBQUs7SUFDaEI7RUFDSjtFQUVBOUMsY0FBSyxDQUFDd0osU0FBUyxDQUFDLE1BQU07SUFDbEIsT0FBTyxNQUFNO01BQ1R0SixLQUFLLENBQUNrRCxNQUFNLENBQUMzQixHQUFHLEdBQUcsSUFBSTtJQUMzQixDQUFDO0VBQ0wsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOekIsY0FBSyxDQUFDd0osU0FBUyxDQUFDLE1BQU07SUFDbEJ0SixLQUFLLENBQUNrRCxNQUFNLENBQUMzQixHQUFHLEdBQUdBLEdBQUcsQ0FBQyxDQUFDO0VBQzVCLENBQUMsQ0FBQztFQUVGekIsY0FBSyxDQUFDd0osU0FBUyxDQUFDLE1BQU07SUFDbEJ0SixLQUFLLENBQUNrRCxNQUFNLENBQUMzQixHQUFHLEdBQUdBLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUlnSSxtQkFBbUIsR0FBR3BKLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSSxNQUFNLENBQUMrSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHL0ksTUFBTSxDQUFDK0ksbUJBQW1CO0lBQ3BHQSxtQkFBbUIsQ0FBQ0MsYUFBYSxHQUFHckosY0FBSyxDQUFDQyxNQUFNLENBQUNtSixtQkFBbUIsQ0FBQ0MsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHRCxtQkFBbUIsQ0FBQ0MsYUFBYTtJQUU1SCxJQUFJQyxZQUFZLEdBQUd0SixjQUFLLENBQUN1SixxQkFBcUIsQ0FBQ2xKLE1BQU0sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDO0lBQzVFLElBQUlpSixZQUFZLEtBQUssSUFBSSxJQUFJQSxZQUFZLEtBQUssSUFBSSxFQUFFO01BQ2hELElBQUlFLFlBQVksR0FBRztRQUNmQyxTQUFTLEVBQUV0QyxrQkFBUyxDQUFDdUMsY0FBYztRQUNuQ0MsT0FBTyxFQUFFLENBQ0w7VUFDSUMsVUFBVSxFQUFFO1FBQ2hCLENBQUM7TUFFVCxDQUFDO01BRURSLG1CQUFtQixDQUFDQyxhQUFhLENBQUNqTSxJQUFJLENBQUNvTSxZQUFZLENBQUM7SUFDeEQsQ0FBQyxNQUFNO01BQ0h6QyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZCO0lBRUFFLG1CQUFZLENBQUM0QyxnQkFBZ0IsQ0FBQ1QsbUJBQW1CLEVBQUV2SixLQUFLLENBQUNrRCxNQUFNLEVBQUVsRCxLQUFLLENBQUNXLE1BQU0sQ0FBQztJQUM5RXlHLG1CQUFZLENBQUM2QyxzQkFBc0IsQ0FBQ2pLLEtBQUssQ0FBQ1csTUFBTSxFQUFFSCxNQUFNLENBQUM7SUFDekRDLFNBQVMsQ0FBQ0QsTUFBTSxDQUFDO0lBRWpCLEtBQUssTUFBTXlDLEtBQUssSUFBSXBDLE1BQU0sRUFBRTtNQUN4QixJQUFJcUMsTUFBTSxHQUFHRCxLQUFLLENBQUNDLE1BQU07TUFDekIsSUFBSSxDQUFDL0MsY0FBSyxDQUFDQyxNQUFNLENBQUM4QyxNQUFNLENBQUMsRUFBRTtRQUN2QkEsTUFBTSxDQUFDM0IsR0FBRyxDQUFDMkksa0JBQWtCLENBQUMsQ0FBQztNQUNuQztJQUNKO0lBRUEvSSxVQUFVLENBQUN5QixPQUFPLEdBQUcsS0FBSztJQUMxQixJQUFJc0IsS0FBSyxHQUFHLElBQUlpRCxjQUFLLENBQUNuSCxLQUFLLENBQUNrRCxNQUFNLEVBQUVsRCxLQUFLLENBQUNXLE1BQU0sRUFBRSxJQUFJLENBQUM7SUFDdkR5RyxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUN1QyxjQUFjLEVBQUUzRixLQUFLLENBQUM7O0lBRXZEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQUosMkJBQWtCLENBQUNxRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFFMUMsT0FBTyxNQUFNO01BQ1QvQyxtQkFBWSxDQUFDZ0QsNEJBQTRCLENBQUNwSyxLQUFLLENBQUNrRCxNQUFNLENBQUM7SUFDM0QsQ0FBQztFQUNMLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTnBELGNBQUssQ0FBQ3dKLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUksQ0FBQ25KLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNRLE1BQU0sQ0FBQyxJQUFJLENBQUNMLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNDLE1BQU0sQ0FBQyxFQUFFO01BQzVEc0YsV0FBVyxDQUFDdkYsS0FBSyxDQUFDQyxNQUFNLENBQUM7SUFDN0I7RUFDSixDQUFDLEVBQUUsQ0FBQ0QsS0FBSyxDQUFDUSxNQUFNLEVBQUVSLEtBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7RUFFaENILGNBQUssQ0FBQ3dKLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUksQ0FBQ25KLGNBQUssQ0FBQ0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsRUFBRTtNQUM3QjZHLGlCQUFpQixDQUFDN0csWUFBWSxDQUFDO0lBQ25DO0VBQ0osQ0FBQyxFQUFFLENBQUNBLFlBQVksQ0FBQyxDQUFDO0VBRWxCLE1BQU00RSxnQkFBZ0IsR0FBSW9GLEdBQUcsSUFBSztJQUM5QixJQUFJeEosTUFBTSxHQUFHLEVBQUU7SUFDZixLQUFLLE1BQU15SixPQUFPLElBQUlELEdBQUcsQ0FBQ0UsUUFBUSxFQUFFO01BQ2hDLEtBQUssTUFBTXhGLFNBQVMsSUFBSXVGLE9BQU8sQ0FBQ3hGLFVBQVUsRUFBRTtRQUN4QyxJQUFJQyxTQUFTLENBQUNDLElBQUksS0FBSyxhQUFhLEVBQUU7VUFDbEMsS0FBSyxNQUFNd0YsUUFBUSxJQUFJekYsU0FBUyxDQUFDRCxVQUFVLEVBQUU7WUFDekNqRSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3FJLE1BQU0sQ0FBQ3NCLFFBQVEsQ0FBQzNKLE1BQU0sQ0FBQztVQUMzQztRQUNKO01BQ0o7SUFDSjtJQUVBLE9BQU9BLE1BQU07RUFDakIsQ0FBQztFQUVELE1BQU0yRSxtQkFBbUIsR0FBSXJCLElBQUksSUFBSztJQUNsQyxJQUFJc0csVUFBVSxHQUFHLElBQUk7SUFFckIsSUFBSTdKLE1BQU0sS0FBSyxZQUFZLEVBQUU7TUFDekI2SixVQUFVLEdBQUcsQ0FBQyxDQUFDO01BRWYsSUFBSXRLLGNBQUssQ0FBQ0MsTUFBTSxDQUFDK0QsSUFBSSxDQUFDLEVBQUU7UUFDcEIsT0FBTyxJQUFJO01BQ2Y7TUFFQSxJQUFJaUYsR0FBRyxHQUFHakYsSUFBSSxDQUFDaUYsR0FBRztNQUNsQixJQUFJLENBQUNqSixjQUFLLENBQUNDLE1BQU0sQ0FBQ2dKLEdBQUcsQ0FBQyxFQUFFO1FBQ3BCLElBQUlqRCxVQUFVLEdBQUduSixNQUFNLENBQUNvSixtQkFBbUIsQ0FBQ2dELEdBQUcsQ0FBQztRQUVoRCxLQUFLLElBQUkvSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc4SCxVQUFVLENBQUN4SSxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO1VBQ3hDLElBQUlnSSxRQUFRLEdBQUdGLFVBQVUsQ0FBQzlILENBQUMsQ0FBQztVQUM1QixJQUFJcU0sTUFBTSxHQUFHckUsUUFBUSxDQUFDc0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUNoQyxJQUFJQyxFQUFFLEdBQUdILFVBQVU7VUFFbkIsS0FBSyxJQUFJNUYsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNkYsTUFBTSxDQUFDL00sTUFBTSxFQUFFa0gsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSWdHLEtBQUssR0FBR0gsTUFBTSxDQUFDN0YsQ0FBQyxDQUFDO1lBQ3JCLElBQUlBLENBQUMsR0FBRzZGLE1BQU0sQ0FBQy9NLE1BQU0sR0FBRyxDQUFDLEVBQUU7Y0FDdkIsSUFBSXdDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDd0ssRUFBRSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QkQsRUFBRSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDbEI7Y0FFQUQsRUFBRSxHQUFHQSxFQUFFLENBQUNDLEtBQUssQ0FBQztZQUNsQixDQUFDLE1BQU07Y0FDSEQsRUFBRSxDQUFDQyxLQUFLLENBQUMsR0FBR3pCLEdBQUcsQ0FBQy9DLFFBQVEsQ0FBQztZQUM3QjtVQUNKO1FBQ0o7TUFDSjtJQUNKLENBQUMsTUFBTTtNQUNIb0UsVUFBVSxHQUFHdEcsSUFBSTtJQUNyQjtJQUVBLE9BQU9zRyxVQUFVO0VBQ3JCLENBQUM7RUFFRCxTQUFTNUksT0FBT0EsQ0FBQSxFQUFHO0lBQ2ZpQywyQkFBa0IsQ0FBQ3FHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztJQUMzQyxLQUFLLElBQUk5TCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3QyxNQUFNLENBQUNsRCxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO01BQ3BDLElBQUk0RSxLQUFLLEdBQUdwQyxNQUFNLENBQUN4QyxDQUFDLENBQUM7TUFDckI0RSxLQUFLLENBQUNDLE1BQU0sQ0FBQzNCLEdBQUcsQ0FBQ0ssS0FBSyxDQUFDLENBQUM7SUFDNUI7SUFFQTNCLE1BQU0sQ0FBQzJDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDekMsY0FBSyxDQUFDQyxNQUFNLENBQUNKLEtBQUssQ0FBQzhLLGtCQUFrQixDQUFDLEVBQUU7TUFDekM5SyxLQUFLLENBQUM4SyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQztJQUVBLElBQUksQ0FBQzNLLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUMrSyxrQkFBa0IsQ0FBQyxFQUFFO01BQ3pDL0ssS0FBSyxDQUFDK0ssa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEM7SUFFQWpILDJCQUFrQixDQUFDcUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0VBQzlDO0VBRUEsU0FBUzlGLFVBQVVBLENBQUNGLElBQUksRUFBRTtJQUN0QixJQUFJLENBQUNoRSxjQUFLLENBQUNDLE1BQU0sQ0FBQytELElBQUksQ0FBQyxFQUFFO01BQ3JCLEtBQUssTUFBTTZHLEdBQUcsSUFBSWhPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDa0gsSUFBSSxDQUFDLEVBQUU7UUFDakMsSUFBSWxCLEtBQUssR0FBR3VCLFFBQVEsQ0FBQ3dHLEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUM3SyxjQUFLLENBQUNDLE1BQU0sQ0FBQzZDLEtBQUssQ0FBQyxFQUFFO1VBQ3RCQSxLQUFLLENBQUNDLE1BQU0sQ0FBQzNCLEdBQUcsQ0FBQ3JELEtBQUssR0FBRytFLEtBQUssQ0FBQ0MsTUFBTSxDQUFDM0IsR0FBRyxDQUFDc0UsVUFBVSxDQUFDMUIsSUFBSSxDQUFDNkcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ3pFO01BQ0o7SUFDSjtFQUNKO0VBRUEsU0FBU3pGLFdBQVdBLENBQUNwQixJQUFJLEVBQUU7SUFDdkIsSUFBSThHLFlBQVksR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ0UsU0FBUyxDQUFDakgsSUFBSSxDQUFDLENBQUM7SUFDbkQsS0FBSyxJQUFJOUYsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd0MsTUFBTSxDQUFDbEQsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNwQyxJQUFJNEUsS0FBSyxHQUFHcEMsTUFBTSxDQUFDeEMsQ0FBQyxDQUFDO01BQ3JCLElBQUk4RSxJQUFJLEdBQUdmLFlBQVksQ0FBQ2EsS0FBSyxDQUFDekIsRUFBRSxFQUFFeUosWUFBWSxDQUFDO01BQy9DLElBQUlJLFdBQVcsR0FBR2xJLElBQUksQ0FBQ0UsV0FBVyxDQUFDRixJQUFJLENBQUNHLGFBQWEsQ0FBQztNQUN0RCxJQUFJLENBQUNuRCxjQUFLLENBQUNDLE1BQU0sQ0FBQzZDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDM0IsR0FBRyxDQUFDLEVBQUU7UUFDakM0QixJQUFJLENBQUNFLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDRyxhQUFhLENBQUMsR0FBR0wsS0FBSyxDQUFDQyxNQUFNLENBQUMzQixHQUFHLENBQUNzRSxVQUFVLENBQUN3RixXQUFXLEVBQUUsSUFBSSxDQUFDO01BQ3pGLENBQUMsTUFBTTtRQUNIbkQsT0FBTyxDQUFDbkMsS0FBSyxDQUFDLGtEQUFrRCxHQUFHOUMsS0FBSyxDQUFDekIsRUFBRSxDQUFDO01BQ2hGO0lBQ0o7SUFFQXZCLE1BQU0sQ0FBQzJDLE9BQU8sR0FBR3FJLFlBQVk7SUFDN0IsSUFBSSxDQUFDOUssY0FBSyxDQUFDQyxNQUFNLENBQUNKLEtBQUssQ0FBQ3NMLGtCQUFrQixDQUFDLEVBQUU7TUFDekN0TCxLQUFLLENBQUNzTCxrQkFBa0IsQ0FBQ0wsWUFBWSxDQUFDO0lBQzFDOztJQUVBO0lBQ0k7SUFDSjtFQUNKO0VBRUFuTCxjQUFLLENBQUN3SixTQUFTLENBQUMsTUFBTTtJQUNsQixJQUFJLENBQUNuSixjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDQyxNQUFNLENBQUMsRUFBRTtNQUM3QnNGLFdBQVcsQ0FBQ3ZGLEtBQUssQ0FBQ0MsTUFBTSxDQUFDO0lBQzdCO0VBQ0osQ0FBQyxFQUFFLENBQUNELEtBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7RUFFbEIsTUFBTXVFLFFBQVEsR0FBSWhELEVBQUUsSUFBSztJQUNyQixLQUFLLElBQUluRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3QyxNQUFNLENBQUNsRCxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO01BQ3BDLElBQUl3QyxNQUFNLENBQUN4QyxDQUFDLENBQUMsQ0FBQ21ELEVBQUUsS0FBS0EsRUFBRSxFQUFFO1FBQ3JCLE9BQU9YLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQztNQUNwQjtJQUNKO0lBRUEsT0FBTyxJQUFJO0VBQ2YsQ0FBQztFQUVELE1BQU1vRSxXQUFXLEdBQUlqQixFQUFFLElBQUs7SUFDeEIsS0FBSyxJQUFJbkQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd0MsTUFBTSxDQUFDbEQsTUFBTSxFQUFFVSxDQUFDLEVBQUUsRUFBRTtNQUNwQyxJQUFJd0MsTUFBTSxDQUFDeEMsQ0FBQyxDQUFDLENBQUNtRCxFQUFFLEtBQUtBLEVBQUUsRUFBRTtRQUNyQlgsTUFBTSxDQUFDMEssTUFBTSxDQUFDbE4sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN2QjtJQUNKO0lBQ0ErQyxhQUFhLENBQUN3QixPQUFPLENBQUNHLE1BQU0sQ0FBQ3ZCLEVBQUUsQ0FBQztFQUNwQyxDQUFDO0VBRUQsU0FBU29DLGdCQUFnQkEsQ0FBQ1gsS0FBSyxFQUFFc0IsT0FBTyxFQUF1QjtJQUFBLElBQXJCaUgsWUFBWSxHQUFBOU4sU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWdJLFNBQUEsR0FBQWhJLFNBQUEsTUFBRyxJQUFJO0lBRXpELElBQUksQ0FBQ3lDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkMsS0FBSyxDQUFDVixRQUFRLENBQUMsRUFBRTtNQUMvQixJQUFJa0osZUFBZSxHQUFHbEgsT0FBTztNQUM3QixLQUFLLElBQUlsRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3QyxNQUFNLENBQUNsRCxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO1FBQ3BDLElBQUl3QyxNQUFNLENBQUN4QyxDQUFDLENBQUMsS0FBSzRFLEtBQUssSUFBSXBDLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDa0UsUUFBUSxLQUFLVSxLQUFLLENBQUNWLFFBQVEsRUFBRTtVQUM5RGtKLGVBQWUsR0FBR0EsZUFBZSxJQUFJLEVBQUV0TCxjQUFLLENBQUNDLE1BQU0sQ0FBQ1MsTUFBTSxDQUFDeEMsQ0FBQyxDQUFDLENBQUMwSCxLQUFLLENBQUMsSUFBSWxGLE1BQU0sQ0FBQ3hDLENBQUMsQ0FBQyxDQUFDMEgsS0FBSyxDQUFDcEksTUFBTSxLQUFLLENBQUMsQ0FBQztRQUN6RztNQUNKO01BRUFxRCxpQkFBaUIsQ0FBQ2lDLEtBQUssQ0FBQ1YsUUFBUSxDQUFDLEdBQUdrSixlQUFlO0lBQ3ZEO0lBRUEsSUFBSUQsWUFBWSxJQUFJLENBQUNyTCxjQUFLLENBQUNDLE1BQU0sQ0FBQ1Usc0JBQXNCLENBQUM4QixPQUFPLENBQUMsSUFBSWtCLDJCQUFrQixDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7TUFDNUdqRCxzQkFBc0IsQ0FBQzhCLE9BQU8sQ0FBQzVCLGlCQUFpQixDQUFDO0lBQ3JEO0lBRUEsT0FBT0EsaUJBQWlCO0VBQzVCO0VBRUEsTUFBTTBLLGFBQWEsR0FBR0EsQ0FBQ3pJLEtBQUssRUFBRXpCLEVBQUUsRUFBRXRELEtBQUssS0FBSztJQUN4QyxJQUFJaUQsVUFBVSxDQUFDeUIsT0FBTyxLQUFLLEtBQUssRUFBRTtNQUM5QkssS0FBSyxDQUFDOEMsS0FBSyxHQUFHLElBQUk7TUFDbEIsSUFBSXhCLE9BQU8sR0FBR3RCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDM0IsR0FBRyxDQUFDZ0MsUUFBUSxDQUFBOUYsYUFBQSxDQUFBQSxhQUFBLEtBQ2hDd0MsTUFBTSxDQUFDMkMsT0FBTztRQUNqQixDQUFDcEIsRUFBRSxHQUFHdEQ7TUFBSyxJQUNaQSxLQUFLLENBQUMsS0FBSyxLQUFLO01BQ25CMEYsZ0JBQWdCLENBQUNYLEtBQUssRUFBRXNCLE9BQU8sQ0FBQztNQUVoQyxPQUFPQSxPQUFPO0lBQ2xCO0lBRUEsT0FBTyxJQUFJO0VBQ2YsQ0FBQztFQUVELE1BQU1uQyxZQUFZLEdBQUdBLENBQUNaLEVBQUUsRUFBRW1LLElBQUksS0FBSztJQUMvQixJQUFJeEksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUl5SSxhQUFhLEdBQUdELElBQUk7SUFDeEIsSUFBSXhMLGNBQUssQ0FBQ0MsTUFBTSxDQUFDdUwsSUFBSSxDQUFDLEVBQUU7TUFDcEJDLGFBQWEsR0FBRzNMLE1BQU0sQ0FBQzJDLE9BQU87SUFDbEM7SUFFQSxJQUFJLENBQUN6QyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3dMLGFBQWEsQ0FBQyxFQUFFO01BQzlCLElBQUlsQixNQUFNLEdBQUdsSixFQUFFLENBQUNtSixLQUFLLENBQUMsR0FBRyxDQUFDO01BQzFCLElBQUlELE1BQU0sQ0FBQy9NLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckJ3RixJQUFJLENBQUNFLFdBQVcsR0FBR3VJLGFBQWE7UUFDaEN6SSxJQUFJLENBQUNHLGFBQWEsR0FBR29ILE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDbEMsQ0FBQyxNQUFNLElBQUlBLE1BQU0sQ0FBQy9NLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUIsSUFBSWlOLEVBQUUsR0FBR2dCLGFBQWE7UUFDdEIsS0FBSyxJQUFJdk4sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHcU0sTUFBTSxDQUFDL00sTUFBTSxHQUFHLENBQUMsRUFBRVUsQ0FBQyxFQUFFLEVBQUU7VUFDeEMsSUFBSSxDQUFDOEIsY0FBSyxDQUFDQyxNQUFNLENBQUN3SyxFQUFFLENBQUNGLE1BQU0sQ0FBQ3JNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5QnVNLEVBQUUsR0FBR0EsRUFBRSxDQUFDRixNQUFNLENBQUNyTSxDQUFDLENBQUMsQ0FBQztVQUN0QixDQUFDLE1BQU07WUFDSHVNLEVBQUUsQ0FBQ0YsTUFBTSxDQUFDck0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEJ1TSxFQUFFLEdBQUdBLEVBQUUsQ0FBQ0YsTUFBTSxDQUFDck0sQ0FBQyxDQUFDLENBQUM7VUFDdEI7UUFDSjtRQUVBLElBQUksQ0FBQzhCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDd0ssRUFBRSxDQUFDLEVBQUU7VUFDbkJ6SCxJQUFJLENBQUNFLFdBQVcsR0FBR3VILEVBQUU7VUFDckJ6SCxJQUFJLENBQUNHLGFBQWEsR0FBR29ILE1BQU0sQ0FBQ0EsTUFBTSxDQUFDL00sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRDtNQUNKO0lBQ0o7SUFFQSxPQUFPd0YsSUFBSTtFQUNmLENBQUM7RUFFRCxNQUFNcEIsY0FBYyxHQUFHQSxDQUFDUCxFQUFFLEVBQUV0RCxLQUFLLEtBQUs7SUFDbEMsSUFBSWlGLElBQUksR0FBR2YsWUFBWSxDQUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDO0lBRWpDLElBQUksQ0FBQ3JCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDK0MsSUFBSSxDQUFDRSxXQUFXLENBQUMsSUFBSSxDQUFDbEQsY0FBSyxDQUFDQyxNQUFNLENBQUMrQyxJQUFJLENBQUNHLGFBQWEsQ0FBQyxJQUFJbkMsVUFBVSxDQUFDeUIsT0FBTyxLQUFLLEtBQUssRUFBRTtNQUN0R08sSUFBSSxDQUFDRSxXQUFXLENBQUNGLElBQUksQ0FBQ0csYUFBYSxDQUFDLEdBQUdwRixLQUFLO01BQzVDLElBQUlxRyxPQUFPLEdBQUcsS0FBSztNQUNuQixJQUFJdEIsS0FBSyxHQUFHdUIsUUFBUSxDQUFDaEQsRUFBRSxDQUFDO01BRXhCLElBQUksQ0FBQ3JCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkMsS0FBSyxDQUFDLEVBQUU7UUFDdEJzQixPQUFPLEdBQUdtSCxhQUFhLENBQUN6SSxLQUFLLEVBQUV6QixFQUFFLEVBQUV0RCxLQUFLLENBQUM7UUFDekMsS0FBSyxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUd3QyxNQUFNLENBQUNsRCxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO1VBQ3BDLElBQUl3TixVQUFVLEdBQUdoTCxNQUFNLENBQUN4QyxDQUFDLENBQUM7VUFDMUIsSUFBSXlOLGVBQWUsR0FBR0QsVUFBVSxDQUFDM0ksTUFBTSxDQUFDM0IsR0FBRyxDQUFDd0ssa0JBQWtCLENBQUMsQ0FBQztVQUNoRSxJQUFJLENBQUM1TCxjQUFLLENBQUNDLE1BQU0sQ0FBQzBMLGVBQWUsQ0FBQyxFQUFFO1lBQ2hDLElBQUk3SSxLQUFLLEtBQUs0SSxVQUFVLElBQUlDLGVBQWUsS0FBSzdJLEtBQUssQ0FBQ0MsTUFBTSxDQUFDM0IsR0FBRyxDQUFDd0ssa0JBQWtCLENBQUMsQ0FBQyxFQUFFO2NBQ25GLElBQUlDLFlBQVksR0FBR0gsVUFBVSxDQUFDM0ksTUFBTSxDQUFDM0IsR0FBRyxDQUFDQyxFQUFFO2NBQzNDLElBQUl5SyxhQUFhLEdBQUc3SixZQUFZLENBQUM0SixZQUFZLEVBQUUsSUFBSSxDQUFDO2NBRXBELElBQUksQ0FBQzdMLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkwsYUFBYSxDQUFDLEVBQUU7Z0JBQzlCLElBQUlDLGFBQWEsR0FBR0QsYUFBYSxDQUFDNUksV0FBVyxDQUFDNEksYUFBYSxDQUFDM0ksYUFBYSxDQUFDO2dCQUMxRTRFLE9BQU8sQ0FBQ2lFLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRUQsYUFBYSxDQUFDO2dCQUNoRFIsYUFBYSxDQUFDRyxVQUFVLEVBQUVHLFlBQVksRUFBRUUsYUFBYSxDQUFDO2NBQzFEO1lBQ0o7VUFDSjtRQUNKO01BQ0o7TUFFQSxJQUFJLENBQUMvTCxjQUFLLENBQUNDLE1BQU0sQ0FBQ0osS0FBSyxDQUFDOEssa0JBQWtCLENBQUMsRUFBRTtRQUN6QzlLLEtBQUssQ0FBQzhLLGtCQUFrQixDQUFDdkcsT0FBTyxHQUFHLElBQUksR0FBR3RFLE1BQU0sQ0FBQzJDLE9BQU8sRUFBRXBCLEVBQUUsRUFBRXRELEtBQUssQ0FBQztNQUN4RTtNQUVBLElBQUksQ0FBQ2lDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUMrSyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3pDL0ssS0FBSyxDQUFDK0ssa0JBQWtCLENBQUM5SyxNQUFNLENBQUMyQyxPQUFPLEVBQUVwQixFQUFFLEVBQUV0RCxLQUFLLENBQUM7TUFDdkQ7SUFDSjtJQUVBNEYsMkJBQWtCLENBQUNxRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7SUFDM0MvQyxtQkFBWSxDQUFDSSxtQ0FBbUMsQ0FBQ3hILEtBQUssQ0FBQ1EsTUFBTSxDQUFDZ0IsRUFBRSxDQUFDO0lBRWpFLElBQUkwQyxLQUFLLEdBQUcsSUFBSWlELGNBQUssQ0FBQ25ILEtBQUssQ0FBQ2tELE1BQU0sRUFBRWxELEtBQUssQ0FBQ1csTUFBTSxFQUFFVixNQUFNLENBQUMyQyxPQUFPLENBQUM7SUFDakV3RSxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUM4RSxZQUFZLEVBQUVsSSxLQUFLLENBQUM7RUFDekQsQ0FBQztFQUVELE1BQU00QixhQUFhLEdBQUdBLENBQUN0RSxFQUFFLEVBQUV1RSxLQUFLLEtBQUs7SUFDakMsSUFBSTlDLEtBQUssR0FBR3VCLFFBQVEsQ0FBQ2hELEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUNyQixjQUFLLENBQUNDLE1BQU0sQ0FBQzZDLEtBQUssQ0FBQyxFQUFFO01BQ3RCQSxLQUFLLENBQUM4QyxLQUFLLEdBQUdBLEtBQUs7SUFDdkI7RUFDSixDQUFDO0VBRUQsTUFBTTFELFFBQVEsR0FBR0EsQ0FBQ2IsRUFBRSxFQUFFMEIsTUFBTSxFQUFFWCxRQUFRLEVBQUVDLGVBQWUsS0FBSztJQUN4RCxJQUFJUyxLQUFLLEdBQUd1QixRQUFRLENBQUNoRCxFQUFFLENBQUM7SUFDeEIsSUFBSXVFLEtBQUssR0FBRyxJQUFJO0lBRWhCLElBQUksQ0FBQzVGLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkMsS0FBSyxDQUFDLEVBQUU7TUFDdEI4QyxLQUFLLEdBQUc5QyxLQUFLLENBQUM4QyxLQUFLO01BQ25CdEQsV0FBVyxDQUFDakIsRUFBRSxDQUFDO0lBQ25CO0lBRUF5QixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1ZBLEtBQUssQ0FBQ3pCLEVBQUUsR0FBR0EsRUFBRTtJQUNieUIsS0FBSyxDQUFDQyxNQUFNLEdBQUdBLE1BQU07SUFDckJELEtBQUssQ0FBQzhDLEtBQUssR0FBR0EsS0FBSztJQUNuQjlDLEtBQUssQ0FBQ1QsZUFBZSxHQUFHQSxlQUFlO0lBQ3ZDUyxLQUFLLENBQUNWLFFBQVEsR0FBR0EsUUFBUTtJQUN6QjFCLE1BQU0sQ0FBQ3RELElBQUksQ0FBQzBGLEtBQUssQ0FBQztJQUVsQixJQUFJaEQsTUFBTSxDQUFDMkMsT0FBTyxFQUFFO01BQ2hCMkMsV0FBVyxDQUFDdEYsTUFBTSxDQUFDMkMsT0FBTyxDQUFDO0lBQy9CO0lBRUEsT0FBT0ssS0FBSztFQUNoQixDQUFDO0VBRUQsTUFBTWpCLHNCQUFzQixHQUFHQSxDQUFDTixJQUFJLEVBQUVPLE9BQU8sRUFBRW9LLFNBQVMsS0FBSztJQUN6RCxJQUFHLE9BQU9BLFNBQVMsS0FBSyxRQUFRLEtBQUtsTSxjQUFLLENBQUNDLE1BQU0sQ0FBQzZCLE9BQU8sQ0FBQyxJQUFJQSxPQUFPLENBQUN0RSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDakYsT0FBTzBPLFNBQVM7SUFDcEI7SUFFQSxJQUFJQyxhQUFhLEdBQUcsSUFBSTtJQUV4QixLQUFLLElBQUlqTyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc0RCxPQUFPLENBQUN0RSxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO01BQ3JDLElBQUk0RCxPQUFPLENBQUM1RCxDQUFDLENBQUMsQ0FBQ21ELEVBQUUsS0FBSzZLLFNBQVMsRUFBRTtRQUM3QkMsYUFBYSxHQUFHckssT0FBTyxDQUFDNUQsQ0FBQyxDQUFDO01BQzlCO0lBQ0o7SUFFQTBELGNBQWMsQ0FBQ0wsSUFBSSxFQUFFNEssYUFBYSxDQUFDO0lBQ25DLE9BQU9BLGFBQWE7RUFDeEIsQ0FBQztFQUVELE1BQU0zSyxXQUFXLEdBQUdBLENBQUNELElBQUksRUFBRXhELEtBQUssS0FBSztJQUNqQzhCLEtBQUssQ0FBQzhLLGtCQUFrQixDQUFBck4sYUFBQSxDQUFBQSxhQUFBLEtBQ2pCd0MsTUFBTSxDQUFDMkMsT0FBTztNQUNqQixDQUFDbEIsSUFBSSxHQUFHeEQ7SUFBSyxFQUNoQixDQUFDO0lBRUYsSUFBRzhCLEtBQUssQ0FBQytLLGtCQUFrQixFQUFFO01BQ3pCL0ssS0FBSyxDQUFDK0ssa0JBQWtCLENBQUF0TixhQUFBLENBQUFBLGFBQUEsS0FDakJ3QyxNQUFNLENBQUMyQyxPQUFPO1FBQ2pCLENBQUNsQixJQUFJLEdBQUd4RDtNQUFLLEVBQ2hCLENBQUM7SUFDTjtFQUNKLENBQUM7RUFFRCxTQUFTcU8sTUFBTUEsQ0FBQ0MsSUFBSSxFQUFFO0lBQ2xCLE9BQ0tyTSxjQUFLLENBQUNDLE1BQU0sQ0FBQ29NLElBQUksQ0FBQzdILFFBQVEsQ0FBQyxJQUFJNkgsSUFBSSxDQUFDN0gsUUFBUSxDQUFDaEgsTUFBTSxLQUFLLENBQUMsR0FDdEQsSUFBSSxnQkFFSmhDLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQTZQLGFBQUEsY0FFUUQsSUFBSSxDQUFDN0gsUUFBUSxDQUFDeUUsR0FBRyxDQUFFeEUsT0FBTyxJQUFLO01BQzNCLElBQUl6RSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3dFLE9BQU8sQ0FBQ3BELEVBQUUsQ0FBQyxFQUFFO1FBQzFCb0QsT0FBTyxDQUFDcEQsRUFBRSxHQUFHRixjQUFjLEdBQUcsZUFBZTtNQUNqRDtNQUVBLG9CQUFPM0YsTUFBQSxDQUFBaUIsT0FBQSxDQUFBNlAsYUFBQTtRQUFLekIsR0FBRyxFQUFFMUosY0FBYztNQUFHLGdCQUM5QjNGLE1BQUEsQ0FBQWlCLE9BQUEsQ0FBQTZQLGFBQUEsQ0FBQ3pRLFFBQUEsQ0FBQVksT0FBTztRQUFDOFAsVUFBVSxFQUFFMU0sS0FBSyxDQUFDME0sVUFBVztRQUM3QmxNLE1BQU0sRUFBRW9FLE9BQVE7UUFDaEIrSCxRQUFRLEVBQUUzTSxLQUFLLENBQUMyTSxRQUFTO1FBQ3pCekosTUFBTSxFQUFFeUQsbUJBQW1CLENBQUMvQixPQUFPLENBQUU7UUFDckM0SCxJQUFJLEVBQUVBLENBQUEsS0FBTTtVQUNSLE9BQU8sQ0FBQ3JNLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSixLQUFLLENBQUNrRCxNQUFNLENBQUMzQixHQUFHLENBQUMsR0FBR3ZCLEtBQUssQ0FBQ2tELE1BQU0sQ0FBQzNCLEdBQUcsR0FBR0EsR0FBRyxDQUFDLENBQUM7UUFDckUsQ0FBRTtRQUNGWixNQUFNLEVBQUVYLEtBQUssQ0FBQ1csTUFBTztRQUNyQlYsTUFBTSxFQUFFQSxNQUFNLENBQUMyQztNQUFRLENBQy9CLENBQ0EsQ0FBQztJQUNWLENBQUMsQ0FFSixDQUFDO0VBRWxCO0VBRUEsT0FDSTNCLE9BQU8saUJBQ1B0RixNQUFBLENBQUFpQixPQUFBLENBQUE2UCxhQUFBO0lBQUtHLFNBQVMsRUFBRTVNLEtBQUssQ0FBQzRNLFNBQVU7SUFBQ3BMLEVBQUUsRUFBRXhCLEtBQUssQ0FBQ1EsTUFBTSxDQUFDZ0IsRUFBRztJQUFDcUwsS0FBSyxFQUN2RDdNLEtBQUssQ0FBQzRNLFNBQVMsS0FBSyxhQUFhLEdBQzdCek0sY0FBSyxDQUFDMk0sV0FBVyxDQUFDO01BQ2RDLE9BQU8sRUFBRSxRQUFRO01BQ2pCek4sTUFBTSxFQUFFLEdBQUc7TUFDWDBOLFFBQVEsRUFBRSxNQUFNO01BQ2hCQyxTQUFTLEVBQUU7SUFDZixDQUFDLEVBQUVqTixLQUFLLENBQUNRLE1BQU0sQ0FBQyxHQUVoQjtFQUNQLEdBRU8sQ0FBQ0wsY0FBSyxDQUFDQyxNQUFNLENBQUNKLEtBQUssQ0FBQ1EsTUFBTSxDQUFDZ0IsRUFBRSxDQUFDLEdBQzFCK0ssTUFBTSxDQUFDdk0sS0FBSyxDQUFDUSxNQUFNLENBQUMsZ0JBRXBCN0UsTUFBQSxDQUFBaUIsT0FBQSxDQUFBNlAsYUFBQSxjQUFLLCtCQUFrQyxDQUU5QyxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0wsSUFBQVMsUUFBQSxHQUFBQyxPQUFBLENBQUF2USxPQUFBLEdBRWNpRCxJQUFJIiwiaWdub3JlTGlzdCI6W119