@dcl/sdk 7.0.0-2536579928.commit-004d2e1 → 7.0.0-2569737935.commit-cdfa2fc

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.
@@ -4048,7 +4048,7 @@
4048
4048
  /**
4049
4049
  * @internal
4050
4050
  */
4051
- const COMPONENT_ID$9 = 1020;
4051
+ const COMPONENT_ID$a = 1020;
4052
4052
  /**
4053
4053
  * @internal
4054
4054
  */
@@ -4115,7 +4115,7 @@
4115
4115
  /**
4116
4116
  * @internal
4117
4117
  */
4118
- const COMPONENT_ID$8 = 1021;
4118
+ const COMPONENT_ID$9 = 1021;
4119
4119
  /**
4120
4120
  * @internal
4121
4121
  */
@@ -4198,7 +4198,7 @@
4198
4198
  /**
4199
4199
  * @internal
4200
4200
  */
4201
- const COMPONENT_ID$7 = 1013;
4201
+ const COMPONENT_ID$8 = 1013;
4202
4202
  /**
4203
4203
  * @internal
4204
4204
  */
@@ -4277,7 +4277,7 @@
4277
4277
  /**
4278
4278
  * @internal
4279
4279
  */
4280
- const COMPONENT_ID$6 = 1016;
4280
+ const COMPONENT_ID$7 = 1016;
4281
4281
  /**
4282
4282
  * @internal
4283
4283
  */
@@ -4296,6 +4296,79 @@
4296
4296
  }
4297
4297
  };
4298
4298
 
4299
+ /* eslint-disable */
4300
+ function createBasePBGLTFShape() {
4301
+ return { withCollisions: false, isPointerBlocker: false, visible: false, src: '' };
4302
+ }
4303
+ /**
4304
+ * @internal
4305
+ */
4306
+ const PBGLTFShape = {
4307
+ encode(message, writer = minimalExports.Writer.create()) {
4308
+ if (message.withCollisions === true) {
4309
+ writer.uint32(8).bool(message.withCollisions);
4310
+ }
4311
+ if (message.isPointerBlocker === true) {
4312
+ writer.uint32(16).bool(message.isPointerBlocker);
4313
+ }
4314
+ if (message.visible === true) {
4315
+ writer.uint32(24).bool(message.visible);
4316
+ }
4317
+ if (message.src !== '') {
4318
+ writer.uint32(34).string(message.src);
4319
+ }
4320
+ return writer;
4321
+ },
4322
+ decode(input, length) {
4323
+ const reader = input instanceof minimalExports.Reader ? input : new minimalExports.Reader(input);
4324
+ let end = length === undefined ? reader.len : reader.pos + length;
4325
+ const message = createBasePBGLTFShape();
4326
+ while (reader.pos < end) {
4327
+ const tag = reader.uint32();
4328
+ switch (tag >>> 3) {
4329
+ case 1:
4330
+ message.withCollisions = reader.bool();
4331
+ break;
4332
+ case 2:
4333
+ message.isPointerBlocker = reader.bool();
4334
+ break;
4335
+ case 3:
4336
+ message.visible = reader.bool();
4337
+ break;
4338
+ case 4:
4339
+ message.src = reader.string();
4340
+ break;
4341
+ default:
4342
+ reader.skipType(tag & 7);
4343
+ break;
4344
+ }
4345
+ }
4346
+ return message;
4347
+ }
4348
+ };
4349
+
4350
+ /**
4351
+ * @internal
4352
+ */
4353
+ const COMPONENT_ID$6 = 1041;
4354
+ /**
4355
+ * @internal
4356
+ */
4357
+ const GLTFShape = {
4358
+ serialize(value, builder) {
4359
+ const writer = PBGLTFShape.encode(value);
4360
+ const buffer = new Uint8Array(writer.finish(), 0, writer.len);
4361
+ builder.writeBuffer(buffer, false);
4362
+ },
4363
+ deserialize(reader) {
4364
+ return PBGLTFShape.decode(reader.buffer(), reader.remainingBytes());
4365
+ },
4366
+ create() {
4367
+ // TODO: this is a hack.
4368
+ return PBGLTFShape.decode(new Uint8Array());
4369
+ }
4370
+ };
4371
+
4299
4372
  /* eslint-disable */
4300
4373
  function createBaseColor3() {
4301
4374
  return { r: 0, g: 0, b: 0 };
@@ -5328,12 +5401,26 @@
5328
5401
  }
5329
5402
  };
5330
5403
 
5404
+ var ComponentIds;
5405
+ (function (ComponentIds) {
5406
+ ComponentIds[ComponentIds["AudioSource"] = 1020] = "AudioSource";
5407
+ ComponentIds[ComponentIds["AudioStream"] = 1021] = "AudioStream";
5408
+ ComponentIds[ComponentIds["BoxShape"] = 1013] = "BoxShape";
5409
+ ComponentIds[ComponentIds["CylinderShape"] = 1016] = "CylinderShape";
5410
+ ComponentIds[ComponentIds["GLTFShape"] = 1041] = "GLTFShape";
5411
+ ComponentIds[ComponentIds["NFTShape"] = 1040] = "NFTShape";
5412
+ ComponentIds[ComponentIds["PlaneShape"] = 1014] = "PlaneShape";
5413
+ ComponentIds[ComponentIds["SphereShape"] = 1015] = "SphereShape";
5414
+ ComponentIds[ComponentIds["TextShape"] = 1030] = "TextShape";
5415
+ ComponentIds[ComponentIds["UiTransform"] = 1050] = "UiTransform";
5416
+ })(ComponentIds || (ComponentIds = {}));
5331
5417
  function defineProtocolBufferComponents({ defineComponent }) {
5332
5418
  return {
5333
- AudioSource: defineComponent(COMPONENT_ID$9, AudioSource),
5334
- AudioStream: defineComponent(COMPONENT_ID$8, AudioStream),
5335
- BoxShape: defineComponent(COMPONENT_ID$7, BoxShape),
5336
- CylinderShape: defineComponent(COMPONENT_ID$6, CylinderShape),
5419
+ AudioSource: defineComponent(COMPONENT_ID$a, AudioSource),
5420
+ AudioStream: defineComponent(COMPONENT_ID$9, AudioStream),
5421
+ BoxShape: defineComponent(COMPONENT_ID$8, BoxShape),
5422
+ CylinderShape: defineComponent(COMPONENT_ID$7, CylinderShape),
5423
+ GLTFShape: defineComponent(COMPONENT_ID$6, GLTFShape),
5337
5424
  NFTShape: defineComponent(COMPONENT_ID$5, NFTShape),
5338
5425
  PlaneShape: defineComponent(COMPONENT_ID$4, PlaneShape),
5339
5426
  SphereShape: defineComponent(COMPONENT_ID$3, SphereShape),
@@ -5643,7 +5730,8 @@
5643
5730
  * - Use set and get only if you are sure that you're doing.
5644
5731
  */
5645
5732
  function createByteBuffer(options = {}) {
5646
- const initialROffset = options.reading?.currentOffset || 0;
5733
+ var _a;
5734
+ const initialROffset = ((_a = options.reading) === null || _a === void 0 ? void 0 : _a.currentOffset) || 0;
5647
5735
  let initialBuffer = null;
5648
5736
  let initialWOffset = 0;
5649
5737
  if (options.writing) {
@@ -5997,28 +6085,6 @@
5997
6085
  PutComponentOperation.read = read;
5998
6086
  })(PutComponentOperation || (PutComponentOperation = {}));
5999
6087
 
6000
- function networkTransport() {
6001
- // const rpc = new RpcTransport()
6002
- const rpc = {
6003
- send: () => { }
6004
- };
6005
- const type = 'network-transport';
6006
- return {
6007
- ...rpc,
6008
- type,
6009
- filter(message) {
6010
- // Echo message, ignore them
6011
- if (message.transportType === type) {
6012
- return false;
6013
- }
6014
- return !!message; // validComponents.includes(componentId)
6015
- }
6016
- };
6017
- }
6018
- function getTransports() {
6019
- return [networkTransport()];
6020
- }
6021
-
6022
6088
  var CrdtUtils;
6023
6089
  (function (CrdtUtils) {
6024
6090
  // TODO: use this again
@@ -6070,7 +6136,7 @@
6070
6136
  // function filter(componentId: number) {}
6071
6137
  // }
6072
6138
 
6073
- function crdtSceneSystem({ engine, availableTransports }) {
6139
+ function crdtSceneSystem({ engine, transports }) {
6074
6140
  // CRDT Client
6075
6141
  const crdtClient = distExports.crdtProtocol();
6076
6142
  // Messages that we received at transport.onMessage waiting to be processed
@@ -6079,7 +6145,6 @@
6079
6145
  const transportMessages = [];
6080
6146
  // Map of entities already processed at least once
6081
6147
  const crdtEntities = new Map();
6082
- const transports = [...getTransports(), ...(availableTransports || [])];
6083
6148
  transports.forEach((transport) => (transport.onmessage = parseChunkMessage(transport.type)));
6084
6149
  /**
6085
6150
  *
@@ -6484,10 +6549,7 @@
6484
6549
  */
6485
6550
  function Engine({ transports } = {}) {
6486
6551
  const engine = preEngine();
6487
- const crdtSystem = crdtSceneSystem({
6488
- engine,
6489
- availableTransports: transports
6490
- });
6552
+ const crdtSystem = crdtSceneSystem({ engine, transports: transports || [] });
6491
6553
  const baseComponents = defineSdkComponents(engine);
6492
6554
  function update(dt) {
6493
6555
  crdtSystem.receiveMessages();
@@ -6741,49 +6803,70 @@
6741
6803
  }
6742
6804
  };
6743
6805
 
6806
+ const componentIds = Object.values(ComponentIds)
6807
+ .filter((a) => typeof a === 'number')
6808
+ .map(Number);
6809
+ const rendererComponentIds = componentIds.concat(LEGACY_COMPONENT_ID.TRANSFORM);
6810
+ function createRendererTransport() {
6811
+ const type = 'renderer';
6812
+ return {
6813
+ type,
6814
+ send(message) {
6815
+ // TODO: replace with new rpc
6816
+ dcl
6817
+ .callRpc('@decentraland/ExperimentalAPI', 'sendToRenderer', [
6818
+ { data: message }
6819
+ ])
6820
+ .catch(dcl.error);
6821
+ },
6822
+ filter(message) {
6823
+ // Echo message, ignore them
6824
+ if (message.transportType === type) {
6825
+ return false;
6826
+ }
6827
+ // Only send renderer components (Proto Generated)
6828
+ if (!rendererComponentIds.includes(message.componentId)) {
6829
+ return false;
6830
+ }
6831
+ return !!message;
6832
+ }
6833
+ };
6834
+ }
6835
+
6836
+ function createNetworkTransport() {
6837
+ // const rpc = new RpcTransport()
6838
+ function send(..._args) {
6839
+ // console.log('NetworkMessage Sent: ', ...args)
6840
+ }
6841
+ const type = 'network-transport';
6842
+ return {
6843
+ send,
6844
+ type,
6845
+ filter(message) {
6846
+ // Echo message, ignore them
6847
+ if (message.transportType === type) {
6848
+ return false;
6849
+ }
6850
+ return !!message; // validComponents.includes(componentId)
6851
+ }
6852
+ };
6853
+ }
6854
+
6744
6855
  /**
6745
6856
  * @alpha * This file initialization is an alpha one. This is based on the old-ecs
6746
6857
  * init and it'll be changing.
6747
6858
  */
6748
- let ExperimentalAPI = undefined;
6749
6859
  const engine = Engine({
6750
- transports: [createRendererTransport()]
6860
+ transports: [createRendererTransport(), createNetworkTransport()]
6751
6861
  });
6752
6862
  if (dcl) {
6753
- dcl
6754
- .loadModule('@decentraland/ExperimentalAPI', {})
6755
- .then((module) => {
6756
- ExperimentalAPI = module;
6757
- })
6758
- .catch((err) => {
6863
+ dcl.loadModule('@decentraland/ExperimentalAPI', {}).catch((err) => {
6759
6864
  dcl.error(`ExperimentalAPI couldn't be loaded, the message to renderer can't be sent without this API.`, err);
6760
6865
  });
6761
6866
  dcl.onUpdate((dt) => {
6762
6867
  engine.update(dt);
6763
6868
  });
6764
6869
  }
6765
- function createRendererTransport() {
6766
- return {
6767
- type: 'renderer',
6768
- send(message) {
6769
- if (ExperimentalAPI) {
6770
- dcl
6771
- .callRpc('@decentraland/ExperimentalAPI', 'sendToRenderer', [
6772
- { data: message }
6773
- ])
6774
- .catch(dcl.error);
6775
- }
6776
- },
6777
- onmessage(_message) { },
6778
- filter(message) {
6779
- // Echo message, ignore them
6780
- if (message.transportType === 'renderer') {
6781
- return false;
6782
- }
6783
- return !!message;
6784
- }
6785
- };
6786
- }
6787
6870
 
6788
6871
  exports.ArrayType = ArrayType;
6789
6872
  exports.DEG2RAD = distExports$1.DEG2RAD;
@@ -6813,4 +6896,4 @@
6813
6896
  Object.defineProperty(exports, '__esModule', { value: true });
6814
6897
 
6815
6898
  })(this.self = this.self || {});
6816
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdWRpb1NvdXJjZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9TdHJlYW0uZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU3RyZWFtLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQm94U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0N5bGluZGVyU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0N5bGluZGVyU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUGxhbmVTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvUGxhbmVTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVWlUcmFuc2Zvcm0uZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1VpVHJhbnNmb3JtLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9pbmRleC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9sZWdhY3kvVHJhbnNmb3JtLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvbGVnYWN5L3R5cGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvbGVnYWN5L2luZGV4LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvdHlwZXMudHMiLCIuLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2NyZHQvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2NyZHQvZGlzdC9pbmRleC5qcyIsIi4uL3NyYy9lbmdpbmUvZW50aXR5LXV0aWxzLnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlci9pbmRleC50cyIsIi4uL3NyYy9zZXJpYWxpemF0aW9uL3dpcmVNZXNzYWdlLnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jcmR0L3RyYW5zcG9ydC50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdXRpbHMudHMiLCIuLi9zcmMvc3lzdGVtcy9jcmR0L2luZGV4LnRzIiwiLi4vc3JjL2VuZ2luZS9lbnRpdHkudHMiLCIuLi9zcmMvZW5naW5lL3V0aWxzLnRzIiwiLi4vc3JjL2VuZ2luZS9jb21wb25lbnQudHMiLCIuLi9zcmMvZW5naW5lL2luZGV4LnRzIiwiLi4vc3JjL2J1aWx0LWluLXR5cGVzL01hcFR5cGUudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvQXJyYXlUeXBlLnRzIiwiLi4vc3JjL2J1aWx0LWluLXR5cGVzL09wdGlvbmFsLnRzIiwiLi4vc3JjL2J1aWx0LWluLXR5cGVzL2Jhc2ljL0ludGVnZXIudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvYmFzaWMvRmxvYXQudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvYmFzaWMvU3RyaW5nLnRzIiwiLi4vc3JjL2J1aWx0LWluLXR5cGVzL2Jhc2ljL0VudW0udHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvYmFzaWMvQm9vbGVhbi50cyIsIi4uL3NyYy9pbml0aWFsaXphdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVmVjdG9yMyA9IHZvaWQgMDtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgVmVjdG9yMztcbihmdW5jdGlvbiAoVmVjdG9yMykge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgVmVjdG9yMyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4geCwgeSwgeiAoZmxvYXRzKSBjb29yZGluYXRlcy5cbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGVzIChvbiBYIGF4aXMpXG4gICAgICogQHBhcmFtIHkgLSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKiBAcGFyYW0geiAtIGRlZmluZXMgdGhlIHRoaXJkIGNvb3JkaW5hdGVzIChvbiBaIGF4aXMpXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGVzIChvbiBYIGF4aXMpXG4gICAgICovXG4gICAgeCA9IDAsIFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHNlY29uZCBjb29yZGluYXRlcyAob24gWSBheGlzKVxuICAgICAqL1xuICAgIHkgPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIHogPSAwKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHogfTtcbiAgICB9XG4gICAgVmVjdG9yMy5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcGFyYW0gdmVjdG9yMSAtIHRoZSBmaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gdmVjdG9yMiAtIHRoZSBzZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQodmVjdG9yMSwgdmVjdG9yMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogdmVjdG9yMS54ICsgdmVjdG9yMi54LFxuICAgICAgICAgICAgeTogdmVjdG9yMS55ICsgdmVjdG9yMi55LFxuICAgICAgICAgICAgejogdmVjdG9yMS56ICsgdmVjdG9yMi56XG4gICAgICAgIH07XG4gICAgfVxuICAgIFZlY3RvcjMuYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBzdWJzdHJhY3Rpb24gb2YgdGhlIHR3byBnaXZlbiB2ZWN0b3JzLlxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VidHJhY3QobWludWVuZCwgc3VidHJhaGVuZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogbWludWVuZC54IC0gc3VidHJhaGVuZC54LFxuICAgICAgICAgICAgeTogbWludWVuZC55IC0gc3VidHJhaGVuZC55LFxuICAgICAgICAgICAgejogbWludWVuZC56IC0gc3VidHJhaGVuZC56XG4gICAgICAgIH07XG4gICAgfVxuICAgIFZlY3RvcjMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0VG9SZWYobWludWVuZCwgc3VidHJhaGVuZCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbWludWVuZC54IC0gc3VidHJhaGVuZC54O1xuICAgICAgICByZXN1bHQueSA9IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueTtcbiAgICAgICAgcmVzdWx0LnogPSBtaW51ZW5kLnogLSBzdWJ0cmFoZW5kLno7XG4gICAgfVxuICAgIFZlY3RvcjMuc3VidHJhY3RUb1JlZiA9IHN1YnRyYWN0VG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIG90aGVyIHNpZ25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9wcG9zaXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IHg6IC12YWx1ZS54LCB5OiAtdmFsdWUueSwgejogLXZhbHVlLnogfTtcbiAgICB9XG4gICAgVmVjdG9yMy5vcHBvc2l0ZSA9IG9wcG9zaXRlO1xuICAgIC8qKlxuICAgICAqIENvcHkgc291cmNlIGludG8gZGVzdFxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weShzb3VyY2UsIGRlc3QpIHtcbiAgICAgICAgZGVzdC54ID0gc291cmNlLng7XG4gICAgICAgIGRlc3QueSA9IHNvdXJjZS55O1xuICAgICAgICBkZXN0LnogPSBzb3VyY2UuejtcbiAgICB9XG4gICAgVmVjdG9yMy5jb3B5ID0gY29weTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCB0aGUgc2FtZSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmUoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UpO1xuICAgIH1cbiAgICBWZWN0b3IzLmNsb25lID0gY2xvbmU7XG4gICAgLy8gUHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqIEByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aCh2ZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLnopO1xuICAgIH1cbiAgICBWZWN0b3IzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqIEByZXR1cm5zIHNxdWFyZWQgbGVuZ3RoIG9mIHRoZSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVuZ3RoU3F1YXJlZCh2ZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHZlY3Rvci54ICogdmVjdG9yLnggKyB2ZWN0b3IueSAqIHZlY3Rvci55ICsgdmVjdG9yLnogKiB2ZWN0b3IuejtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGhTcXVhcmVkID0gbGVuZ3RoU3F1YXJlZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZVRvUmVmKHZlY3Rvciwgc2NhbGUsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IHZlY3Rvci54ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC55ID0gdmVjdG9yLnkgKiBzY2FsZTtcbiAgICAgICAgcmVzdWx0LnogPSB2ZWN0b3IueiAqIHNjYWxlO1xuICAgIH1cbiAgICBWZWN0b3IzLnNjYWxlVG9SZWYgPSBzY2FsZVRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3JkaW5hdGVzIG11bHRpcGxpZWQgYnkgdGhlIGZsb2F0IFwic2NhbGVcIlxuICAgICAqIEBwYXJhbSBzY2FsZSAtIGRlZmluZXMgdGhlIG11bHRpcGxpZXIgZmFjdG9yXG4gICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNjYWxlKHZlY3Rvciwgc2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSh2ZWN0b3IueCAqIHNjYWxlLCB2ZWN0b3IueSAqIHNjYWxlLCB2ZWN0b3IueiAqIHNjYWxlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZSA9IHNjYWxlO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIGdpdmVuIGlucHV0IGxlbmd0aC5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBsZW4gLSB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3JcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZUZyb21MZW5ndGggPSBub3JtYWxpemVGcm9tTGVuZ3RoO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIGdpdmVuIGlucHV0IGxlbmd0aC5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBsZW4gLSB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3JcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYodmVjdG9yLCBsZW4sIHJlc3VsdCkge1xuICAgICAgICBpZiAobGVuID09PSAwIHx8IGxlbiA9PT0gMS4wKSB7XG4gICAgICAgICAgICBjb3B5KHZlY3RvciwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzY2FsZVRvUmVmKHZlY3RvciwgMS4wIC8gbGVuLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZiA9IG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZjtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2ZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUZyb21MZW5ndGgodmVjdG9yLCBsZW5ndGgodmVjdG9yKSk7XG4gICAgfVxuICAgIFZlY3RvcjMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBpbiBwbGFjZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVG9SZWYodmVjdG9yLCByZXN1bHQpIHtcbiAgICAgICAgbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuZ3RoKHZlY3RvciksIHJlc3VsdCk7XG4gICAgfVxuICAgIFZlY3RvcjMubm9ybWFsaXplVG9SZWYgPSBub3JtYWxpemVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCAoZmxvYXQpIGJldHdlZW4gdGhlIHZlY3RvcnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56O1xuICAgIH1cbiAgICBWZWN0b3IzLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSb3RhdGVzIGN1cnJlbnQgVmVjdG9yMyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVhdGVybmlvbiwgYnV0IGFwcGxpZXMgdGhlIHJvdGF0aW9uIHRvIHRhcmdldCBWZWN0b3IzLlxuICAgICAqIEBwYXJhbSBxIC0gZGVmaW5lcyB0aGUgUXVhdGVybmlvblxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgVmVjdG9yM1xuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByb3RhdGUodmVjdG9yLCBxKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgeiB9ID0gdmVjdG9yO1xuICAgICAgICBjb25zdCB7IHg6IHF4LCB5OiBxeSwgejogcXosIHc6IHF3IH0gPSBxO1xuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuICAgICAgICBjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcbiAgICAgICAgY29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG4gICAgICAgIGNvbnN0IGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xuICAgICAgICBjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXksXG4gICAgICAgICAgICB5OiBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6LFxuICAgICAgICAgICAgejogaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeFxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnJvdGF0ZSA9IHJvdGF0ZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwic3RhcnRcIiBhbmQgXCJlbmRcIlxuICAgICAqIEBwYXJhbSBzdGFydCAtIGRlZmluZXMgdGhlIHN0YXJ0IHZhbHVlXG4gICAgICogQHBhcmFtIGVuZCAtIGRlZmluZXMgdGhlIGVuZCB2YWx1ZVxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBtYXggZGVmaW5lcyBhbW91bnQgYmV0d2VlbiBib3RoIChiZXR3ZWVuIDAgYW5kIDEpXG4gICAgICogQHJldHVybnMgdGhlIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycChzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlKDAsIDAsIDApO1xuICAgICAgICBsZXJwVG9SZWYoc3RhcnQsIGVuZCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBWZWN0b3IzLmxlcnAgPSBsZXJwO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gZnJvbSB0aGUgdmVjdG9yIFwic3RhcnRcIiBmb3IgXCJhbW91bnRcIiB0byB0aGUgdmVjdG9yIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZXJwVG9SZWYoc3RhcnQsIGVuZCwgYW1vdW50LCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzdGFydC54ICsgKGVuZC54IC0gc3RhcnQueCkgKiBhbW91bnQ7XG4gICAgICAgIHJlc3VsdC55ID0gc3RhcnQueSArIChlbmQueSAtIHN0YXJ0LnkpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueiA9IHN0YXJ0LnogKyAoZW5kLnogLSBzdGFydC56KSAqIGFtb3VudDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwVG9SZWYgPSBsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBpcyB0aGVuIG9ydGhvZ29uYWwgdG8gYm90aCBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIHRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgdGhlIGNyb3NzIHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcm9zcyhsZWZ0LCByaWdodCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWZWN0b3IzLlplcm8oKTtcbiAgICAgICAgVmVjdG9yMy5jcm9zc1RvUmVmKGxlZnQsIHJpZ2h0LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBWZWN0b3IzLmNyb3NzID0gY3Jvc3M7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yIFwicmVzdWx0XCIgd2l0aCB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcm9zc1RvUmVmKGxlZnQsIHJpZ2h0LCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBsZWZ0LnkgKiByaWdodC56IC0gbGVmdC56ICogcmlnaHQueTtcbiAgICAgICAgcmVzdWx0LnkgPSBsZWZ0LnogKiByaWdodC54IC0gbGVmdC54ICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LnogPSBsZWZ0LnggKiByaWdodC55IC0gbGVmdC55ICogcmlnaHQueDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zc1RvUmVmID0gY3Jvc3NUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDAuMCwgMC4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGVtcHR5IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlplcm8gPSBaZXJvO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMS4wLCAxLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdW5pdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gT25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMS4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLk9uZSA9IE9uZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvbGVuZ3RoU3F1YXJlZCAoMC4wLCAxLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyB1cCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gVXAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAxLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuVXAgPSBVcDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIC0xLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBkb3duIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEb3duKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgLTEuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5Eb3duID0gRG93bjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDAuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEZvcndhcmQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIDEuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRm9yd2FyZCA9IEZvcndhcmQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIC0xLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZm9yd2FyZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFja3dhcmQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIC0xLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkJhY2t3YXJkID0gQmFja3dhcmQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMS4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyByaWdodCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gUmlnaHQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuUmlnaHQgPSBSaWdodDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgtMS4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBsZWZ0IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMZWZ0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKC0xLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5MZWZ0ID0gTGVmdDtcbn0pKFZlY3RvcjMgPSBleHBvcnRzLlZlY3RvcjMgfHwgKGV4cG9ydHMuVmVjdG9yMyA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WZWN0b3IzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TY2FsYXIgPSB2b2lkIDA7XG4vKipcbiAqIFR3byBwaSBjb25zdGFudHMgY29udmVuaWVudCBmb3IgY29tcHV0YXRpb24uXG4gKi9cbmNvbnN0IFR3b1BpID0gTWF0aC5QSSAqIDI7XG4vKipcbiAqIEJvb2xlYW4gOiB0cnVlIGlmIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBhbmQgYiBpcyBsb3dlciB0aGFuIGVwc2lsb24gKGRlZmF1bHQgPSAxLjQwMTI5OEUtNDUpXG4gKiBAcGFyYW0gYSAtIG51bWJlclxuICogQHBhcmFtIGIgLSBudW1iZXJcbiAqIEBwYXJhbSBlcHNpbG9uIC0gKGRlZmF1bHQgPSAxLjQwMTI5OEUtNDUpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBhbmQgYiBpcyBsb3dlciB0aGFuIGVwc2lsb24gKGRlZmF1bHQgPSAxLjQwMTI5OEUtNDUpXG4gKi9cbmZ1bmN0aW9uIHdpdGhpbkVwc2lsb24oYSwgYiwgZXBzaWxvbiA9IDEuNDAxMjk4ZS00NSkge1xuICAgIGNvbnN0IG51bSA9IGEgLSBiO1xuICAgIHJldHVybiAtZXBzaWxvbiA8PSBudW0gJiYgbnVtIDw9IGVwc2lsb247XG59XG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgOiB0aGUgdXBwZXIgY2FzZSB0cmFuc2xhdGlvbiBvZiB0aGUgbnVtYmVyIGkgdG8gaGV4YWRlY2ltYWwuXG4gKiBAcGFyYW0gaSAtIG51bWJlclxuICogQHJldHVybnMgdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICovXG5mdW5jdGlvbiB0b0hleChpKSB7XG4gICAgY29uc3Qgc3RyID0gaS50b1N0cmluZygxNik7XG4gICAgaWYgKGkgPD0gMTUpIHtcbiAgICAgICAgcmV0dXJuICgnMCcgKyBzdHIpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcbn1cbi8qKlxuICogUmV0dXJucyAtMSBpZiB2YWx1ZSBpcyBuZWdhdGl2ZSBhbmQgKzEgaXMgdmFsdWUgaXMgcG9zaXRpdmUuXG4gKiBAcGFyYW0gX3ZhbHVlIC0gdGhlIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0J3MgZXF1YWwgdG8gemVyby5cbiAqL1xuZnVuY3Rpb24gc2lnbih2YWx1ZSkge1xuICAgIGNvbnN0IF92YWx1ZSA9ICt2YWx1ZTsgLy8gY29udmVydCB0byBhIG51bWJlclxuICAgIGlmIChfdmFsdWUgPT09IDAgfHwgaXNOYU4oX3ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gX3ZhbHVlID4gMCA/IDEgOiAtMTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0J3MgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAqIFJldHVybnMgbWluIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG1pbi5cbiAqIFJldHVybnMgbWF4IGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gbWF4LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNsbWFwXG4gKiBAcGFyYW0gbWluIC0gdGhlIG1pbiB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMClcbiAqIEBwYXJhbSBtYXggLSB0aGUgbWF4IHZhbHVlIHRvIGNsYW1wIHRvIChkZWZhdWx0OiAxKVxuICogQHJldHVybnMgdGhlIGNsYW1wZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEpIHtcbiAgICByZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7XG59XG4vKipcbiAqIHRoZSBsb2cyIG9mIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNvbXB1dGUgbG9nMiBvZlxuICogQHJldHVybnMgdGhlIGxvZzIgb2YgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxvZzIodmFsdWUpIHtcbiAgICByZXR1cm4gTWF0aC5sb2codmFsdWUpICogTWF0aC5MT0cyRTtcbn1cbi8qKlxuICogTG9vcHMgdGhlIHZhbHVlLCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKlxuICogVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBtb2R1bG8gb3BlcmF0b3IgYnV0IGl0IHdvcmtzIHdpdGggZmxvYXRpbmcgcG9pbnQgbnVtYmVycy5cbiAqIEZvciBleGFtcGxlLCB1c2luZyAzLjAgZm9yIHQgYW5kIDIuNSBmb3IgbGVuZ3RoLCB0aGUgcmVzdWx0IHdvdWxkIGJlIDAuNS5cbiAqIFdpdGggdCA9IDUgYW5kIGxlbmd0aCA9IDIuNSwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjAuXG4gKiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBiZWhhdmlvdXIgaXMgbm90IGRlZmluZWQgZm9yIG5lZ2F0aXZlIG51bWJlcnMgYXMgaXQgaXMgZm9yIHRoZSBtb2R1bG8gb3BlcmF0b3JcbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIHRoZSBsZW5ndGhcbiAqIEByZXR1cm5zIHRoZSBsb29wZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmVwZWF0KHZhbHVlLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdmFsdWUgLSBNYXRoLmZsb29yKHZhbHVlIC8gbGVuZ3RoKSAqIGxlbmd0aDtcbn1cbi8qKlxuICogTm9ybWFsaXplIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gbm9ybWFsaXplXG4gKiBAcGFyYW0gbWluIC0gbWF4IHRvIG5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIG5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbm9ybWFsaXplZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBub3JtYWxpemUodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cbi8qKlxuICogRGVub3JtYWxpemUgdGhlIHZhbHVlIGZyb20gMC4wIGFuZCAxLjAgdXNpbmcgbWluIGFuZCBtYXggdmFsdWVzXG4gKiBAcGFyYW0gbm9ybWFsaXplZCAtIHZhbHVlIHRvIGRlbm9ybWFsaXplXG4gKiBAcGFyYW0gbWluIC0gbWF4IHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEBwYXJhbSBtYXggLSBtaW4gdG8gZGVub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGRlbm9ybWFsaXplZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZW5vcm1hbGl6ZShub3JtYWxpemVkLCBtaW4sIG1heCkge1xuICAgIHJldHVybiBub3JtYWxpemVkICogKG1heCAtIG1pbikgKyBtaW47XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNob3J0ZXN0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZ2l2ZW4gYW5nbGVzIGdpdmVuIGluIGRlZ3JlZXMuXG4gKiBAcGFyYW0gY3VycmVudCAtIGN1cnJlbnQgYW5nbGUgaW4gZGVncmVlc1xuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCBhbmdsZSBpbiBkZWdyZWVzXG4gKiBAcmV0dXJucyB0aGUgZGVsdGFcbiAqL1xuZnVuY3Rpb24gZGVsdGFBbmdsZShjdXJyZW50LCB0YXJnZXQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KHRhcmdldCAtIGN1cnJlbnQsIDM2MC4wKTtcbiAgICBpZiAobnVtID4gMTgwLjApIHtcbiAgICAgICAgbnVtIC09IDM2MC4wO1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xufVxuLyoqXG4gKiBQaW5nUG9uZ3MgdGhlIHZhbHVlIHQsIHNvIHRoYXQgaXQgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gbGVuZ3RoIGFuZCBuZXZlciBzbWFsbGVyIHRoYW4gMC5cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcGFyYW0gbGVuZ3RoIC0gbGVuZ3RoXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBtb3ZlIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gMCBhbmQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIHBpbmdQb25nKHR4LCBsZW5ndGgpIHtcbiAgICBjb25zdCB0ID0gcmVwZWF0KHR4LCBsZW5ndGggKiAyLjApO1xuICAgIHJldHVybiBsZW5ndGggLSBNYXRoLmFicyh0IC0gbGVuZ3RoKTtcbn1cbi8qKlxuICogSW50ZXJwb2xhdGVzIGJldHdlZW4gbWluIGFuZCBtYXggd2l0aCBzbW9vdGhpbmcgYXQgdGhlIGxpbWl0cy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGluIGEgc2ltaWxhciB3YXkgdG8gTGVycC4gSG93ZXZlciwgdGhlIGludGVycG9sYXRpb24gd2lsbCBncmFkdWFsbHkgc3BlZWQgdXBcbiAqIGZyb20gdGhlIHN0YXJ0IGFuZCBzbG93IGRvd24gdG93YXJkIHRoZSBlbmQuIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBuYXR1cmFsLWxvb2tpbmcgYW5pbWF0aW9uLCBmYWRpbmcgYW5kIG90aGVyIHRyYW5zaXRpb25zLlxuICogQHBhcmFtIGZyb20gLSBmcm9tXG4gKiBAcGFyYW0gdG8gLSB0b1xuICogQHBhcmFtIHR4IC0gdmFsdWVcbiAqIEByZXR1cm5zIHRoZSBzbW9vdGggc3RlcHBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBzbW9vdGhTdGVwKGZyb20sIHRvLCB0eCkge1xuICAgIGxldCB0ID0gY2xhbXAodHgpO1xuICAgIHQgPSAtMi4wICogdCAqIHQgKiB0ICsgMy4wICogdCAqIHQ7XG4gICAgcmV0dXJuIHRvICogdCArIGZyb20gKiAoMS4wIC0gdCk7XG59XG4vKipcbiAqIE1vdmVzIGEgdmFsdWUgY3VycmVudCB0b3dhcmRzIHRhcmdldC5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIE1hdGhmLkxlcnAgYnV0IGluc3RlYWQgdGhlIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNwZWVkIG5ldmVyIGV4Y2VlZHMgbWF4RGVsdGEuXG4gKiBOZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGEgcHVzaGVzIHRoZSB2YWx1ZSBhd2F5IGZyb20gdGFyZ2V0LlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IHZhbHVlXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gbWF4RGVsdGEgLSBtYXggZGlzdGFuY2UgdG8gbW92ZVxuICogQHJldHVybnMgcmVzdWx0aW5nIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIG1vdmVUb3dhcmRzKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAoTWF0aC5hYnModGFyZ2V0IC0gY3VycmVudCkgPD0gbWF4RGVsdGEpIHtcbiAgICAgICAgcmVzdWx0ID0gdGFyZ2V0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY3VycmVudCArIHNpZ24odGFyZ2V0IC0gY3VycmVudCkgKiBtYXhEZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogU2FtZSBhcyBNb3ZlVG93YXJkcyBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKlxuICogVmFyaWFibGVzIGN1cnJlbnQgYW5kIHRhcmdldCBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLiBGb3Igb3B0aW1pemF0aW9uIHJlYXNvbnMsIG5lZ2F0aXZlIHZhbHVlcyBvZiBtYXhEZWx0YVxuICogIGFyZSBub3Qgc3VwcG9ydGVkIGFuZCBtYXkgY2F1c2Ugb3NjaWxsYXRpb24uIFRvIHB1c2ggY3VycmVudCBhd2F5IGZyb20gYSB0YXJnZXQgYW5nbGUsIGFkZCAxODAgdG8gdGhhdCBhbmdsZSBpbnN0ZWFkLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IHZhbHVlXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gbWF4RGVsdGEgLSBtYXggZGlzdGFuY2UgdG8gbW92ZVxuICogQHJldHVybnMgcmVzdWx0aW5nIGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIG1vdmVUb3dhcmRzQW5nbGUoY3VycmVudCwgdGFyZ2V0LCBtYXhEZWx0YSkge1xuICAgIGNvbnN0IG51bSA9IGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAoLW1heERlbHRhIDwgbnVtICYmIG51bSA8IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1vdmVUb3dhcmRzKGN1cnJlbnQsIGN1cnJlbnQgKyBudW0sIG1heERlbHRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBzY2FsYXIgd2l0aCB2YWx1ZXMgbGluZWFybHkgaW50ZXJwb2xhdGVkIG9mIFwiYW1vdW50XCIgYmV0d2VlbiB0aGUgc3RhcnQgc2NhbGFyIGFuZCB0aGUgZW5kIHNjYWxhclxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIGFtb3VudDtcbn1cbi8qKlxuICogU2FtZSBhcyBMZXJwIGJ1dCBtYWtlcyBzdXJlIHRoZSB2YWx1ZXMgaW50ZXJwb2xhdGUgY29ycmVjdGx5IHdoZW4gdGhleSB3cmFwIGFyb3VuZCAzNjAgZGVncmVlcy5cbiAqIFRoZSBwYXJhbWV0ZXIgdCBpcyBjbGFtcGVkIHRvIHRoZSByYW5nZSBbMCwgMV0uIFZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1bWVkIHRvIGJlIGluIGRlZ3JlZXMuXG4gKiBAcGFyYW0gc3RhcnQgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGVuZCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIGFtb3VudCAtIGFtb3VudCB0byBsZXJwIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBsZXJwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbGVycEFuZ2xlKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIGxldCBudW0gPSByZXBlYXQoZW5kIC0gc3RhcnQsIDM2MC4wKTtcbiAgICBpZiAobnVtID4gMTgwLjApIHtcbiAgICAgICAgbnVtIC09IDM2MC4wO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnQgKyBudW0gKiBjbGFtcChhbW91bnQpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lYXIgcGFyYW1ldGVyIHQgdGhhdCBwcm9kdWNlcyB0aGUgaW50ZXJwb2xhbnQgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbYSwgYl0uXG4gKiBAcGFyYW0gYSAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gYiAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgYmV0d2VlbiBhIGFuZCBiXG4gKiBAcmV0dXJucyB0aGUgaW52ZXJzZUxlcnAgdmFsdWVcbiAqL1xuZnVuY3Rpb24gaW52ZXJzZUxlcnAoYSwgYiwgdmFsdWUpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICByZXN1bHQgPSBjbGFtcCgodmFsdWUgLSBhKSAvIChiIC0gYSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gMC4wO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IHNjYWxhciBsb2NhdGVkIGZvciBcImFtb3VudFwiIChmbG9hdCkgb24gdGhlIEhlcm1pdGUgc3BsaW5lIGRlZmluZWQgYnkgdGhlIHNjYWxhcnMgXCJ2YWx1ZTFcIiwgXCJ2YWx1ZTNcIiwgXCJ0YW5nZW50MVwiLCBcInRhbmdlbnQyXCIuXG4gKiB7QGxpbmsgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9IZXJtaXRlUG9seW5vbWlhbC5odG1sfVxuICogQHBhcmFtIHZhbHVlMSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQxIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gdmFsdWUyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gdGFuZ2VudDIgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBpbnB1dCB2YWx1ZVxuICogQHJldHVybnMgaGVybWl0ZSByZXN1bHRcbiAqL1xuZnVuY3Rpb24gaGVybWl0ZSh2YWx1ZTEsIHRhbmdlbnQxLCB2YWx1ZTIsIHRhbmdlbnQyLCBhbW91bnQpIHtcbiAgICBjb25zdCBzcXVhcmVkID0gYW1vdW50ICogYW1vdW50O1xuICAgIGNvbnN0IGN1YmVkID0gYW1vdW50ICogc3F1YXJlZDtcbiAgICBjb25zdCBwYXJ0MSA9IDIuMCAqIGN1YmVkIC0gMy4wICogc3F1YXJlZCArIDEuMDtcbiAgICBjb25zdCBwYXJ0MiA9IC0yLjAgKiBjdWJlZCArIDMuMCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDMgPSBjdWJlZCAtIDIuMCAqIHNxdWFyZWQgKyBhbW91bnQ7XG4gICAgY29uc3QgcGFydDQgPSBjdWJlZCAtIHNxdWFyZWQ7XG4gICAgcmV0dXJuIHZhbHVlMSAqIHBhcnQxICsgdmFsdWUyICogcGFydDIgKyB0YW5nZW50MSAqIHBhcnQzICsgdGFuZ2VudDIgKiBwYXJ0NDtcbn1cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhbmQgbWluIGFuZCBtYXggdmFsdWVzXG4gKiBAcGFyYW0gbWluIC0gbWluIHZhbHVlIG9mIHJhbmRvbVxuICogQHBhcmFtIG1heCAtIG1heCB2YWx1ZSBvZiByYW5kb21cbiAqIEByZXR1cm5zIHJhbmRvbSB2YWx1ZVxuICovXG5mdW5jdGlvbiByYW5kb21SYW5nZShtaW4sIG1heCkge1xuICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcGVyY2VudGFnZSBvZiBhIG51bWJlciBpbiBhIGdpdmVuIHJhbmdlLlxuICpcbiAqIFJhbmdlVG9QZXJjZW50KDQwLDIwLDYwKSB3aWxsIHJldHVybiAwLjUgKDUwJSlcbiAqIFJhbmdlVG9QZXJjZW50KDM0LDAsMTAwKSB3aWxsIHJldHVybiAwLjM0ICgzNCUpXG4gKiBAcGFyYW0gbnVtIC0gdG8gY29udmVydCB0byBwZXJjZW50YWdlXG4gKiBAcGFyYW0gbWluIC0gbWluIHJhbmdlXG4gKiBAcGFyYW0gbWF4IC0gbWF4IHJhbmdlXG4gKiBAcmV0dXJucyB0aGUgcGVyY2VudGFnZVxuICovXG5mdW5jdGlvbiByYW5nZVRvUGVyY2VudChudW0sIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIChudW0gLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGVyY2VudGFnZSBpbiBhIGdpdmVuIHJhbmdlLlxuICpcbiAqIFBlcmNlbnRUb1JhbmdlKDAuMzQsMCwxMDApIHdpbGwgcmV0dXJuIDM0LlxuICogQHBhcmFtIHBlcmNlbnQgLSB0byBjb252ZXJ0IHRvIG51bWJlclxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIG51bWJlclxuICovXG5mdW5jdGlvbiBwZXJjZW50VG9SYW5nZShwZXJjZW50LCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobWF4IC0gbWluKSAqIHBlcmNlbnQgKyBtaW47XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFuZ2xlIGNvbnZlcnRlZCB0byBlcXVpdmFsZW50IHZhbHVlIGJldHdlZW4gLU1hdGguUEkgYW5kIE1hdGguUEkgcmFkaWFucy5cbiAqIEBwYXJhbSBhbmdsZSAtIFRoZSBhbmdsZSB0byBub3JtYWxpemUgaW4gcmFkaWFuLlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBhbmdsZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFkaWFucyhhbmdsZSkge1xuICAgIC8vIE1vcmUgcHJlY2lzZSBidXQgc2xvd2VyIHZlcnNpb24ga2VwdCBmb3IgcmVmZXJlbmNlLlxuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbW1lbnRlZC1vdXQtY29kZVxuICAgIC8qXG4gICAgICAvLyBhbmdsZSA9IGFuZ2xlICUgVG9vbHMuVHdvUGk7XG4gICAgICAvLyBhbmdsZSA9IChhbmdsZSArIFRvb2xzLlR3b1BpKSAlIFRvb2xzLlR3b1BpO1xuICBcbiAgICAgIC8vaWYgKGFuZ2xlID4gTWF0aC5QSSkge1xuICAgICAgLy9cdGFuZ2xlIC09IFRvb2xzLlR3b1BpO1xuICAgICAgLy99XG4gICAgICAgICovXG4gICAgcmV0dXJuIGFuZ2xlIC0gVHdvUGkgKiBNYXRoLmZsb29yKChhbmdsZSArIE1hdGguUEkpIC8gVHdvUGkpO1xufVxuLyoqXG4gKiBTY2FsYXIgY29tcHV0YXRpb24gbGlicmFyeVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlNjYWxhciA9IHtcbiAgICB3aXRoaW5FcHNpbG9uLFxuICAgIHRvSGV4LFxuICAgIHNpZ24sXG4gICAgY2xhbXAsXG4gICAgbG9nMixcbiAgICByZXBlYXQsXG4gICAgbm9ybWFsaXplLFxuICAgIGRlbm9ybWFsaXplLFxuICAgIGRlbHRhQW5nbGUsXG4gICAgcGluZ1BvbmcsXG4gICAgc21vb3RoU3RlcCxcbiAgICBtb3ZlVG93YXJkcyxcbiAgICBtb3ZlVG93YXJkc0FuZ2xlLFxuICAgIGxlcnAsXG4gICAgbGVycEFuZ2xlLFxuICAgIGludmVyc2VMZXJwLFxuICAgIGhlcm1pdGUsXG4gICAgcmFuZG9tUmFuZ2UsXG4gICAgcmFuZ2VUb1BlcmNlbnQsXG4gICAgcGVyY2VudFRvUmFuZ2UsXG4gICAgbm9ybWFsaXplUmFkaWFucyxcbiAgICBUd29QaVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjYWxhci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUkFEMkRFRyA9IGV4cG9ydHMuREVHMlJBRCA9IGV4cG9ydHMuRXBzaWxvbiA9IGV4cG9ydHMuVG9MaW5lYXJTcGFjZSA9IGV4cG9ydHMuVG9HYW1tYVNwYWNlID0gZXhwb3J0cy5TcGFjZSA9IGV4cG9ydHMuT3JpZW50YXRpb24gPSB2b2lkIDA7XG4vKipcbiAqIERlZmluZXMgcG90ZW50aWFsIG9yaWVudGF0aW9uIGZvciBiYWNrIGZhY2UgY3VsbGluZ1xuICogQHB1YmxpY1xuICovXG52YXIgT3JpZW50YXRpb247XG4oZnVuY3Rpb24gKE9yaWVudGF0aW9uKSB7XG4gICAgLyoqXG4gICAgICogQ2xvY2t3aXNlXG4gICAgICovXG4gICAgT3JpZW50YXRpb25bT3JpZW50YXRpb25bXCJDV1wiXSA9IDBdID0gXCJDV1wiO1xuICAgIC8qKiBDb3VudGVyIGNsb2Nrd2lzZSAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ0NXXCJdID0gMV0gPSBcIkNDV1wiO1xufSkoT3JpZW50YXRpb24gPSBleHBvcnRzLk9yaWVudGF0aW9uIHx8IChleHBvcnRzLk9yaWVudGF0aW9uID0ge30pKTtcbi8qKlxuICogRGVmaW5lcyBzdXBwb3J0ZWQgc3BhY2VzXG4gKiBAcHVibGljXG4gKi9cbnZhciBTcGFjZTtcbihmdW5jdGlvbiAoU3BhY2UpIHtcbiAgICAvKiogTG9jYWwgKG9iamVjdCkgc3BhY2UgKi9cbiAgICBTcGFjZVtTcGFjZVtcIkxPQ0FMXCJdID0gMF0gPSBcIkxPQ0FMXCI7XG4gICAgLyoqIFdvcmxkIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJXT1JMRFwiXSA9IDFdID0gXCJXT1JMRFwiO1xuICAgIC8qKiBCb25lIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJCT05FXCJdID0gMl0gPSBcIkJPTkVcIjtcbn0pKFNwYWNlID0gZXhwb3J0cy5TcGFjZSB8fCAoZXhwb3J0cy5TcGFjZSA9IHt9KSk7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGdhbW1hIHNwYWNlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuVG9HYW1tYVNwYWNlID0gMSAvIDIuMjtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGEgdmFsdWUgdG8gbGluZWFyIHNwYWNlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuVG9MaW5lYXJTcGFjZSA9IDIuMjtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBkZWZpbmUgdGhlIG1pbmltYWwgbnVtYmVyIHZhbHVlIGluIEJhYnlsb24uanNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5FcHNpbG9uID0gMC4wMDAwMDE7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBmcm9tIEV1bGVyIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICogQHB1YmxpY1xuICovXG5leHBvcnRzLkRFRzJSQUQgPSBNYXRoLlBJIC8gMTgwO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSByYWRpYW5zIHRvIEV1bGVyIGRlZ3JlZXNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5SQUQyREVHID0gMzYwIC8gKE1hdGguUEkgKiAyKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5RdWF0ZXJuaW9uID0gdm9pZCAwO1xuY29uc3QgVmVjdG9yM18xID0gcmVxdWlyZShcIi4vVmVjdG9yM1wiKTtcbmNvbnN0IFNjYWxhcl8xID0gcmVxdWlyZShcIi4vU2NhbGFyXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuLyoqXG4gKiBAcHVibGljXG4gKi9cbnZhciBRdWF0ZXJuaW9uO1xuKGZ1bmN0aW9uIChRdWF0ZXJuaW9uKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBRdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIGZsb2F0c1xuICAgICAqIEBwYXJhbSB4IC0gZGVmaW5lcyB0aGUgZmlyc3QgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHkgLSBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdClcbiAgICAgKiBAcGFyYW0gdyAtIGRlZmluZXMgdGhlIGZvdXJ0aCBjb21wb25lbnQgKDEuMCBieSBkZWZhdWx0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKiogZGVmaW5lcyB0aGUgZmlyc3QgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeCA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHNlY29uZCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdCkgKi9cbiAgICB5ID0gMC4wLCBcbiAgICAvKiogZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeiA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIGZvdXJ0aCBjb21wb25lbnQgKDEuMCBieSBkZWZhdWx0KSAqL1xuICAgIHcgPSAxLjApIHtcbiAgICAgICAgcmV0dXJuIHsgeCwgeSwgeiwgdyB9O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFF1YXRlcm5pb24gYXMgdGhlIHJlc3VsdCBvZiB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBnaXZlbiBxdWF0ZXJuaW9ucy5cbiAgICAgKiBAcGFyYW0gcTEgLSB0aGUgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBxMiAtIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZChxMSwgcTIpIHtcbiAgICAgICAgcmV0dXJuIHsgeDogcTEueCArIHEyLngsIHk6IHExLnkgKyBxMi55LCB6OiBxMS56ICsgcTIueiwgdzogcTEudyArIHEyLncgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hZGQgPSBhZGQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGwoeWF3LCBwaXRjaCwgcm9sbCkge1xuICAgICAgICAvLyBJbXBsZW1lbnRlZCB1bml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU2MDU1ODEzXG4gICAgICAgIGNvbnN0IGhhbGZQaXRjaCA9IHBpdGNoICogMC41O1xuICAgICAgICBjb25zdCBoYWxmWWF3ID0geWF3ICogMC41O1xuICAgICAgICBjb25zdCBoYWxmUm9sbCA9IHJvbGwgKiAwLjU7XG4gICAgICAgIGNvbnN0IGMxID0gTWF0aC5jb3MoaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgYzIgPSBNYXRoLmNvcyhoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgYzMgPSBNYXRoLmNvcyhoYWxmUm9sbCk7XG4gICAgICAgIGNvbnN0IHMxID0gTWF0aC5zaW4oaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgczIgPSBNYXRoLnNpbihoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgczMgPSBNYXRoLnNpbihoYWxmUm9sbCk7XG4gICAgICAgIHJldHVybiBjcmVhdGUoYzIgKiBzMSAqIGMzICsgczIgKiBjMSAqIHMzLCBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczMsIGMyICogYzEgKiBzMyAtIHMyICogczEgKiBjMywgYzIgKiBjMSAqIGMzICsgczIgKiBzMSAqIHMzKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbCA9IHJvdGF0aW9uWWF3UGl0Y2hSb2xsO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByb3RhdGlvbiB0aGF0IHJvdGF0ZXMgeiBkZWdyZWVzIGFyb3VuZCB0aGUgeiBheGlzLCB4IGRlZ3JlZXMgYXJvdW5kIHRoZSB4IGF4aXMsIGFuZCB5IGRlZ3JlZXMgYXJvdW5kIHRoZSB5IGF4aXMuXG4gICAgICogQHBhcmFtIHggLSB0aGUgcm90YXRpb24gb24gdGhlIHggYXhpcyBpbiBldWxlciBkZWdyZWVzXG4gICAgICogQHBhcmFtIHkgLSB0aGUgcm90YXRpb24gb24gdGhlIHkgYXhpcyBpbiBldWxlciBkZWdyZWVzXG4gICAgICogQHBhcmFtIHogLSB0aGUgcm90YXRpb24gb24gdGhlIHogYXhpcyBpbiBldWxlciBkZWdyZWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXVsZXIoeCwgeSwgeikge1xuICAgICAgICByZXR1cm4gcm90YXRpb25ZYXdQaXRjaFJvbGwoeSAqIHR5cGVzXzEuREVHMlJBRCwgeCAqIHR5cGVzXzEuREVHMlJBRCwgeiAqIHR5cGVzXzEuREVHMlJBRCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZXVsZXIgPSBldWxlcjtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aChxKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQobGVuZ3RoU3F1YXJlZChxKSk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubGVuZ3RoID0gbGVuZ3RoO1xuICAgIC8qKlxuICAgICAqIEdldHMgbGVuZ3RoIG9mIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBxdWF0ZXJuaW9uIGxlbmd0aCAoZmxvYXQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVuZ3RoU3F1YXJlZChxKSB7XG4gICAgICAgIHJldHVybiBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSBxdWF0ZXJuaW9ucyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIHRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgdGhlIGRvdCBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZG90KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiAobGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53ICogcmlnaHQudyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZG90ID0gZG90O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFuZ2xlIGluIGRlZ3JlZXMgYmV0d2VlbiB0d28gcm90YXRpb25zIGEgYW5kIGIuXG4gICAgICogQHBhcmFtIHF1YXQxIC0gZGVmaW5lcyB0aGUgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBxdWF0MiAtIGRlZmluZXMgdGhlIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYW5nbGUocXVhdDEsIHF1YXQyKSB7XG4gICAgICAgIGNvbnN0IGRvdFZhbCA9IGRvdChxdWF0MSwgcXVhdDIpO1xuICAgICAgICByZXR1cm4gTWF0aC5hY29zKE1hdGgubWluKE1hdGguYWJzKGRvdFZhbCksIDEpKSAqIDIgKiB0eXBlc18xLlJBRDJERUc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYW5nbGUgPSBhbmdsZTtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJvbSBxdWF0ZXJuaW9uIGlzIHJvdGF0ZWQgdG93YXJkcyB0byBieSBhbiBhbmd1bGFyIHN0ZXAgb2YgbWF4RGVncmVlc0RlbHRhLlxuICAgICAqIEBwYXJhbSBmcm9tIC0gZGVmaW5lcyB0aGUgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB0byAtIGRlZmluZXMgdGhlIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIG1heERlZ3JlZXNEZWx0YSAtIHRoZSBpbnRlcnZhbCBzdGVwXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlVG93YXJkcyhmcm9tLCB0bywgbWF4RGVncmVlc0RlbHRhKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IGFuZ2xlKGZyb20sIHRvKTtcbiAgICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHQgPSBNYXRoLm1pbigxLCBtYXhEZWdyZWVzRGVsdGEgLyBudW0pO1xuICAgICAgICByZXR1cm4gc2xlcnAoZnJvbSwgdG8sIHQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnJvdGF0ZVRvd2FyZHMgPSByb3RhdGVUb3dhcmRzO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgZm9yd2FyZCBhbmQgdXB3YXJkcyBkaXJlY3Rpb25zLlxuICAgICAqIEBwYXJhbSBmb3J3YXJkIC0gdGhlIGRpcmVjdGlvbiB0byBsb29rIGluXG4gICAgICogQHBhcmFtIHVwIC0gdGhlIHZlY3RvciB0aGF0IGRlZmluZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHVwIGlzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbG9va1JvdGF0aW9uKGZvcndhcmQsIHVwID0geyB4OiAwLjAsIHk6IDEuMCwgejogMC4wIH0pIHtcbiAgICAgICAgY29uc3QgZm9yd2FyZE5ldyA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShmb3J3YXJkKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3ModXAsIGZvcndhcmROZXcpKTtcbiAgICAgICAgY29uc3QgdXBOZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5jcm9zcyhmb3J3YXJkTmV3LCByaWdodCk7XG4gICAgICAgIGNvbnN0IG0wMCA9IHJpZ2h0Lng7XG4gICAgICAgIGNvbnN0IG0wMSA9IHJpZ2h0Lnk7XG4gICAgICAgIGNvbnN0IG0wMiA9IHJpZ2h0Lno7XG4gICAgICAgIGNvbnN0IG0xMCA9IHVwTmV3Lng7XG4gICAgICAgIGNvbnN0IG0xMSA9IHVwTmV3Lnk7XG4gICAgICAgIGNvbnN0IG0xMiA9IHVwTmV3Lno7XG4gICAgICAgIGNvbnN0IG0yMCA9IGZvcndhcmROZXcueDtcbiAgICAgICAgY29uc3QgbTIxID0gZm9yd2FyZE5ldy55O1xuICAgICAgICBjb25zdCBtMjIgPSBmb3J3YXJkTmV3Lno7XG4gICAgICAgIGNvbnN0IG51bTggPSBtMDAgKyBtMTEgKyBtMjI7XG4gICAgICAgIGNvbnN0IHF1YXRlcm5pb24gPSBjcmVhdGUoKTtcbiAgICAgICAgaWYgKG51bTggPiAwKSB7XG4gICAgICAgICAgICBsZXQgbnVtID0gTWF0aC5zcXJ0KG51bTggKyAxKTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IG51bSAqIDAuNTtcbiAgICAgICAgICAgIG51bSA9IDAuNSAvIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueCA9IChtMTIgLSBtMjEpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0yMCAtIG0wMikgKiBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnogPSAobTAxIC0gbTEwKSAqIG51bTtcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtMDAgPj0gbTExICYmIG0wMCA+PSBtMjIpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bTcgPSBNYXRoLnNxcnQoMSArIG0wMCAtIG0xMSAtIG0yMik7XG4gICAgICAgICAgICBjb25zdCBudW00ID0gMC41IC8gbnVtNztcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueCA9IDAuNSAqIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnkgPSAobTAxICsgbTEwKSAqIG51bTQ7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnogPSAobTAyICsgbTIwKSAqIG51bTQ7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSAobTEyIC0gbTIxKSAqIG51bTQ7XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTExID4gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW02ID0gTWF0aC5zcXJ0KDEgKyBtMTEgLSBtMDAgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtMyA9IDAuNSAvIG51bTY7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEwICsgbTAxKSAqIG51bTM7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnkgPSAwLjUgKiBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0yMSArIG0xMikgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0yMCAtIG0wMikgKiBudW0zO1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguc3FydCgxICsgbTIyIC0gbTAwIC0gbTExKTtcbiAgICAgICAgY29uc3QgbnVtMiA9IDAuNSAvIG51bTU7XG4gICAgICAgIHF1YXRlcm5pb24ueCA9IChtMjAgKyBtMDIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi55ID0gKG0yMSArIG0xMikgKiBudW0yO1xuICAgICAgICBxdWF0ZXJuaW9uLnogPSAwLjUgKiBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLncgPSAobTAxIC0gbTEwKSAqIG51bTI7XG4gICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxvb2tSb3RhdGlvbiA9IGxvb2tSb3RhdGlvbjtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgaW4gcGxhY2UgdGhlIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShxKSB7XG4gICAgICAgIGNvbnN0IHFMZW5ndGggPSAxLjAgLyBsZW5ndGgocSk7XG4gICAgICAgIHJldHVybiBjcmVhdGUocS54ICogcUxlbmd0aCwgcS55ICogcUxlbmd0aCwgcS56ICogcUxlbmd0aCwgcS53ICogcUxlbmd0aCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubm9ybWFsaXplID0gbm9ybWFsaXplO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiB3aGljaCByb3RhdGVzIGZyb20gZnJvbURpcmVjdGlvbiB0byB0b0RpcmVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSB0YXJnZXQgZGlyZWN0aW9uIFZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Ub1JvdGF0aW9uKGZyb20sIHRvLCB1cCA9IFZlY3RvcjNfMS5WZWN0b3IzLlVwKCkpIHtcbiAgICAgICAgLy8gVW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGltcGxlbWVudGVkIGZyb20gaHR0cHM6Ly9mb3J1bS51bml0eS5jb20vdGhyZWFkcy9xdWF0ZXJuaW9uLWxvb2tyb3RhdGlvbi1hcm91bmQtYW4tYXhpcy42MDg0NzAvI3Bvc3QtNDA2OTg4OFxuICAgICAgICBjb25zdCB2MCA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShmcm9tKTtcbiAgICAgICAgY29uc3QgdjEgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUodG8pO1xuICAgICAgICBjb25zdCBhID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3ModjAsIHYxKTtcbiAgICAgICAgY29uc3QgdyA9IE1hdGguc3FydChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYwKSAqIFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQodjEpKSArXG4gICAgICAgICAgICBWZWN0b3IzXzEuVmVjdG9yMy5kb3QodjAsIHYxKTtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYSkgPCAwLjAwMDEpIHtcbiAgICAgICAgICAgIC8vIHRoZSB2ZWN0b3JzIGFyZSBwYXJhbGxlbCwgY2hlY2sgdyB0byBmaW5kIGRpcmVjdGlvblxuICAgICAgICAgICAgLy8gaWYgdyBpcyAwIHRoZW4gdmFsdWVzIGFyZSBvcHBvc2l0ZSwgYW5kIHdlIHNvdWxkIHJvdGF0ZSAxODAgZGVncmVlcyBhcm91bmQgdGhlIHN1cHBsaWVkIGF4aXNcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgdmVjdG9ycyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24gYW5kIG5vIHJvdGF0aW9uIHNob3VsZCBvY2N1clxuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHcpIDwgMC4wMDAxXG4gICAgICAgICAgICAgICAgPyBub3JtYWxpemUoY3JlYXRlKHVwLngsIHVwLnksIHVwLnosIDApKVxuICAgICAgICAgICAgICAgIDogSWRlbnRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoY3JlYXRlKGEueCwgYS55LCBhLnosIHcpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmZyb21Ub1JvdGF0aW9uID0gZnJvbVRvUm90YXRpb247XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgLSB0aGUgaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIElkZW50aXR5KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uSWRlbnRpdHkgPSBJZGVudGl0eTtcbiAgICAvKipcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGV1bGVyIGFuZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByb3RhdGlvbi5cbiAgICAgKiBJbXBsZW1lbnRlZCB1bml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU2MDU1ODEzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXVsZXJBbmdsZXMocSkge1xuICAgICAgICBjb25zdCBvdXQgPSBWZWN0b3IzXzEuVmVjdG9yMy5jcmVhdGUoKTtcbiAgICAgICAgLy8gaWYgdGhlIGlucHV0IHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBpcyBleGFjdGx5IG9uZS4gT3RoZXJ3aXNlLCB0aGlzIGFjdHMgYXMgYSBjb3JyZWN0aW9uIGZhY3RvciBmb3IgdGhlIHF1YXRlcm5pb24ncyBub3Qtbm9ybWFsaXplZG5lc3NcbiAgICAgICAgY29uc3QgdW5pdCA9IHEueCAqIHEueCArIHEueSAqIHEueSArIHEueiAqIHEueiArIHEudyAqIHEudztcbiAgICAgICAgLy8gcSB3aWxsIGhhdmUgYSBtYWduaXR1ZGUgb2YgMC41IG9yIGdyZWF0ZXIgaWYgYW5kIG9ubHkgaWYgcSBpcyBhIHNpbmd1bGFyaXR5IGNhc2VcbiAgICAgICAgY29uc3QgdGVzdCA9IHEueCAqIHEudyAtIHEueSAqIHEuejtcbiAgICAgICAgaWYgKHRlc3QgPiAwLjQ5OTUgKiB1bml0KSB7XG4gICAgICAgICAgICAvLyBzaW5ndWxhcml0eSBhdCBub3J0aCBwb2xlXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguUEkgLyAyO1xuICAgICAgICAgICAgb3V0LnkgPSAyICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGVzdCA8IC0wLjQ5OTUgKiB1bml0KSB7XG4gICAgICAgICAgICAvLyBzaW5ndWxhcml0eSBhdCBzb3V0aCBwb2xlXG4gICAgICAgICAgICBvdXQueCA9IC1NYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gLTIgKiBNYXRoLmF0YW4yKHEueSwgcS54KTtcbiAgICAgICAgICAgIG91dC56ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIHNpbmd1bGFyaXR5IC0gcSBpcyB0aGUgbWFqb3JpdHkgb2YgY2FzZXNcbiAgICAgICAgICAgIG91dC54ID0gTWF0aC5hc2luKDIgKiAocS53ICogcS54IC0gcS55ICogcS56KSk7XG4gICAgICAgICAgICBvdXQueSA9IE1hdGguYXRhbjIoMiAqIHEudyAqIHEueSArIDIgKiBxLnogKiBxLngsIDEgLSAyICogKHEueCAqIHEueCArIHEueSAqIHEueSkpO1xuICAgICAgICAgICAgb3V0LnogPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnogKyAyICogcS54ICogcS55LCAxIC0gMiAqIChxLnogKiBxLnogKyBxLnggKiBxLngpKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQueCAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC55ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgb3V0LnogKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICAvLyBlbnN1cmUgdGhlIGRlZ3JlZSB2YWx1ZXMgYXJlIGJldHdlZW4gMCBhbmQgMzYwXG4gICAgICAgIG91dC54ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueCwgMzYwKTtcbiAgICAgICAgb3V0LnkgPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC55LCAzNjApO1xuICAgICAgICBvdXQueiA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LnosIDM2MCk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZXVsZXJBbmdsZXMgPSBldWxlckFuZ2xlcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJvdGF0aW9uIGZyb20gdGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyAoeSwgeCwgeikgYW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0geWF3IC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFkgYXhpc1xuICAgICAqIEBwYXJhbSBwaXRjaCAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBYIGF4aXNcbiAgICAgKiBAcGFyYW0gcm9sbCAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBaIGF4aXNcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHlhdywgcGl0Y2gsIHJvbGwsIHJlc3VsdCkge1xuICAgICAgICAvLyBJbXBsZW1lbnRlZCB1bml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU2MDU1ODEzXG4gICAgICAgIGNvbnN0IGhhbGZQaXRjaCA9IHBpdGNoICogMC41O1xuICAgICAgICBjb25zdCBoYWxmWWF3ID0geWF3ICogMC41O1xuICAgICAgICBjb25zdCBoYWxmUm9sbCA9IHJvbGwgKiAwLjU7XG4gICAgICAgIGNvbnN0IGMxID0gTWF0aC5jb3MoaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgYzIgPSBNYXRoLmNvcyhoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgYzMgPSBNYXRoLmNvcyhoYWxmUm9sbCk7XG4gICAgICAgIGNvbnN0IHMxID0gTWF0aC5zaW4oaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgczIgPSBNYXRoLnNpbihoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgczMgPSBNYXRoLnNpbihoYWxmUm9sbCk7XG4gICAgICAgIHJlc3VsdC54ID0gYzIgKiBzMSAqIGMzICsgczIgKiBjMSAqIHMzO1xuICAgICAgICByZXN1bHQueSA9IHMyICogYzEgKiBjMyAtIGMyICogczEgKiBzMztcbiAgICAgICAgcmVzdWx0LnogPSBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzM7XG4gICAgICAgIHJlc3VsdC53ID0gYzIgKiBjMSAqIGMzICsgczIgKiBzMSAqIHMzO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYgPSByb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGdpdmVuIHF1YXRlcm5pb24gd2l0aCB0aGUgZ2l2ZW4gcm90YXRpb24gbWF0cml4IHZhbHVlc1xuICAgICAqIEBwYXJhbSBtYXRyaXggLSBkZWZpbmVzIHRoZSBzb3VyY2UgbWF0cml4XG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbVJvdGF0aW9uTWF0cml4VG9SZWYobWF0cml4LCByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1hdHJpeC5fbTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCBtMTEgPSBkYXRhWzBdLCBtMTIgPSBkYXRhWzRdLCBtMTMgPSBkYXRhWzhdO1xuICAgICAgICBjb25zdCBtMjEgPSBkYXRhWzFdLCBtMjIgPSBkYXRhWzVdLCBtMjMgPSBkYXRhWzldO1xuICAgICAgICBjb25zdCBtMzEgPSBkYXRhWzJdLCBtMzIgPSBkYXRhWzZdLCBtMzMgPSBkYXRhWzEwXTtcbiAgICAgICAgLy8gdHNsaW50OmVuYWJsZTpvbmUtdmFyaWFibGUtcGVyLWRlY2xhcmF0aW9uXG4gICAgICAgIGNvbnN0IHRyYWNlID0gbTExICsgbTIyICsgbTMzO1xuICAgICAgICBsZXQgcztcbiAgICAgICAgaWYgKHRyYWNlID4gMCkge1xuICAgICAgICAgICAgcyA9IDAuNSAvIE1hdGguc3FydCh0cmFjZSArIDEuMCk7XG4gICAgICAgICAgICByZXN1bHQudyA9IDAuMjUgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTMyIC0gbTIzKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTMgLSBtMzEpICogcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMSAtIG0xMikgKiBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMpIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTExIC0gbTIyIC0gbTMzKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0zMiAtIG0yMykgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAwLjI1ICogcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gKG0xMiArIG0yMSkgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnogPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobTIyID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0yMiAtIG0xMSAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMTMgLSBtMzEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0xMiArIG0yMSkgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAwLjI1ICogcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMyArIG0zMikgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTIxIC0gbTEyKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTMgKyBtMzEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMyArIG0zMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnogPSAwLjI1ICogcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmID0gZnJvbVJvdGF0aW9uTWF0cml4VG9SZWY7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgaW50ZXJwb2xhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGVycChsZWZ0LCByaWdodCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFF1YXRlcm5pb24uSWRlbnRpdHkoKTtcbiAgICAgICAgUXVhdGVybmlvbi5zbGVycFRvUmVmKGxlZnQsIHJpZ2h0LCBhbW91bnQsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnAgPSBzbGVycDtcbiAgICAvKipcbiAgICAgKiBJbnRlcnBvbGF0ZXMgYmV0d2VlbiB0d28gcXVhdGVybmlvbnMgYW5kIHN0b3JlcyBpdCBpbnRvIGEgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpIHtcbiAgICAgICAgbGV0IG51bTI7XG4gICAgICAgIGxldCBudW0zO1xuICAgICAgICBsZXQgbnVtNCA9IGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0Lnc7XG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XG4gICAgICAgIGlmIChudW00IDwgMCkge1xuICAgICAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICAgICAgICBudW00ID0gLW51bTQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bTQgPiAwLjk5OTk5OSkge1xuICAgICAgICAgICAgbnVtMyA9IDEgLSBhbW91bnQ7XG4gICAgICAgICAgICBudW0yID0gZmxhZyA/IC1hbW91bnQgOiBhbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBudW01ID0gTWF0aC5hY29zKG51bTQpO1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IDEuMCAvIE1hdGguc2luKG51bTUpO1xuICAgICAgICAgICAgbnVtMyA9IE1hdGguc2luKCgxLjAgLSBhbW91bnQpICogbnVtNSkgKiBudW02O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWdcbiAgICAgICAgICAgICAgICA/IC1NYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTZcbiAgICAgICAgICAgICAgICA6IE1hdGguc2luKGFtb3VudCAqIG51bTUpICogbnVtNjtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQueCA9IG51bTMgKiBsZWZ0LnggKyBudW0yICogcmlnaHQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBudW0zICogbGVmdC55ICsgbnVtMiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC56ID0gbnVtMyAqIGxlZnQueiArIG51bTIgKiByaWdodC56O1xuICAgICAgICByZXN1bHQudyA9IG51bTMgKiBsZWZ0LncgKyBudW0yICogcmlnaHQudztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5zbGVycFRvUmVmID0gc2xlcnBUb1JlZjtcbiAgICAvKipcbiAgICAgKiBNdWx0aXBsaWVzIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBzZWxmIC0gZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZFxuICAgICAqIEBwYXJhbSBxMSAtIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgYSBuZXcgcXVhdGVybmlvbiBzZXQgYXMgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUgc2VsZiBvbmUgd2l0aCB0aGUgZ2l2ZW4gb25lIFwicTFcIlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG11bHRpcGx5KHNlbGYsIHExKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwLCAxLjApO1xuICAgICAgICBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm11bHRpcGx5ID0gbXVsdGlwbHk7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2l2ZW4gXCJyZXN1bHRcIiBhcyB0aGUgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUgc2VsZiBvbmUgd2l0aCB0aGUgZ2l2ZW4gb25lIFwicTFcIlxuICAgICAqIEBwYXJhbSBzZWxmIC0gZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZFxuICAgICAqIEBwYXJhbSBxMSAtIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG11bHRpcGx5VG9SZWYoc2VsZiwgcTEsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IHNlbGYueCAqIHExLncgKyBzZWxmLnkgKiBxMS56IC0gc2VsZi56ICogcTEueSArIHNlbGYudyAqIHExLng7XG4gICAgICAgIHJlc3VsdC55ID0gLXNlbGYueCAqIHExLnogKyBzZWxmLnkgKiBxMS53ICsgc2VsZi56ICogcTEueCArIHNlbGYudyAqIHExLnk7XG4gICAgICAgIHJlc3VsdC56ID0gc2VsZi54ICogcTEueSAtIHNlbGYueSAqIHExLnggKyBzZWxmLnogKiBxMS53ICsgc2VsZi53ICogcTEuejtcbiAgICAgICAgcmVzdWx0LncgPSAtc2VsZi54ICogcTEueCAtIHNlbGYueSAqIHExLnkgLSBzZWxmLnogKiBxMS56ICsgc2VsZi53ICogcTEudztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmID0gbXVsdGlwbHlUb1JlZjtcbiAgICBmdW5jdGlvbiBhbmdsZUF4aXMoZGVncmVzcywgYXhpcykge1xuICAgICAgICBpZiAoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZChheGlzKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFF1YXRlcm5pb24uSWRlbnRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBJZGVudGl0eSgpO1xuICAgICAgICBsZXQgcmFkaWFucyA9IGRlZ3Jlc3MgKiB0eXBlc18xLkRFRzJSQUQ7XG4gICAgICAgIHJhZGlhbnMgKj0gMC41O1xuICAgICAgICBjb25zdCBhMiA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShheGlzKTtcbiAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuc2NhbGVUb1JlZihhMiwgTWF0aC5zaW4ocmFkaWFucyksIGEyKTtcbiAgICAgICAgcmVzdWx0LnggPSBhMi54O1xuICAgICAgICByZXN1bHQueSA9IGEyLnk7XG4gICAgICAgIHJlc3VsdC56ID0gYTIuejtcbiAgICAgICAgcmVzdWx0LncgPSBNYXRoLmNvcyhyYWRpYW5zKTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShyZXN1bHQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlQXhpcyA9IGFuZ2xlQXhpcztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgemVybyBmaWxsZWQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFplcm8oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5aZXJvID0gWmVybztcbn0pKFF1YXRlcm5pb24gPSBleHBvcnRzLlF1YXRlcm5pb24gfHwgKGV4cG9ydHMuUXVhdGVybmlvbiA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWF0ZXJuaW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vUXVhdGVybmlvblwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVmVjdG9yM1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2luZGV4XCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGFzUHJvbWlzZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayB1dGlsLmFzUHJvbWlzZX0uXHJcbiAqIEB0eXBlZGVmIGFzUHJvbWlzZUNhbGxiYWNrXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEFkZGl0aW9uYWwgYXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBwcm9taXNlIGZyb20gYSBub2RlLXN0eWxlIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge2FzUHJvbWlzZUNhbGxiYWNrfSBmbiBGdW5jdGlvbiB0byBjYWxsXHJcbiAqIEBwYXJhbSB7Kn0gY3R4IEZ1bmN0aW9uIGNvbnRleHRcclxuICogQHBhcmFtIHsuLi4qfSBwYXJhbXMgRnVuY3Rpb24gYXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHtQcm9taXNlPCo+fSBQcm9taXNpZmllZCBmdW5jdGlvblxyXG4gKi9cclxuZnVuY3Rpb24gYXNQcm9taXNlKGZuLCBjdHgvKiwgdmFyYXJncyAqLykge1xyXG4gICAgdmFyIHBhcmFtcyAgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpLFxyXG4gICAgICAgIG9mZnNldCAgPSAwLFxyXG4gICAgICAgIGluZGV4ICAgPSAyLFxyXG4gICAgICAgIHBlbmRpbmcgPSB0cnVlO1xyXG4gICAgd2hpbGUgKGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aClcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0KytdID0gYXJndW1lbnRzW2luZGV4KytdO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHBhcmFtc1tvZmZzZXRdID0gZnVuY3Rpb24gY2FsbGJhY2soZXJyLyosIHZhcmFyZ3MgKi8pIHtcclxuICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgcGFyYW1zLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tvZmZzZXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUuYXBwbHkobnVsbCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZm4uYXBwbHkoY3R4IHx8IG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgbWluaW1hbCBiYXNlNjQgaW1wbGVtZW50YXRpb24gZm9yIG51bWJlciBhcnJheXMuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbnZhciBiYXNlNjQgPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGJ5dGUgbGVuZ3RoIG9mIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIEJhc2U2NCBlbmNvZGVkIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlIGxlbmd0aFxyXG4gKi9cclxuYmFzZTY0Lmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aChzdHJpbmcpIHtcclxuICAgIHZhciBwID0gc3RyaW5nLmxlbmd0aDtcclxuICAgIGlmICghcClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciBuID0gMDtcclxuICAgIHdoaWxlICgtLXAgJSA0ID4gMSAmJiBzdHJpbmcuY2hhckF0KHApID09PSBcIj1cIilcclxuICAgICAgICArK247XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHN0cmluZy5sZW5ndGggKiAzKSAvIDQgLSBuO1xyXG59O1xyXG5cclxuLy8gQmFzZTY0IGVuY29kaW5nIHRhYmxlXHJcbnZhciBiNjQgPSBuZXcgQXJyYXkoNjQpO1xyXG5cclxuLy8gQmFzZTY0IGRlY29kaW5nIHRhYmxlXHJcbnZhciBzNjQgPSBuZXcgQXJyYXkoMTIzKTtcclxuXHJcbi8vIDY1Li45MCwgOTcuLjEyMiwgNDguLjU3LCA0MywgNDdcclxuZm9yICh2YXIgaSA9IDA7IGkgPCA2NDspXHJcbiAgICBzNjRbYjY0W2ldID0gaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpIC0gNTkgfCA0M10gPSBpKys7XHJcblxyXG4vKipcclxuICogRW5jb2RlcyBhIGJ1ZmZlciB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgU291cmNlIHN0YXJ0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgU291cmNlIGVuZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICovXHJcbmJhc2U2NC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoYnVmZmVyLCBzdGFydCwgZW5kKSB7XHJcbiAgICB2YXIgcGFydHMgPSBudWxsLFxyXG4gICAgICAgIGNodW5rID0gW107XHJcbiAgICB2YXIgaSA9IDAsIC8vIG91dHB1dCBpbmRleFxyXG4gICAgICAgIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XHJcbiAgICAgICAgdmFyIGIgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiA+PiAyXTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDMpIDw8IDQ7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W3QgfCBiID4+IDRdO1xyXG4gICAgICAgICAgICAgICAgdCA9IChiICYgMTUpIDw8IDI7XHJcbiAgICAgICAgICAgICAgICBqID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W3QgfCBiID4+IDZdO1xyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFtiICYgNjNdO1xyXG4gICAgICAgICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XHJcbiAgICAgICAgICAgIChwYXJ0cyB8fCAocGFydHMgPSBbXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChqKSB7XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0XTtcclxuICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICAgICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSA2MTtcclxuICAgIH1cclxuICAgIGlmIChwYXJ0cykge1xyXG4gICAgICAgIGlmIChpKVxyXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSkpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSk7XHJcbn07XHJcblxyXG52YXIgaW52YWxpZEVuY29kaW5nID0gXCJpbnZhbGlkIGVuY29kaW5nXCI7XHJcblxyXG4vKipcclxuICogRGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byBhIGJ1ZmZlci5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlblxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZW5jb2RpbmcgaXMgaW52YWxpZFxyXG4gKi9cclxuYmFzZTY0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQ7XHJcbiAgICB2YXIgaiA9IDAsIC8vIGdvdG8gaW5kZXhcclxuICAgICAgICB0OyAgICAgLy8gdGVtcG9yYXJ5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChjID09PSA2MSAmJiBqID4gMSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgaWYgKChjID0gczY0W2NdKSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkRW5jb2RpbmcpO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSB0IDw8IDIgfCAoYyAmIDQ4KSA+PiA0O1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAxNSkgPDwgNCB8IChjICYgNjApID4+IDI7XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSAodCAmIDMpIDw8IDYgfCBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaiA9PT0gMSlcclxuICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkRW5jb2RpbmcpO1xyXG4gICAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGFwcGVhcnMgdG8gYmUgYmFzZTY0IGVuY29kZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIHRlc3RcclxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBwcm9iYWJseSBiYXNlNjQgZW5jb2RlZCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAqL1xyXG5iYXNlNjQudGVzdCA9IGZ1bmN0aW9uIHRlc3Qoc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvLnRlc3Qoc3RyaW5nKTtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdHMgYSBuZXcgZXZlbnQgZW1pdHRlciBpbnN0YW5jZS5cclxuICogQGNsYXNzZGVzYyBBIG1pbmltYWwgZXZlbnQgZW1pdHRlci5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcmVkIGxpc3RlbmVycy5cclxuICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywqPn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xyXG59XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZ0IEV2ZW50IG5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gTGlzdGVuZXJcclxuICogQHBhcmFtIHsqfSBbY3R4XSBMaXN0ZW5lciBjb250ZXh0XHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZ0LCBmbiwgY3R4KSB7XHJcbiAgICAodGhpcy5fbGlzdGVuZXJzW2V2dF0gfHwgKHRoaXMuX2xpc3RlbmVyc1tldnRdID0gW10pKS5wdXNoKHtcclxuICAgICAgICBmbiAgOiBmbixcclxuICAgICAgICBjdHggOiBjdHggfHwgdGhpc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIG9yIGFueSBtYXRjaGluZyBsaXN0ZW5lcnMgaWYgYXJndW1lbnRzIGFyZSBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2V2dF0gRXZlbnQgbmFtZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIGlmIG9taXR0ZWQuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtmbl0gTGlzdGVuZXIgdG8gcmVtb3ZlLiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMgb2YgYGV2dGAgaWYgb21pdHRlZC5cclxuICogQHJldHVybnMge3V0aWwuRXZlbnRFbWl0dGVyfSBgdGhpc2BcclxuICovXHJcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gb2ZmKGV2dCwgZm4pIHtcclxuICAgIGlmIChldnQgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChmbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2dF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDspXHJcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldLmZuID09PSBmbilcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICsraTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0cyBhbiBldmVudCBieSBjYWxsaW5nIGl0cyBsaXN0ZW5lcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHNcclxuICogQHJldHVybnMge3V0aWwuRXZlbnRFbWl0dGVyfSBgdGhpc2BcclxuICovXHJcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZ0KSB7XHJcbiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2dF07XHJcbiAgICBpZiAobGlzdGVuZXJzKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSxcclxuICAgICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgZm9yICg7IGkgPCBhcmd1bWVudHMubGVuZ3RoOylcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaSsrXS5jdHgsIGFyZ3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGZhY3RvcnkpO1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIC8gd3JpdGVzIGZsb2F0cyAvIGRvdWJsZXMgZnJvbSAvIHRvIGJ1ZmZlcnMuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXRcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSAzMiBiaXQgZmxvYXQgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgMzIgYml0IGZsb2F0IGZyb20gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgU291cmNlIGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgNjQgYml0IGRvdWJsZSB0byBhIGJ1ZmZlciB1c2luZyBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgNjQgYml0IGRvdWJsZSB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVEb3VibGVCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSA2NCBiaXQgZG91YmxlIGZyb20gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWREb3VibGVMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSA2NCBiaXQgZG91YmxlIGZyb20gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWREb3VibGVCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vLyBGYWN0b3J5IGZ1bmN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBub2RlLWJhc2VkIHRlc3RpbmcgaW4gbW9kaWZpZWQgZ2xvYmFsIGVudmlyb25tZW50c1xyXG5mdW5jdGlvbiBmYWN0b3J5KGV4cG9ydHMpIHtcclxuXHJcbiAgICAvLyBmbG9hdDogdHlwZWQgYXJyYXlcclxuICAgIGlmICh0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSBcInVuZGVmaW5lZFwiKSAoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBmMzIgPSBuZXcgRmxvYXQzMkFycmF5KFsgLTAgXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGYzMi5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbM10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfY3B5KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbMF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbM107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0X2YzMl9yZXYodmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmMzJbMF0gPSB2YWw7XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgICAgXSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDFdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAzXSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZUZsb2F0TEUgPSBsZSA/IHdyaXRlRmxvYXRfZjMyX2NweSA6IHdyaXRlRmxvYXRfZjMyX3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdEJFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9yZXYgOiB3cml0ZUZsb2F0X2YzMl9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRGbG9hdF9mMzJfY3B5KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgcmV0dXJuIGYzMlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRGbG9hdF9mMzJfcmV2KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgcmV0dXJuIGYzMlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRMRSA9IGxlID8gcmVhZEZsb2F0X2YzMl9jcHkgOiByZWFkRmxvYXRfZjMyX3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfcmV2IDogcmVhZEZsb2F0X2YzMl9jcHk7XHJcblxyXG4gICAgLy8gZmxvYXQ6IGllZWU3NTRcclxuICAgIH0pKCk7IGVsc2UgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0X2llZWU3NTQod3JpdGVVaW50LCB2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciBzaWduID0gdmFsIDwgMCA/IDEgOiAwO1xyXG4gICAgICAgICAgICBpZiAoc2lnbilcclxuICAgICAgICAgICAgICAgIHZhbCA9IC12YWw7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IDApXHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTmFOKHZhbCkpXHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMjE0MzI4OTM0NCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWwgPiAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KSAvLyArLUluZmluaXR5XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTM5MDk1MDQwKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWwgPCAxLjE3NTQ5NDM1MDgyMjI4NzVlLTM4KSAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgTWF0aC5yb3VuZCh2YWwgLyAxLjQwMTI5ODQ2NDMyNDgxN2UtNDUpKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBleHBvbmVudCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKSxcclxuICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSA9IE1hdGgucm91bmQodmFsICogTWF0aC5wb3coMiwgLWV4cG9uZW50KSAqIDgzODg2MDgpICYgODM4ODYwNztcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IGV4cG9uZW50ICsgMTI3IDw8IDIzIHwgbWFudGlzc2EpID4+PiAwLCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gd3JpdGVGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdEJFID0gd3JpdGVGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50QkUpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfaWVlZTc1NChyZWFkVWludCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHVpbnQgPSByZWFkVWludChidWYsIHBvcyksXHJcbiAgICAgICAgICAgICAgICBzaWduID0gKHVpbnQgPj4gMzEpICogMiArIDEsXHJcbiAgICAgICAgICAgICAgICBleHBvbmVudCA9IHVpbnQgPj4+IDIzICYgMjU1LFxyXG4gICAgICAgICAgICAgICAgbWFudGlzc2EgPSB1aW50ICYgODM4ODYwNztcclxuICAgICAgICAgICAgcmV0dXJuIGV4cG9uZW50ID09PSAyNTVcclxuICAgICAgICAgICAgICAgID8gbWFudGlzc2FcclxuICAgICAgICAgICAgICAgID8gTmFOXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBJbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgOiBleHBvbmVudCA9PT0gMCAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgPyBzaWduICogMS40MDEyOTg0NjQzMjQ4MTdlLTQ1ICogbWFudGlzc2FcclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTUwKSAqIChtYW50aXNzYSArIDgzODg2MDgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRMRSA9IHJlYWRGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRMRSk7XHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRCRSA9IHJlYWRGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRCRSk7XHJcblxyXG4gICAgfSkoKTtcclxuXHJcbiAgICAvLyBkb3VibGU6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0NjRBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjY0ID0gbmV3IEZsb2F0NjRBcnJheShbLTBdKSxcclxuICAgICAgICAgICAgZjhiID0gbmV3IFVpbnQ4QXJyYXkoZjY0LmJ1ZmZlciksXHJcbiAgICAgICAgICAgIGxlICA9IGY4Yls3XSA9PT0gMTI4O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfY3B5KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbMF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4Yls0XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbNl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4Yls3XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRG91YmxlX2Y2NF9yZXYodmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmNjRbMF0gPSB2YWw7XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgICAgXSA9IGY4Yls3XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDFdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMl0gPSBmOGJbNV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAzXSA9IGY4Yls0XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDRdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNV0gPSBmOGJbMl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA2XSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDddID0gZjhiWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRG91YmxlTEUgPSBsZSA/IHdyaXRlRG91YmxlX2Y2NF9jcHkgOiB3cml0ZURvdWJsZV9mNjRfcmV2O1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfcmV2IDogd3JpdGVEb3VibGVfZjY0X2NweTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9mNjRfY3B5KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgZjhiWzRdID0gYnVmW3BvcyArIDRdO1xyXG4gICAgICAgICAgICBmOGJbNV0gPSBidWZbcG9zICsgNV07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyA2XTtcclxuICAgICAgICAgICAgZjhiWzddID0gYnVmW3BvcyArIDddO1xyXG4gICAgICAgICAgICByZXR1cm4gZjY0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9mNjRfcmV2KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzZdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbNV0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgZjhiWzNdID0gYnVmW3BvcyArIDRdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgNV07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyA2XTtcclxuICAgICAgICAgICAgZjhiWzBdID0gYnVmW3BvcyArIDddO1xyXG4gICAgICAgICAgICByZXR1cm4gZjY0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVMRSA9IGxlID8gcmVhZERvdWJsZV9mNjRfY3B5IDogcmVhZERvdWJsZV9mNjRfcmV2O1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlQkUgPSBsZSA/IHJlYWREb3VibGVfZjY0X3JldiA6IHJlYWREb3VibGVfZjY0X2NweTtcclxuXHJcbiAgICAvLyBkb3VibGU6IGllZWU3NTRcclxuICAgIH0pKCk7IGVsc2UgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9pZWVlNzU0KHdyaXRlVWludCwgb2ZmMCwgb2ZmMSwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgxIC8gdmFsID4gMCA/IC8qIHBvc2l0aXZlICovIDAgOiAvKiBuZWdhdGl2ZSAwICovIDIxNDc0ODM2NDgsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMjE0Njk1OTM2MCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgPiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkgeyAvLyArLUluZmluaXR5XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IDIxNDY0MzUwNzIpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hbnRpc3NhO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCA8IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSB7IC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgLyA1ZS0zMjQ7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KG1hbnRpc3NhID4+PiAwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IG1hbnRpc3NhIC8gNDI5NDk2NzI5NikgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBvbmVudCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT09IDEwMjQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gMTAyMztcclxuICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSA9IHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KG1hbnRpc3NhICogNDUwMzU5OTYyNzM3MDQ5NiA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEwMjMgPDwgMjAgfCBtYW50aXNzYSAqIDEwNDg1NzYgJiAxMDQ4NTc1KSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRG91YmxlQkUgPSB3cml0ZURvdWJsZV9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50QkUsIDQsIDApO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRG91YmxlX2llZWU3NTQocmVhZFVpbnQsIG9mZjAsIG9mZjEsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciBsbyA9IHJlYWRVaW50KGJ1ZiwgcG9zICsgb2ZmMCksXHJcbiAgICAgICAgICAgICAgICBoaSA9IHJlYWRVaW50KGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIHZhciBzaWduID0gKGhpID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSBoaSA+Pj4gMjAgJiAyMDQ3LFxyXG4gICAgICAgICAgICAgICAgbWFudGlzc2EgPSA0Mjk0OTY3Mjk2ICogKGhpICYgMTA0ODU3NSkgKyBsbztcclxuICAgICAgICAgICAgcmV0dXJuIGV4cG9uZW50ID09PSAyMDQ3XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDVlLTMyNCAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDEwNzUpICogKG1hbnRpc3NhICsgNDUwMzU5OTYyNzM3MDQ5Nik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVMRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUsIDAsIDQpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gcmVhZERvdWJsZV9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRCRSwgNCwgMCk7XHJcblxyXG4gICAgfSkoKTtcclxuXHJcbiAgICByZXR1cm4gZXhwb3J0cztcclxufVxyXG5cclxuLy8gdWludCBoZWxwZXJzXHJcblxyXG5mdW5jdGlvbiB3cml0ZVVpbnRMRSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICBidWZbcG9zICAgIF0gPSAgdmFsICAgICAgICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDJdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgM10gPSAgdmFsID4+PiAyNDtcclxufVxyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50QkUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCA+Pj4gMjQ7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiAxNiAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDggICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRVaW50TEUoYnVmLCBwb3MpIHtcclxuICAgIHJldHVybiAoYnVmW3BvcyAgICBdXHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAxXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCAxNlxyXG4gICAgICAgICAgfCBidWZbcG9zICsgM10gPDwgMjQpID4+PiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludEJFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXSA8PCAyNFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDJdIDw8IDhcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdKSA+Pj4gMDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBpbnF1aXJlO1xyXG5cclxuLyoqXHJcbiAqIFJlcXVpcmVzIGEgbW9kdWxlIG9ubHkgaWYgYXZhaWxhYmxlLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSBNb2R1bGUgdG8gcmVxdWlyZVxyXG4gKiBAcmV0dXJucyB7P09iamVjdH0gUmVxdWlyZWQgbW9kdWxlIGlmIGF2YWlsYWJsZSBhbmQgbm90IGVtcHR5LCBvdGhlcndpc2UgYG51bGxgXHJcbiAqL1xyXG5mdW5jdGlvbiBpbnF1aXJlKG1vZHVsZU5hbWUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG1vZCA9IGV2YWwoXCJxdWlyZVwiLnJlcGxhY2UoL14vLFwicmVcIikpKG1vZHVsZU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcclxuICAgICAgICBpZiAobW9kICYmIChtb2QubGVuZ3RoIHx8IE9iamVjdC5rZXlzKG1vZCkubGVuZ3RoKSlcclxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcclxuICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgbWluaW1hbCBVVEY4IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgdXRmOCA9IGV4cG9ydHM7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgVVRGOCBieXRlIGxlbmd0aCBvZiBhIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbnV0ZjgubGVuZ3RoID0gZnVuY3Rpb24gdXRmOF9sZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgbGVuID0gMCxcclxuICAgICAgICBjID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgYyA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIGlmIChjIDwgMTI4KVxyXG4gICAgICAgICAgICBsZW4gKz0gMTtcclxuICAgICAgICBlbHNlIGlmIChjIDwgMjA0OClcclxuICAgICAgICAgICAgbGVuICs9IDI7XHJcbiAgICAgICAgZWxzZSBpZiAoKGMgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4RkMwMCkgPT09IDB4REMwMCkge1xyXG4gICAgICAgICAgICArK2k7XHJcbiAgICAgICAgICAgIGxlbiArPSA0O1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBsZW4gKz0gMztcclxuICAgIH1cclxuICAgIHJldHVybiBsZW47XHJcbn07XHJcblxyXG4vKipcclxuICogUmVhZHMgVVRGOCBieXRlcyBhcyBhIHN0cmluZy5cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgU291cmNlIHN0YXJ0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgU291cmNlIGVuZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgcmVhZFxyXG4gKi9cclxudXRmOC5yZWFkID0gZnVuY3Rpb24gdXRmOF9yZWFkKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0O1xyXG4gICAgaWYgKGxlbiA8IDEpXHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB2YXIgcGFydHMgPSBudWxsLFxyXG4gICAgICAgIGNodW5rID0gW10sXHJcbiAgICAgICAgaSA9IDAsIC8vIGNoYXIgb2Zmc2V0XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XHJcbiAgICAgICAgdCA9IGJ1ZmZlcltzdGFydCsrXTtcclxuICAgICAgICBpZiAodCA8IDEyOClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IHQ7XHJcbiAgICAgICAgZWxzZSBpZiAodCA+IDE5MSAmJiB0IDwgMjI0KVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAzMSkgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzO1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAyMzkgJiYgdCA8IDM2NSkge1xyXG4gICAgICAgICAgICB0ID0gKCh0ICYgNykgPDwgMTggfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDEyIHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCA2IHwgYnVmZmVyW3N0YXJ0KytdICYgNjMpIC0gMHgxMDAwMDtcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4RDgwMCArICh0ID4+IDEwKTtcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4REMwMCArICh0ICYgMTAyMyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDE1KSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzO1xyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIHN0cmluZyBhcyBVVEY4IGJ5dGVzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFNvdXJjZSBzdHJpbmdcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgRGVzdGluYXRpb24gYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgRGVzdGluYXRpb24gb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGVzIHdyaXR0ZW5cclxuICovXHJcbnV0Zjgud3JpdGUgPSBmdW5jdGlvbiB1dGY4X3dyaXRlKHN0cmluZywgYnVmZmVyLCBvZmZzZXQpIHtcclxuICAgIHZhciBzdGFydCA9IG9mZnNldCxcclxuICAgICAgICBjMSwgLy8gY2hhcmFjdGVyIDFcclxuICAgICAgICBjMjsgLy8gY2hhcmFjdGVyIDJcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgYzEgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYzEgPCAxMjgpIHtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYzEgPCAyMDQ4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAgICAgIHwgMTkyO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2UgaWYgKChjMSAmIDB4RkMwMCkgPT09IDB4RDgwMCAmJiAoKGMyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpKSAmIDB4RkMwMCkgPT09IDB4REMwMCkge1xyXG4gICAgICAgICAgICBjMSA9IDB4MTAwMDAgKyAoKGMxICYgMHgwM0ZGKSA8PCAxMCkgKyAoYzIgJiAweDAzRkYpO1xyXG4gICAgICAgICAgICArK2k7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiAxOCAgICAgIHwgMjQwO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgJiA2MyB8IDEyODtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiAxMiAgICAgIHwgMjI0O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgJiA2MyB8IDEyODtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0O1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBwb29sO1xyXG5cclxuLyoqXHJcbiAqIEFuIGFsbG9jYXRvciBhcyB1c2VkIGJ5IHtAbGluayB1dGlsLnBvb2x9LlxyXG4gKiBAdHlwZWRlZiBQb29sQWxsb2NhdG9yXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcclxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIHNsaWNlciBhcyB1c2VkIGJ5IHtAbGluayB1dGlsLnBvb2x9LlxyXG4gKiBAdHlwZWRlZiBQb29sU2xpY2VyXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFN0YXJ0IG9mZnNldFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIEVuZCBvZmZzZXRcclxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlciBzbGljZVxyXG4gKiBAdGhpcyB7VWludDhBcnJheX1cclxuICovXHJcblxyXG4vKipcclxuICogQSBnZW5lcmFsIHB1cnBvc2UgYnVmZmVyIHBvb2wuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1Bvb2xBbGxvY2F0b3J9IGFsbG9jIEFsbG9jYXRvclxyXG4gKiBAcGFyYW0ge1Bvb2xTbGljZXJ9IHNsaWNlIFNsaWNlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9ODE5Ml0gU2xhYiBzaXplXHJcbiAqIEByZXR1cm5zIHtQb29sQWxsb2NhdG9yfSBQb29sZWQgYWxsb2NhdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBwb29sKGFsbG9jLCBzbGljZSwgc2l6ZSkge1xyXG4gICAgdmFyIFNJWkUgICA9IHNpemUgfHwgODE5MjtcclxuICAgIHZhciBNQVggICAgPSBTSVpFID4+PiAxO1xyXG4gICAgdmFyIHNsYWIgICA9IG51bGw7XHJcbiAgICB2YXIgb2Zmc2V0ID0gU0laRTtcclxuICAgIHJldHVybiBmdW5jdGlvbiBwb29sX2FsbG9jKHNpemUpIHtcclxuICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IE1BWClcclxuICAgICAgICAgICAgcmV0dXJuIGFsbG9jKHNpemUpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgKyBzaXplID4gU0laRSkge1xyXG4gICAgICAgICAgICBzbGFiID0gYWxsb2MoU0laRSk7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBidWYgPSBzbGljZS5jYWxsKHNsYWIsIG9mZnNldCwgb2Zmc2V0ICs9IHNpemUpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgJiA3KSAvLyBhbGlnbiB0byAzMiBiaXRcclxuICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCB8IDcpICsgMTtcclxuICAgICAgICByZXR1cm4gYnVmO1xyXG4gICAgfTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gTG9uZ0JpdHM7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMuXG4gKiBAY2xhc3NkZXNjIEhlbHBlciBjbGFzcyBmb3Igd29ya2luZyB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBsbyBMb3cgMzIgYml0cywgdW5zaWduZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaSBIaWdoIDMyIGJpdHMsIHVuc2lnbmVkXG4gKi9cbmZ1bmN0aW9uIExvbmdCaXRzKGxvLCBoaSkge1xuXG4gICAgLy8gbm90ZSB0aGF0IHRoZSBjYXN0cyBiZWxvdyBhcmUgdGhlb3JldGljYWxseSB1bm5lY2Vzc2FyeSBhcyBvZiB0b2RheSwgYnV0IG9sZGVyIHN0YXRpY2FsbHlcbiAgICAvLyBnZW5lcmF0ZWQgY29udmVydGVyIGNvZGUgbWlnaHQgc3RpbGwgY2FsbCB0aGUgY3RvciB3aXRoIHNpZ25lZCAzMmJpdHMuIGtlcHQgZm9yIGNvbXBhdC5cblxuICAgIC8qKlxuICAgICAqIExvdyBiaXRzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sbyA9IGxvID4+PiAwO1xuXG4gICAgLyoqXG4gICAgICogSGlnaCBiaXRzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oaSA9IGhpID4+PiAwO1xufVxuXG4vKipcbiAqIFplcm8gYml0cy5cbiAqIEBtZW1iZXJvZiB1dGlsLkxvbmdCaXRzXG4gKiBAdHlwZSB7dXRpbC5Mb25nQml0c31cbiAqL1xudmFyIHplcm8gPSBMb25nQml0cy56ZXJvID0gbmV3IExvbmdCaXRzKDAsIDApO1xuXG56ZXJvLnRvTnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuemVyby56ekVuY29kZSA9IHplcm8uenpEZWNvZGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH07XG56ZXJvLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfTtcblxuLyoqXG4gKiBaZXJvIGhhc2guXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xudmFyIHplcm9IYXNoID0gTG9uZ0JpdHMuemVyb0hhc2ggPSBcIlxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFwiO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIHRoZSBzcGVjaWZpZWQgbnVtYmVyLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gSW5zdGFuY2VcbiAqL1xuTG9uZ0JpdHMuZnJvbU51bWJlciA9IGZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHZhciBzaWduID0gdmFsdWUgPCAwO1xuICAgIGlmIChzaWduKVxuICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcbiAgICB2YXIgbG8gPSB2YWx1ZSA+Pj4gMCxcbiAgICAgICAgaGkgPSAodmFsdWUgLSBsbykgLyA0Mjk0OTY3Mjk2ID4+PiAwO1xuICAgIGlmIChzaWduKSB7XG4gICAgICAgIGhpID0gfmhpID4+PiAwO1xuICAgICAgICBsbyA9IH5sbyA+Pj4gMDtcbiAgICAgICAgaWYgKCsrbG8gPiA0Mjk0OTY3Mjk1KSB7XG4gICAgICAgICAgICBsbyA9IDA7XG4gICAgICAgICAgICBpZiAoKytoaSA+IDQyOTQ5NjcyOTUpXG4gICAgICAgICAgICAgICAgaGkgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMobG8sIGhpKTtcbn07XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzIGZyb20gYSBudW1iZXIsIGxvbmcgb3Igc3RyaW5nLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gSW5zdGFuY2VcbiAqL1xuTG9uZ0JpdHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20odmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh1dGlsLkxvbmcpXG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWwuTG9uZy5mcm9tU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIocGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sb3cgfHwgdmFsdWUuaGlnaCA/IG5ldyBMb25nQml0cyh2YWx1ZS5sb3cgPj4+IDAsIHZhbHVlLmhpZ2ggPj4+IDApIDogemVybztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSBwb3NzaWJseSB1bnNhZmUgSmF2YVNjcmlwdCBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bnNpZ25lZD1mYWxzZV0gV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFBvc3NpYmx5IHVuc2FmZSBudW1iZXJcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIodW5zaWduZWQpIHtcbiAgICBpZiAoIXVuc2lnbmVkICYmIHRoaXMuaGkgPj4+IDMxKSB7XG4gICAgICAgIHZhciBsbyA9IH50aGlzLmxvICsgMSA+Pj4gMCxcbiAgICAgICAgICAgIGhpID0gfnRoaXMuaGkgICAgID4+PiAwO1xuICAgICAgICBpZiAoIWxvKVxuICAgICAgICAgICAgaGkgPSBoaSArIDEgPj4+IDA7XG4gICAgICAgIHJldHVybiAtKGxvICsgaGkgKiA0Mjk0OTY3Mjk2KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG8gKyB0aGlzLmhpICogNDI5NDk2NzI5Njtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSBsb25nLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7TG9uZ30gTG9uZ1xuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9Mb25nID0gZnVuY3Rpb24gdG9Mb25nKHVuc2lnbmVkKSB7XG4gICAgcmV0dXJuIHV0aWwuTG9uZ1xuICAgICAgICA/IG5ldyB1dGlsLkxvbmcodGhpcy5sbyB8IDAsIHRoaXMuaGkgfCAwLCBCb29sZWFuKHVuc2lnbmVkKSlcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiB7IGxvdzogdGhpcy5sbyB8IDAsIGhpZ2g6IHRoaXMuaGkgfCAwLCB1bnNpZ25lZDogQm9vbGVhbih1bnNpZ25lZCkgfTtcbn07XG5cbnZhciBjaGFyQ29kZUF0ID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIHRoZSBzcGVjaWZpZWQgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBCaXRzXG4gKi9cbkxvbmdCaXRzLmZyb21IYXNoID0gZnVuY3Rpb24gZnJvbUhhc2goaGFzaCkge1xuICAgIGlmIChoYXNoID09PSB6ZXJvSGFzaClcbiAgICAgICAgcmV0dXJuIHplcm87XG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhcbiAgICAgICAgKCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMClcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMSkgPDwgOFxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAyKSA8PCAxNlxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAzKSA8PCAyNCkgPj4+IDBcbiAgICAsXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDQpXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDUpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNykgPDwgMjQpID4+PiAwXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoLlxuICogQHJldHVybnMge3N0cmluZ30gSGFzaFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9IYXNoID0gZnVuY3Rpb24gdG9IYXNoKCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICB0aGlzLmxvICAgICAgICAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gOCAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDE2ICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAyNCAgICAgICxcbiAgICAgICAgdGhpcy5oaSAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMjRcbiAgICApO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGVuY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekVuY29kZSA9IGZ1bmN0aW9uIHp6RW5jb2RlKCkge1xuICAgIHZhciBtYXNrID0gICB0aGlzLmhpID4+IDMxO1xuICAgIHRoaXMuaGkgID0gKCh0aGlzLmhpIDw8IDEgfCB0aGlzLmxvID4+PiAzMSkgXiBtYXNrKSA+Pj4gMDtcbiAgICB0aGlzLmxvICA9ICggdGhpcy5sbyA8PCAxICAgICAgICAgICAgICAgICAgIF4gbWFzaykgPj4+IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFppZy16YWcgZGVjb2RlcyB0aGlzIGxvbmcgYml0cy5cbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBgdGhpc2BcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnp6RGVjb2RlID0gZnVuY3Rpb24genpEZWNvZGUoKSB7XG4gICAgdmFyIG1hc2sgPSAtKHRoaXMubG8gJiAxKTtcbiAgICB0aGlzLmxvICA9ICgodGhpcy5sbyA+Pj4gMSB8IHRoaXMuaGkgPDwgMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5oaSAgPSAoIHRoaXMuaGkgPj4+IDEgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgdGhpcyBsb25nYml0cyB3aGVuIGVuY29kZWQgYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBMZW5ndGhcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aCgpIHtcbiAgICB2YXIgcGFydDAgPSAgdGhpcy5sbyxcbiAgICAgICAgcGFydDEgPSAodGhpcy5sbyA+Pj4gMjggfCB0aGlzLmhpIDw8IDQpID4+PiAwLFxuICAgICAgICBwYXJ0MiA9ICB0aGlzLmhpID4+PiAyNDtcbiAgICByZXR1cm4gcGFydDIgPT09IDBcbiAgICAgICAgID8gcGFydDEgPT09IDBcbiAgICAgICAgICAgPyBwYXJ0MCA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MCA8IDEyOCA/IDEgOiAyXG4gICAgICAgICAgICAgOiBwYXJ0MCA8IDIwOTcxNTIgPyAzIDogNFxuICAgICAgICAgICA6IHBhcnQxIDwgMTYzODRcbiAgICAgICAgICAgICA/IHBhcnQxIDwgMTI4ID8gNSA6IDZcbiAgICAgICAgICAgICA6IHBhcnQxIDwgMjA5NzE1MiA/IDcgOiA4XG4gICAgICAgICA6IHBhcnQyIDwgMTI4ID8gOSA6IDEwO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHV0aWwgPSBleHBvcnRzO1xuXG4vLyB1c2VkIHRvIHJldHVybiBhIFByb21pc2Ugd2hlcmUgY2FsbGJhY2sgaXMgb21pdHRlZFxudXRpbC5hc1Byb21pc2UgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvYXNwcm9taXNlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gYmFzZTY0IGVuY29kZWQgc3RyaW5nc1xudXRpbC5iYXNlNjQgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvYmFzZTY0XCIpO1xuXG4vLyBiYXNlIGNsYXNzIG9mIHJwYy5TZXJ2aWNlXG51dGlsLkV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9ldmVudGVtaXR0ZXJcIik7XG5cbi8vIGZsb2F0IGhhbmRsaW5nIGFjY3Jvc3MgYnJvd3NlcnNcbnV0aWwuZmxvYXQgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZmxvYXRcIik7XG5cbi8vIHJlcXVpcmVzIG1vZHVsZXMgb3B0aW9uYWxseSBhbmQgaGlkZXMgdGhlIGNhbGwgZnJvbSBidW5kbGVyc1xudXRpbC5pbnF1aXJlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2lucXVpcmVcIik7XG5cbi8vIGNvbnZlcnRzIHRvIC8gZnJvbSB1dGY4IGVuY29kZWQgc3RyaW5nc1xudXRpbC51dGY4ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3V0ZjhcIik7XG5cbi8vIHByb3ZpZGVzIGEgbm9kZS1saWtlIGJ1ZmZlciBwb29sIGluIHRoZSBicm93c2VyXG51dGlsLnBvb2wgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvcG9vbFwiKTtcblxuLy8gdXRpbGl0eSB0byB3b3JrIHdpdGggdGhlIGxvdyBhbmQgaGlnaCBiaXRzIG9mIGEgNjQgYml0IHZhbHVlXG51dGlsLkxvbmdCaXRzID0gcmVxdWlyZShcIi4vbG9uZ2JpdHNcIik7XG5cbi8qKlxuICogV2hldGhlciBydW5uaW5nIHdpdGhpbiBub2RlIG9yIG5vdC5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xudXRpbC5pc05vZGUgPSBCb29sZWFuKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWxcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5cbi8qKlxuICogR2xvYmFsIG9iamVjdCByZWZlcmVuY2UuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge09iamVjdH1cbiAqL1xudXRpbC5nbG9iYWwgPSB1dGlsLmlzTm9kZSAmJiBnbG9iYWxcbiAgICAgICAgICAgfHwgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3dcbiAgICAgICAgICAgfHwgdHlwZW9mIHNlbGYgICAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmXG4gICAgICAgICAgIHx8IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cbi8qKlxuICogQW4gaW1tdWFibGUgZW1wdHkgYXJyYXkuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge0FycmF5LjwqPn1cbiAqIEBjb25zdFxuICovXG51dGlsLmVtcHR5QXJyYXkgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZShbXSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBbXTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogQW4gaW1tdXRhYmxlIGVtcHR5IG9iamVjdC5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUgPyBPYmplY3QuZnJlZXplKHt9KSA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHt9OyAvLyB1c2VkIG9uIHByb3RvdHlwZXNcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlclxuICovXG51dGlsLmlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgc3RyaW5nLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZ1xuICovXG51dGlsLmlzU3RyaW5nID0gZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgbm9uLW51bGwgb2JqZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdFxuICovXG51dGlsLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvbiBhIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LlxuICogVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgdXRpbC5pc1NldH0uXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzc2V0ID1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvbiBhIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBQbGFpbiBvYmplY3Qgb3IgbWVzc2FnZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbnV0aWwuaXNTZXQgPSBmdW5jdGlvbiBpc1NldChvYmosIHByb3ApIHtcbiAgICB2YXIgdmFsdWUgPSBvYmpbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgb2JqLmhhc093blByb3BlcnR5KHByb3ApKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcSwgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkgPiAwO1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQW55IGNvbXBhdGlibGUgQnVmZmVyIGluc3RhbmNlLlxuICogVGhpcyBpcyBhIG1pbmltYWwgc3RhbmQtYWxvbmUgZGVmaW5pdGlvbiBvZiBhIEJ1ZmZlciBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbm9kZSdzIHR5cGluZ3MuXG4gKiBAaW50ZXJmYWNlIEJ1ZmZlclxuICogQGV4dGVuZHMgVWludDhBcnJheVxuICovXG5cbi8qKlxuICogTm9kZSdzIEJ1ZmZlciBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8QnVmZmVyPn1cbiAqL1xudXRpbC5CdWZmZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIEJ1ZmZlciA9IHV0aWwuaW5xdWlyZShcImJ1ZmZlclwiKS5CdWZmZXI7XG4gICAgICAgIC8vIHJlZnVzZSB0byB1c2Ugbm9uLW5vZGUgYnVmZmVycyBpZiBub3QgZXhwbGljaXRseSBhc3NpZ25lZCAocGVyZiByZWFzb25zKTpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5wcm90b3R5cGUudXRmOFdyaXRlID8gQnVmZmVyIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gbnVsbDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn0pKCk7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmdWxsIGZvciBCdWZmZXIuZnJvbS5cbnV0aWwuX0J1ZmZlcl9mcm9tID0gbnVsbDtcblxuLy8gSW50ZXJuYWwgYWxpYXMgb2Ygb3IgcG9seWZpbGwgZm9yIEJ1ZmZlci5hbGxvY1Vuc2FmZS5cbnV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IG51bGw7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBidWZmZXIgb2Ygd2hhdGV2ZXIgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtudW1iZXJ8bnVtYmVyW119IFtzaXplT3JBcnJheT0wXSBCdWZmZXIgc2l6ZSBvciBudW1iZXIgYXJyYXlcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fEJ1ZmZlcn0gQnVmZmVyXG4gKi9cbnV0aWwubmV3QnVmZmVyID0gZnVuY3Rpb24gbmV3QnVmZmVyKHNpemVPckFycmF5KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdHlwZW9mIHNpemVPckFycmF5ID09PSBcIm51bWJlclwiXG4gICAgICAgID8gdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlKHNpemVPckFycmF5KVxuICAgICAgICAgICAgOiBuZXcgdXRpbC5BcnJheShzaXplT3JBcnJheSlcbiAgICAgICAgOiB1dGlsLkJ1ZmZlclxuICAgICAgICAgICAgPyB1dGlsLl9CdWZmZXJfZnJvbShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogdHlwZW9mIFVpbnQ4QXJyYXkgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICA/IHNpemVPckFycmF5XG4gICAgICAgICAgICAgICAgOiBuZXcgVWludDhBcnJheShzaXplT3JBcnJheSk7XG59O1xuXG4vKipcbiAqIEFycmF5IGltcGxlbWVudGF0aW9uIHVzZWQgaW4gdGhlIGJyb3dzZXIuIGBVaW50OEFycmF5YCBpZiBzdXBwb3J0ZWQsIG90aGVyd2lzZSBgQXJyYXlgLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPFVpbnQ4QXJyYXk+fVxuICovXG51dGlsLkFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCIgPyBVaW50OEFycmF5IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDogQXJyYXk7XG5cbi8qKlxuICogQW55IGNvbXBhdGlibGUgTG9uZyBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBMb25nIGluc3RhbmNlLiBUaGUgYWN0dWFsIHR5cGUgaXMgdGhhdCBleHBvcnRlZCBieSBsb25nLmpzLlxuICogQGludGVyZmFjZSBMb25nXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG93IExvdyBiaXRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGlnaCBIaWdoIGJpdHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqL1xuXG4vKipcbiAqIExvbmcuanMncyBMb25nIGNsYXNzIGlmIGF2YWlsYWJsZS5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxMb25nPn1cbiAqL1xudXRpbC5Mb25nID0gLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTyAmJiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5kY29kZUlPLkxvbmdcbiAgICAgICAgIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLkxvbmdcbiAgICAgICAgIHx8IHV0aWwuaW5xdWlyZShcImxvbmdcIik7XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDIgYml0IChgYm9vbGApIG1hcCBrZXlzLlxuICogQHR5cGUge1JlZ0V4cH1cbiAqIEBjb25zdFxuICovXG51dGlsLmtleTJSZSA9IC9edHJ1ZXxmYWxzZXwwfDEkLztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byB2ZXJpZnkgMzIgYml0IChgaW50MzJgIGV0Yy4pIG1hcCBrZXlzLlxuICogQHR5cGUge1JlZ0V4cH1cbiAqIEBjb25zdFxuICovXG51dGlsLmtleTMyUmUgPSAvXi0/KD86MHxbMS05XVswLTldKikkLztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byB2ZXJpZnkgNjQgYml0IChgaW50NjRgIGV0Yy4pIG1hcCBrZXlzLlxuICogQHR5cGUge1JlZ0V4cH1cbiAqIEBjb25zdFxuICovXG51dGlsLmtleTY0UmUgPSAvXig/OltcXFxceDAwLVxcXFx4ZmZdezh9fC0/KD86MHxbMS05XVswLTldKikpJC87XG5cbi8qKlxuICogQ29udmVydHMgYSBudW1iZXIgb3IgbG9uZyB0byBhbiA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xudXRpbC5sb25nVG9IYXNoID0gZnVuY3Rpb24gbG9uZ1RvSGFzaCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgICA/IHV0aWwuTG9uZ0JpdHMuZnJvbSh2YWx1ZSkudG9IYXNoKClcbiAgICAgICAgOiB1dGlsLkxvbmdCaXRzLnplcm9IYXNoO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoIHN0cmluZyB0byBhIGxvbmcgb3IgbnVtYmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggSGFzaFxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7TG9uZ3xudW1iZXJ9IE9yaWdpbmFsIHZhbHVlXG4gKi9cbnV0aWwubG9uZ0Zyb21IYXNoID0gZnVuY3Rpb24gbG9uZ0Zyb21IYXNoKGhhc2gsIHVuc2lnbmVkKSB7XG4gICAgdmFyIGJpdHMgPSB1dGlsLkxvbmdCaXRzLmZyb21IYXNoKGhhc2gpO1xuICAgIGlmICh1dGlsLkxvbmcpXG4gICAgICAgIHJldHVybiB1dGlsLkxvbmcuZnJvbUJpdHMoYml0cy5sbywgYml0cy5oaSwgdW5zaWduZWQpO1xuICAgIHJldHVybiBiaXRzLnRvTnVtYmVyKEJvb2xlYW4odW5zaWduZWQpKTtcbn07XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzb3VyY2Ugb2JqZWN0IGludG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBkc3QgRGVzdGluYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBzcmMgU291cmNlIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBbaWZOb3RTZXQ9ZmFsc2VdIE1lcmdlcyBvbmx5IGlmIHRoZSBrZXkgaXMgbm90IGFscmVhZHkgc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IERlc3RpbmF0aW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiBtZXJnZShkc3QsIHNyYywgaWZOb3RTZXQpIHsgLy8gdXNlZCBieSBjb252ZXJ0ZXJzXG4gICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgaWYgKGRzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkIHx8ICFpZk5vdFNldClcbiAgICAgICAgICAgIGRzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICByZXR1cm4gZHN0O1xufVxuXG51dGlsLm1lcmdlID0gbWVyZ2U7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHN0cmluZyB0byBsb3dlciBjYXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBTdHJpbmcgdG8gY29udmVydFxuICogQHJldHVybnMge3N0cmluZ30gQ29udmVydGVkIHN0cmluZ1xuICovXG51dGlsLmxjRmlyc3QgPSBmdW5jdGlvbiBsY0ZpcnN0KHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIGVycm9yIGNvbnN0cnVjdG9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEVycm9yIG5hbWVcbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3RvcjxFcnJvcj59IEN1c3RvbSBlcnJvciBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBuZXdFcnJvcihuYW1lKSB7XG5cbiAgICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzKSB7XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEN1c3RvbUVycm9yKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgLy8gRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICAgICAgLy8gXiBqdXN0IHJldHVybnMgYSBuZXcgZXJyb3IgaW5zdGFuY2UgYmVjYXVzZSB0aGUgY3RvciBjYW4gYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb25cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXNzYWdlXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1lc3NhZ2U7IH0gfSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSAvLyBub2RlXG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDdXN0b21FcnJvcik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YWNrXCIsIHsgdmFsdWU6IG5ldyBFcnJvcigpLnN0YWNrIHx8IFwiXCIgfSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICBtZXJnZSh0aGlzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICAoQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEN1c3RvbUVycm9yO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEN1c3RvbUVycm9yLnByb3RvdHlwZSwgXCJuYW1lXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG5hbWU7IH0gfSk7XG5cbiAgICBDdXN0b21FcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiOiBcIiArIHRoaXMubWVzc2FnZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG51dGlsLm5ld0Vycm9yID0gbmV3RXJyb3I7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBwcm90b2NvbCBlcnJvci5cbiAqIEBjbGFzc2Rlc2MgRXJyb3Igc3ViY2xhc3MgaW5kaWNhdGluZyBhIHByb3RvY29sIHNwZWNpZmMgZXJyb3IuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGV4dGVuZHMgRXJyb3JcbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBFcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBbcHJvcGVydGllc10gQWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gKiBAZXhhbXBsZVxuICogdHJ5IHtcbiAqICAgICBNeU1lc3NhZ2UuZGVjb2RlKHNvbWVCdWZmZXIpOyAvLyB0aHJvd3MgaWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gKiB9IGNhdGNoIChlKSB7XG4gKiAgICAgaWYgKGUgaW5zdGFuY2VvZiBQcm90b2NvbEVycm9yICYmIGUuaW5zdGFuY2UpXG4gKiAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBzbyBmYXI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZS5pbnN0YW5jZSkpO1xuICogfVxuICovXG51dGlsLlByb3RvY29sRXJyb3IgPSBuZXdFcnJvcihcIlByb3RvY29sRXJyb3JcIik7XG5cbi8qKlxuICogU28gZmFyIGRlY29kZWQgbWVzc2FnZSBpbnN0YW5jZS5cbiAqIEBuYW1lIHV0aWwuUHJvdG9jb2xFcnJvciNpbnN0YW5jZVxuICogQHR5cGUge01lc3NhZ2U8VD59XG4gKi9cblxuLyoqXG4gKiBBIE9uZU9mIGdldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZkdldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZkdldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFNldCBmaWVsZCBuYW1lLCBpZiBhbnlcbiAqL1xuXG4vKipcbiAqIEJ1aWxkcyBhIGdldHRlciBmb3IgYSBvbmVvZidzIHByZXNlbnQgZmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGZpZWxkTmFtZXMgRmllbGQgbmFtZXNcbiAqIEByZXR1cm5zIHtPbmVPZkdldHRlcn0gVW5ib3VuZCBnZXR0ZXJcbiAqL1xudXRpbC5vbmVPZkdldHRlciA9IGZ1bmN0aW9uIGdldE9uZU9mKGZpZWxkTmFtZXMpIHtcbiAgICB2YXIgZmllbGRNYXAgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkTmFtZXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGZpZWxkTWFwW2ZpZWxkTmFtZXNbaV1dID0gMTtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbigpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcyksIGkgPSBrZXlzLmxlbmd0aCAtIDE7IGkgPiAtMTsgLS1pKVxuICAgICAgICAgICAgaWYgKGZpZWxkTWFwW2tleXNbaV1dID09PSAxICYmIHRoaXNba2V5c1tpXV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzW2tleXNbaV1dICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXlzW2ldO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEEgT25lT2Ygc2V0dGVyIGFzIHJldHVybmVkIGJ5IHtAbGluayB1dGlsLm9uZU9mU2V0dGVyfS5cbiAqIEB0eXBlZGVmIE9uZU9mU2V0dGVyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlIEZpZWxkIG5hbWVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBzZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZTZXR0ZXJ9IFVuYm91bmQgc2V0dGVyXG4gKi9cbnV0aWwub25lT2ZTZXR0ZXIgPSBmdW5jdGlvbiBzZXRPbmVPZihmaWVsZE5hbWVzKSB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGaWVsZCBuYW1lXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKiBAdGhpcyBPYmplY3RcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgaWYgKGZpZWxkTmFtZXNbaV0gIT09IG5hbWUpXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbZmllbGROYW1lc1tpXV07XG4gICAgfTtcbn07XG5cbi8qKlxuICogRGVmYXVsdCBjb252ZXJzaW9uIG9wdGlvbnMgdXNlZCBmb3Ige0BsaW5rIE1lc3NhZ2UjdG9KU09OfSBpbXBsZW1lbnRhdGlvbnMuXG4gKlxuICogVGhlc2Ugb3B0aW9ucyBhcmUgY2xvc2UgdG8gcHJvdG8zJ3MgSlNPTiBtYXBwaW5nIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGludGVybmFsIHR5cGVzIGxpa2UgQW55IGFyZSBoYW5kbGVkIGp1c3QgbGlrZSBtZXNzYWdlcy4gTW9yZSBwcmVjaXNlbHk6XG4gKlxuICogLSBMb25ncyBiZWNvbWUgc3RyaW5nc1xuICogLSBFbnVtcyBiZWNvbWUgc3RyaW5nIGtleXNcbiAqIC0gQnl0ZXMgYmVjb21lIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbiAqIC0gKFN1Yi0pTWVzc2FnZXMgYmVjb21lIHBsYWluIG9iamVjdHNcbiAqIC0gTWFwcyBiZWNvbWUgcGxhaW4gb2JqZWN0cyB3aXRoIGFsbCBzdHJpbmcga2V5c1xuICogLSBSZXBlYXRlZCBmaWVsZHMgYmVjb21lIGFycmF5c1xuICogLSBOYU4gYW5kIEluZmluaXR5IGZvciBmbG9hdCBhbmQgZG91YmxlIGZpZWxkcyBiZWNvbWUgc3RyaW5nc1xuICpcbiAqIEB0eXBlIHtJQ29udmVyc2lvbk9wdGlvbnN9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzM/aGw9ZW4janNvblxuICovXG51dGlsLnRvSlNPTk9wdGlvbnMgPSB7XG4gICAgbG9uZ3M6IFN0cmluZyxcbiAgICBlbnVtczogU3RyaW5nLFxuICAgIGJ5dGVzOiBTdHJpbmcsXG4gICAganNvbjogdHJ1ZVxufTtcblxuLy8gU2V0cyB1cCBidWZmZXIgdXRpbGl0eSBhY2NvcmRpbmcgdG8gdGhlIGVudmlyb25tZW50IChjYWxsZWQgaW4gaW5kZXgtbWluaW1hbClcbnV0aWwuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBCdWZmZXIgPSB1dGlsLkJ1ZmZlcjtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIUJ1ZmZlcikge1xuICAgICAgICB1dGlsLl9CdWZmZXJfZnJvbSA9IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYmVjYXVzZSBub2RlIDQueCBidWZmZXJzIGFyZSBpbmNvbXBhdGlibGUgJiBpbW11dGFibGVcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY29kZUlPL3Byb3RvYnVmLmpzL3B1bGwvNjY1XG4gICAgdXRpbC5fQnVmZmVyX2Zyb20gPSBCdWZmZXIuZnJvbSAhPT0gVWludDhBcnJheS5mcm9tICYmIEJ1ZmZlci5mcm9tIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9mcm9tKHZhbHVlLCBlbmNvZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUsIGVuY29kaW5nKTtcbiAgICAgICAgfTtcbiAgICB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBCdWZmZXIuYWxsb2NVbnNhZmUgfHxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZnVuY3Rpb24gQnVmZmVyX2FsbG9jVW5zYWZlKHNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHNpemUpO1xuICAgICAgICB9O1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBXcml0ZXI7XG5cbnZhciB1dGlsICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbnZhciBCdWZmZXJXcml0ZXI7IC8vIGN5Y2xpY1xuXG52YXIgTG9uZ0JpdHMgID0gdXRpbC5Mb25nQml0cyxcbiAgICBiYXNlNjQgICAgPSB1dGlsLmJhc2U2NCxcbiAgICB1dGY4ICAgICAgPSB1dGlsLnV0Zjg7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgb3BlcmF0aW9uIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBTY2hlZHVsZWQgd3JpdGVyIG9wZXJhdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBVaW50OEFycmF5LCBudW1iZXIpfSBmbiBGdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuIFZhbHVlIGJ5dGUgbGVuZ3RoXG4gKiBAcGFyYW0geyp9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBPcChmbiwgbGVuLCB2YWwpIHtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICogQHR5cGUge2Z1bmN0aW9uKFVpbnQ4QXJyYXksIG51bWJlciwgKil9XG4gICAgICovXG4gICAgdGhpcy5mbiA9IGZuO1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgYnl0ZSBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IGxlbjtcblxuICAgIC8qKlxuICAgICAqIE5leHQgb3BlcmF0aW9uLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B8dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEB0eXBlIHsqfVxuICAgICAqL1xuICAgIHRoaXMudmFsID0gdmFsOyAvLyB0eXBlIHZhcmllc1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gbm9vcCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHdyaXRlciBzdGF0ZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQ29waWVkIHdyaXRlciBzdGF0ZS5cbiAqIEBtZW1iZXJvZiBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtXcml0ZXJ9IHdyaXRlciBXcml0ZXIgdG8gY29weSBzdGF0ZSBmcm9tXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIFN0YXRlKHdyaXRlcikge1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBoZWFkLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy5oZWFkID0gd3JpdGVyLmhlYWQ7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRhaWwuXG4gICAgICogQHR5cGUge1dyaXRlci5PcH1cbiAgICAgKi9cbiAgICB0aGlzLnRhaWwgPSB3cml0ZXIudGFpbDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgYnVmZmVyIGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gd3JpdGVyLmxlbjtcblxuICAgIC8qKlxuICAgICAqIE5leHQgc3RhdGUuXG4gICAgICogQHR5cGUge1N0YXRlfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5uZXh0ID0gd3JpdGVyLnN0YXRlcztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHdyaXRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgd3JpdGVyIHVzaW5nIGBVaW50OEFycmF5YCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBgQXJyYXlgLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdyaXRlcigpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSAwO1xuXG4gICAgLyoqXG4gICAgICogT3BlcmF0aW9ucyBoZWFkLlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5oZWFkID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogT3BlcmF0aW9ucyB0YWlsXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWQ7XG5cbiAgICAvKipcbiAgICAgKiBMaW5rZWQgZm9ya2VkIHN0YXRlcy5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fG51bGx9XG4gICAgICovXG4gICAgdGhpcy5zdGF0ZXMgPSBudWxsO1xuXG4gICAgLy8gV2hlbiBhIHZhbHVlIGlzIHdyaXR0ZW4sIHRoZSB3cml0ZXIgY2FsY3VsYXRlcyBpdHMgYnl0ZSBsZW5ndGggYW5kIHB1dHMgaXQgaW50byBhIGxpbmtlZFxuICAgIC8vIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0byBwZXJmb3JtIHdoZW4gZmluaXNoKCkgaXMgY2FsbGVkLiBUaGlzIGJvdGggYWxsb3dzIHVzIHRvIGFsbG9jYXRlXG4gICAgLy8gYnVmZmVycyBvZiB0aGUgZXhhY3QgcmVxdWlyZWQgc2l6ZSBhbmQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHdvcmsgd2UgaGF2ZSB0byBkbyBjb21wYXJlZFxuICAgIC8vIHRvIGZpcnN0IGNhbGN1bGF0aW5nIG92ZXIgb2JqZWN0cyBhbmQgdGhlbiBlbmNvZGluZyBvdmVyIG9iamVjdHMuIEluIG91ciBjYXNlLCB0aGUgZW5jb2RpbmdcbiAgICAvLyBwYXJ0IGlzIGp1c3QgYSBsaW5rZWQgbGlzdCB3YWxrIGNhbGxpbmcgb3BlcmF0aW9ucyB3aXRoIGFscmVhZHkgcHJlcGFyZWQgdmFsdWVzLlxufVxuXG52YXIgY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgIHJldHVybiB1dGlsLkJ1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXJfc2V0dXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKFdyaXRlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyV3JpdGVyKCk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogZnVuY3Rpb24gY3JlYXRlX2FycmF5KCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBXcml0ZXIoKTtcbiAgICAgICAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB3cml0ZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtCdWZmZXJXcml0ZXJ8V3JpdGVyfSBBIHtAbGluayBCdWZmZXJXcml0ZXJ9IHdoZW4gQnVmZmVycyBhcmUgc3VwcG9ydGVkLCBvdGhlcndpc2UgYSB7QGxpbmsgV3JpdGVyfVxuICovXG5Xcml0ZXIuY3JlYXRlID0gY3JlYXRlKCk7XG5cbi8qKlxuICogQWxsb2NhdGVzIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gQnVmZmVyXG4gKi9cbldyaXRlci5hbGxvYyA9IGZ1bmN0aW9uIGFsbG9jKHNpemUpIHtcbiAgICByZXR1cm4gbmV3IHV0aWwuQXJyYXkoc2l6ZSk7XG59O1xuXG4vLyBVc2UgVWludDhBcnJheSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlciwganVzdCBsaWtlIG5vZGUgZG9lcyB3aXRoIGJ1ZmZlcnNcbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5pZiAodXRpbC5BcnJheSAhPT0gQXJyYXkpXG4gICAgV3JpdGVyLmFsbG9jID0gdXRpbC5wb29sKFdyaXRlci5hbGxvYywgdXRpbC5BcnJheS5wcm90b3R5cGUuc3ViYXJyYXkpO1xuXG4vKipcbiAqIFB1c2hlcyBhIG5ldyBvcGVyYXRpb24gdG8gdGhlIHF1ZXVlLlxuICogQHBhcmFtIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfSBmbiBGdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuIFZhbHVlIGJ5dGUgbGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEBwcml2YXRlXG4gKi9cbldyaXRlci5wcm90b3R5cGUuX3B1c2ggPSBmdW5jdGlvbiBwdXNoKGZuLCBsZW4sIHZhbCkge1xuICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5uZXh0ID0gbmV3IE9wKGZuLCBsZW4sIHZhbCk7XG4gICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVCeXRlKHZhbCwgYnVmLCBwb3MpIHtcbiAgICBidWZbcG9zXSA9IHZhbCAmIDI1NTtcbn1cblxuZnVuY3Rpb24gd3JpdGVWYXJpbnQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgd2hpbGUgKHZhbCA+IDEyNykge1xuICAgICAgICBidWZbcG9zKytdID0gdmFsICYgMTI3IHwgMTI4O1xuICAgICAgICB2YWwgPj4+PSA3O1xuICAgIH1cbiAgICBidWZbcG9zXSA9IHZhbDtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHZhcmludCB3cml0ZXIgb3BlcmF0aW9uIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBTY2hlZHVsZWQgdmFyaW50IHdyaXRlciBvcGVyYXRpb24uXG4gKiBAZXh0ZW5kcyBPcFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuIFZhbHVlIGJ5dGUgbGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIFZhcmludE9wKGxlbiwgdmFsKSB7XG4gICAgdGhpcy5sZW4gPSBsZW47XG4gICAgdGhpcy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudmFsID0gdmFsO1xufVxuXG5WYXJpbnRPcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9wLnByb3RvdHlwZSk7XG5WYXJpbnRPcC5wcm90b3R5cGUuZm4gPSB3cml0ZVZhcmludDMyO1xuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnVpbnQzMiA9IGZ1bmN0aW9uIHdyaXRlX3VpbnQzMih2YWx1ZSkge1xuICAgIC8vIGhlcmUsIHRoZSBjYWxsIHRvIHRoaXMucHVzaCBoYXMgYmVlbiBpbmxpbmVkIGFuZCBhIHZhcmludCBzcGVjaWZpYyBPcCBzdWJjbGFzcyBpcyB1c2VkLlxuICAgIC8vIHVpbnQzMiBpcyBieSBmYXIgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wZXJhdGlvbiBhbmQgYmVuZWZpdHMgc2lnbmlmaWNhbnRseSBmcm9tIHRoaXMuXG4gICAgdGhpcy5sZW4gKz0gKHRoaXMudGFpbCA9IHRoaXMudGFpbC5uZXh0ID0gbmV3IFZhcmludE9wKFxuICAgICAgICAodmFsdWUgPSB2YWx1ZSA+Pj4gMClcbiAgICAgICAgICAgICAgICA8IDEyOCAgICAgICA/IDFcbiAgICAgICAgOiB2YWx1ZSA8IDE2Mzg0ICAgICA/IDJcbiAgICAgICAgOiB2YWx1ZSA8IDIwOTcxNTIgICA/IDNcbiAgICAgICAgOiB2YWx1ZSA8IDI2ODQzNTQ1NiA/IDRcbiAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgIDUsXG4gICAgdmFsdWUpKS5sZW47XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuaW50MzIgPSBmdW5jdGlvbiB3cml0ZV9pbnQzMih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA8IDBcbiAgICAgICAgPyB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIDEwLCBMb25nQml0cy5mcm9tTnVtYmVyKHZhbHVlKSkgLy8gMTAgYnl0ZXMgcGVyIHNwZWNcbiAgICAgICAgOiB0aGlzLnVpbnQzMih2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIDMyIGJpdCB2YWx1ZSBhcyBhIHZhcmludCwgemlnLXphZyBlbmNvZGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zaW50MzIgPSBmdW5jdGlvbiB3cml0ZV9zaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy51aW50MzIoKHZhbHVlIDw8IDEgXiB2YWx1ZSA+PiAzMSkgPj4+IDApO1xufTtcblxuZnVuY3Rpb24gd3JpdGVWYXJpbnQ2NCh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgd2hpbGUgKHZhbC5oaSkge1xuICAgICAgICBidWZbcG9zKytdID0gdmFsLmxvICYgMTI3IHwgMTI4O1xuICAgICAgICB2YWwubG8gPSAodmFsLmxvID4+PiA3IHwgdmFsLmhpIDw8IDI1KSA+Pj4gMDtcbiAgICAgICAgdmFsLmhpID4+Pj0gNztcbiAgICB9XG4gICAgd2hpbGUgKHZhbC5sbyA+IDEyNykge1xuICAgICAgICBidWZbcG9zKytdID0gdmFsLmxvICYgMTI3IHwgMTI4O1xuICAgICAgICB2YWwubG8gPSB2YWwubG8gPj4+IDc7XG4gICAgfVxuICAgIGJ1Zltwb3MrK10gPSB2YWwubG87XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnVpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3VpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVWYXJpbnQ2NCwgYml0cy5sZW5ndGgoKSwgYml0cyk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDY0ID0gV3JpdGVyLnByb3RvdHlwZS51aW50NjQ7XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBhIHZhcmludCwgemlnLXphZyBlbmNvZGVkLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDY0ID0gZnVuY3Rpb24gd3JpdGVfc2ludDY0KHZhbHVlKSB7XG4gICAgdmFyIGJpdHMgPSBMb25nQml0cy5mcm9tKHZhbHVlKS56ekVuY29kZSgpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBib29saXNoIHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIHdyaXRlX2Jvb2wodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIHZhbHVlID8gMSA6IDApO1xufTtcblxuZnVuY3Rpb24gd3JpdGVGaXhlZDMyKHZhbCwgYnVmLCBwb3MpIHtcbiAgICBidWZbcG9zICAgIF0gPSAgdmFsICAgICAgICAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gOCAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICAmIDI1NTtcbiAgICBidWZbcG9zICsgM10gPSAgdmFsID4+PiAyNDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZpeGVkMzIgPSBmdW5jdGlvbiB3cml0ZV9maXhlZDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVGaXhlZDMyLCA0LCB2YWx1ZSA+Pj4gMCk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgZml4ZWQgMzIgYml0cy5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgNjQgYml0IHZhbHVlIGFzIGZpeGVkIDY0IGJpdHMuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDY0ID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmxvKS5fcHVzaCh3cml0ZUZpeGVkMzIsIDQsIGJpdHMuaGkpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGZpeGVkIDY0IGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNmaXhlZDY0ID0gV3JpdGVyLnByb3RvdHlwZS5maXhlZDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIGZsb2F0ICgzMiBiaXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZsb2F0ID0gZnVuY3Rpb24gd3JpdGVfZmxvYXQodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh1dGlsLmZsb2F0LndyaXRlRmxvYXRMRSwgNCwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBkb3VibGUgKDY0IGJpdCBmbG9hdCkuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gd3JpdGVfZG91YmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZURvdWJsZUxFLCA4LCB2YWx1ZSk7XG59O1xuXG52YXIgd3JpdGVCeXRlcyA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnNldFxuICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc19zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICBidWYuc2V0KHZhbCwgcG9zKTsgLy8gYWxzbyB3b3JrcyBmb3IgcGxhaW4gYXJyYXkgdmFsdWVzXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgOiBmdW5jdGlvbiB3cml0ZUJ5dGVzX2Zvcih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgYnVmW3BvcyArIGldID0gdmFsW2ldO1xuICAgIH07XG5cbi8qKlxuICogV3JpdGVzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl8c3RyaW5nfSB2YWx1ZSBCdWZmZXIgb3IgYmFzZTY0IGVuY29kZWQgc3RyaW5nIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICBpZiAoIWxlbilcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbiAgICBpZiAodXRpbC5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IFdyaXRlci5hbGxvYyhsZW4gPSBiYXNlNjQubGVuZ3RoKHZhbHVlKSk7XG4gICAgICAgIGJhc2U2NC5kZWNvZGUodmFsdWUsIGJ1ZiwgMCk7XG4gICAgICAgIHZhbHVlID0gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51aW50MzIobGVuKS5fcHVzaCh3cml0ZUJ5dGVzLCBsZW4sIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiB3cml0ZV9zdHJpbmcodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRmOC5sZW5ndGgodmFsdWUpO1xuICAgIHJldHVybiBsZW5cbiAgICAgICAgPyB0aGlzLnVpbnQzMihsZW4pLl9wdXNoKHV0Zjgud3JpdGUsIGxlbiwgdmFsdWUpXG4gICAgICAgIDogdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIDApO1xufTtcblxuLyoqXG4gKiBGb3JrcyB0aGlzIHdyaXRlcidzIHN0YXRlIGJ5IHB1c2hpbmcgaXQgdG8gYSBzdGFjay5cbiAqIENhbGxpbmcge0BsaW5rIFdyaXRlciNyZXNldHxyZXNldH0gb3Ige0BsaW5rIFdyaXRlciNsZGVsaW18bGRlbGltfSByZXNldHMgdGhlIHdyaXRlciB0byB0aGUgcHJldmlvdXMgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mb3JrID0gZnVuY3Rpb24gZm9yaygpIHtcbiAgICB0aGlzLnN0YXRlcyA9IG5ldyBTdGF0ZSh0aGlzKTtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgdGhpcy5sZW4gPSAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byB0aGUgbGFzdCBzdGF0ZS5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVzKSB7XG4gICAgICAgIHRoaXMuaGVhZCAgID0gdGhpcy5zdGF0ZXMuaGVhZDtcbiAgICAgICAgdGhpcy50YWlsICAgPSB0aGlzLnN0YXRlcy50YWlsO1xuICAgICAgICB0aGlzLmxlbiAgICA9IHRoaXMuc3RhdGVzLmxlbjtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcy5uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBPcChub29wLCAwLCAwKTtcbiAgICAgICAgdGhpcy5sZW4gID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlc2V0cyB0byB0aGUgbGFzdCBzdGF0ZSBhbmQgYXBwZW5kcyB0aGUgZm9yayBzdGF0ZSdzIGN1cnJlbnQgd3JpdGUgbGVuZ3RoIGFzIGEgdmFyaW50IGZvbGxvd2VkIGJ5IGl0cyBvcGVyYXRpb25zLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUubGRlbGltID0gZnVuY3Rpb24gbGRlbGltKCkge1xuICAgIHZhciBoZWFkID0gdGhpcy5oZWFkLFxuICAgICAgICB0YWlsID0gdGhpcy50YWlsLFxuICAgICAgICBsZW4gID0gdGhpcy5sZW47XG4gICAgdGhpcy5yZXNldCgpLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pIHtcbiAgICAgICAgdGhpcy50YWlsLm5leHQgPSBoZWFkLm5leHQ7IC8vIHNraXAgbm9vcFxuICAgICAgICB0aGlzLnRhaWwgPSB0YWlsO1xuICAgICAgICB0aGlzLmxlbiArPSBsZW47XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEZpbmlzaGVkIGJ1ZmZlclxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZC5uZXh0LCAvLyBza2lwIG5vb3BcbiAgICAgICAgYnVmICA9IHRoaXMuY29uc3RydWN0b3IuYWxsb2ModGhpcy5sZW4pLFxuICAgICAgICBwb3MgID0gMDtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgICBoZWFkLmZuKGhlYWQudmFsLCBidWYsIHBvcyk7XG4gICAgICAgIHBvcyArPSBoZWFkLmxlbjtcbiAgICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICB9XG4gICAgLy8gdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICByZXR1cm4gYnVmO1xufTtcblxuV3JpdGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJXcml0ZXJfKSB7XG4gICAgQnVmZmVyV3JpdGVyID0gQnVmZmVyV3JpdGVyXztcbiAgICBXcml0ZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyV3JpdGVyLl9jb25maWd1cmUoKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyV3JpdGVyO1xuXG4vLyBleHRlbmRzIFdyaXRlclxudmFyIFdyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbihCdWZmZXJXcml0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0ZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJXcml0ZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHdyaXRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgd3JpdGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFdyaXRlclxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlcldyaXRlcigpIHtcbiAgICBXcml0ZXIuY2FsbCh0aGlzKTtcbn1cblxuQnVmZmVyV3JpdGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQWxsb2NhdGVzIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IEJ1ZmZlclxuICAgICAqL1xuICAgIEJ1ZmZlcldyaXRlci5hbGxvYyA9IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZTtcblxuICAgIEJ1ZmZlcldyaXRlci53cml0ZUJ5dGVzQnVmZmVyID0gdXRpbC5CdWZmZXIgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiB1dGlsLkJ1ZmZlci5wcm90b3R5cGUuc2V0Lm5hbWUgPT09IFwic2V0XCJcbiAgICAgICAgPyBmdW5jdGlvbiB3cml0ZUJ5dGVzQnVmZmVyX3NldCh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGZhc3RlciB0aGFuIGNvcHkgKHJlcXVpcmVzIG5vZGUgPj0gNCB3aGVyZSBCdWZmZXJzIGV4dGVuZCBVaW50OEFycmF5IGFuZCBzZXQgaXMgcHJvcGVybHkgaW5oZXJpdGVkKVxuICAgICAgICAgIC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9jb3B5KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgICBpZiAodmFsLmNvcHkpIC8vIEJ1ZmZlciB2YWx1ZXNcbiAgICAgICAgICAgIHZhbC5jb3B5KGJ1ZiwgcG9zLCAwLCB2YWwubGVuZ3RoKTtcbiAgICAgICAgICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDspIC8vIHBsYWluIGFycmF5IHZhbHVlc1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IHZhbFtpKytdO1xuICAgICAgICB9O1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gd3JpdGVfYnl0ZXNfYnVmZmVyKHZhbHVlKSB7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKVxuICAgICAgICB2YWx1ZSA9IHV0aWwuX0J1ZmZlcl9mcm9tKHZhbHVlLCBcImJhc2U2NFwiKTtcbiAgICB2YXIgbGVuID0gdmFsdWUubGVuZ3RoID4+PiAwO1xuICAgIHRoaXMudWludDMyKGxlbik7XG4gICAgaWYgKGxlbilcbiAgICAgICAgdGhpcy5fcHVzaChCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciwgbGVuLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiB3cml0ZVN0cmluZ0J1ZmZlcih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgaWYgKHZhbC5sZW5ndGggPCA0MCkgLy8gcGxhaW4ganMgaXMgZmFzdGVyIGZvciBzaG9ydCBzdHJpbmdzIChwcm9iYWJseSBkdWUgdG8gcmVkdW5kYW50IGFzc2VydGlvbnMpXG4gICAgICAgIHV0aWwudXRmOC53cml0ZSh2YWwsIGJ1ZiwgcG9zKTtcbiAgICBlbHNlIGlmIChidWYudXRmOFdyaXRlKVxuICAgICAgICBidWYudXRmOFdyaXRlKHZhbCwgcG9zKTtcbiAgICBlbHNlXG4gICAgICAgIGJ1Zi53cml0ZSh2YWwsIHBvcyk7XG59XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlcldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nX2J1ZmZlcih2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB1dGlsLkJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2god3JpdGVTdHJpbmdCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEZpbmlzaGVzIHRoZSB3cml0ZSBvcGVyYXRpb24uXG4gKiBAbmFtZSBCdWZmZXJXcml0ZXIjZmluaXNoXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IEZpbmlzaGVkIGJ1ZmZlclxuICovXG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gUmVhZGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyUmVhZGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaW5kZXhPdXRPZlJhbmdlKHJlYWRlciwgd3JpdGVMZW5ndGgpIHtcbiAgICByZXR1cm4gUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZTogXCIgKyByZWFkZXIucG9zICsgXCIgKyBcIiArICh3cml0ZUxlbmd0aCB8fCAxKSArIFwiID4gXCIgKyByZWFkZXIubGVuKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHJlYWRlciBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIGJ1ZmZlci5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIGBVaW50OEFycmF5YCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBgQXJyYXlgLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKi9cbmZ1bmN0aW9uIFJlYWRlcihidWZmZXIpIHtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyLlxuICAgICAqIEB0eXBlIHtVaW50OEFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuYnVmID0gYnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgcG9zaXRpb24uXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBvcyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IGJ1ZmZlci5sZW5ndGg7XG59XG5cbnZhciBjcmVhdGVfYXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gZnVuY3Rpb24gY3JlYXRlX3R5cGVkX2FycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBBcnJheS5pc0FycmF5KGJ1ZmZlcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRlcihidWZmZXIpO1xuICAgICAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gY3JlYXRlX2FycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9O1xuXG52YXIgY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgIHJldHVybiB1dGlsLkJ1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXJfc2V0dXAoYnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWRlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLkJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IEJ1ZmZlclJlYWRlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlX2FycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICB9KShidWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogY3JlYXRlX2FycmF5O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJlYWRlciB1c2luZyB0aGUgc3BlY2lmaWVkIGJ1ZmZlci5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtVaW50OEFycmF5fEJ1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqIEByZXR1cm5zIHtSZWFkZXJ8QnVmZmVyUmVhZGVyfSBBIHtAbGluayBCdWZmZXJSZWFkZXJ9IGlmIGBidWZmZXJgIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgYSB7QGxpbmsgUmVhZGVyfVxuICogQHRocm93cyB7RXJyb3J9IElmIGBidWZmZXJgIGlzIG5vdCBhIHZhbGlkIGJ1ZmZlclxuICovXG5SZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG5cblJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5BcnJheS5wcm90b3R5cGUuc3ViYXJyYXkgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5BcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUudWludDMyID0gKGZ1bmN0aW9uIHJlYWRfdWludDMyX3NldHVwKCkge1xuICAgIHZhciB2YWx1ZSA9IDQyOTQ5NjcyOTU7IC8vIG9wdGltaXplciB0eXBlLWhpbnQsIHRlbmRzIHRvIGRlb3B0IG90aGVyd2lzZSAoPyEpXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlYWRfdWludDMyKCkge1xuICAgICAgICB2YWx1ZSA9ICggICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcgICAgICAgKSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgIDcpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAxNCkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDIxKSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmICAxNSkgPDwgMjgpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCh0aGlzLnBvcyArPSA1KSA+IHRoaXMubGVuKSB7XG4gICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMubGVuO1xuICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn0pKCk7XG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gcmVhZF9pbnQzMigpIHtcbiAgICByZXR1cm4gdGhpcy51aW50MzIoKSB8IDA7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gcmVhZF9zaW50MzIoKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy51aW50MzIoKTtcbiAgICByZXR1cm4gdmFsdWUgPj4+IDEgXiAtKHZhbHVlICYgMSkgfCAwO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5cbmZ1bmN0aW9uIHJlYWRMb25nVmFyaW50KCkge1xuICAgIC8vIHRlbmRzIHRvIGRlb3B0IHdpdGggbG9jYWwgdmFycyBmb3Igb2N0ZXQgZXRjLlxuICAgIHZhciBiaXRzID0gbmV3IExvbmdCaXRzKDAsIDApO1xuICAgIHZhciBpID0gMDtcbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAobG8pXG4gICAgICAgIGZvciAoOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICAvLyAxc3QuLjR0aFxuICAgICAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIDV0aFxuICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyOCkgPj4+IDA7XG4gICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpID4+ICA0KSA+Pj4gMDtcbiAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIGkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgMzsgKytpKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcyk7XG4gICAgICAgICAgICAvLyAxc3QuLjN0aFxuICAgICAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIDR0aFxuICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuICAgIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkgeyAvLyBmYXN0IHJvdXRlIChoaSlcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgIC8vIDZ0aC4uMTB0aFxuICAgICAgICAgICAgYml0cy5oaSA9IChiaXRzLmhpIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcgKyAzKSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcyk7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBFcnJvcihcImludmFsaWQgdmFyaW50IGVuY29kaW5nXCIpO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciNpbnQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYW4gdW5zaWduZWQgNjQgYml0IHZhbHVlLlxuICogQG5hbWUgUmVhZGVyI3VpbnQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSB6aWctemFnIGVuY29kZWQgdmFyaW50IGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciNzaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgYm9vbGVhbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIHJlYWRfYm9vbCgpIHtcbiAgICByZXR1cm4gdGhpcy51aW50MzIoKSAhPT0gMDtcbn07XG5cbmZ1bmN0aW9uIHJlYWRGaXhlZDMyX2VuZChidWYsIGVuZCkgeyAvLyBub3RlIHRoYXQgdGhpcyB1c2VzIGBlbmRgLCBub3QgYHBvc2BcbiAgICByZXR1cm4gKGJ1ZltlbmQgLSA0XVxuICAgICAgICAgIHwgYnVmW2VuZCAtIDNdIDw8IDhcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAyXSA8PCAxNlxuICAgICAgICAgIHwgYnVmW2VuZCAtIDFdIDw8IDI0KSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmZpeGVkMzIgPSBmdW5jdGlvbiByZWFkX2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBmaXhlZCAzMiBiaXRzIGFzIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNmaXhlZDMyID0gZnVuY3Rpb24gcmVhZF9zZml4ZWQzMigpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgcmV0dXJuIHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCkgfCAwO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5cbmZ1bmN0aW9uIHJlYWRGaXhlZDY0KC8qIHRoaXM6IFJlYWRlciAqLykge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgOCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgOCk7XG5cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCksIHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCkpO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG4vKipcbiAqIFJlYWRzIGZpeGVkIDY0IGJpdHMuXG4gKiBAbmFtZSBSZWFkZXIjZml4ZWQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgemlnLXphZyBlbmNvZGVkIGZpeGVkIDY0IGJpdHMuXG4gKiBAbmFtZSBSZWFkZXIjc2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgZmxvYXQgKDMyIGJpdCkgYXMgYSBudW1iZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHJlYWRfZmxvYXQoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZEZsb2F0TEUodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICB0aGlzLnBvcyArPSA0O1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBkb3VibGUgKDY0IGJpdCBmbG9hdCkgYXMgYSBudW1iZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiByZWFkX2RvdWJsZSgpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgdmFyIHZhbHVlID0gdXRpbC5mbG9hdC5yZWFkRG91YmxlTEUodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICB0aGlzLnBvcyArPSA4O1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBzZXF1ZW5jZSBvZiBieXRlcyBwcmVjZWVkZWQgYnkgaXRzIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiByZWFkX2J5dGVzKCkge1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnVpbnQzMigpLFxuICAgICAgICBzdGFydCAgPSB0aGlzLnBvcyxcbiAgICAgICAgZW5kICAgID0gdGhpcy5wb3MgKyBsZW5ndGg7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZW5kID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCBsZW5ndGgpO1xuXG4gICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuYnVmKSkgLy8gcGxhaW4gYXJyYXlcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBzdGFydCA9PT0gZW5kIC8vIGZpeCBmb3IgSUUgMTAvV2luOCBhbmQgb3RoZXJzJyBzdWJhcnJheSByZXR1cm5pbmcgYXJyYXkgb2Ygc2l6ZSAxXG4gICAgICAgID8gbmV3IHRoaXMuYnVmLmNvbnN0cnVjdG9yKDApXG4gICAgICAgIDogdGhpcy5fc2xpY2UuY2FsbCh0aGlzLmJ1Ziwgc3RhcnQsIGVuZCk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc3RyaW5nIHByZWNlZWRlZCBieSBpdHMgYnl0ZSBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gcmVhZF9zdHJpbmcoKSB7XG4gICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcygpO1xuICAgIHJldHVybiB1dGY4LnJlYWQoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7XG59O1xuXG4vKipcbiAqIFNraXBzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIGlmIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHNraXBzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBpZiBrbm93biwgb3RoZXJ3aXNlIGEgdmFyaW50IGlzIGFzc3VtZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiBza2lwKGxlbmd0aCkge1xuICAgIGlmICh0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAodGhpcy5wb3MgKyBsZW5ndGggPiB0aGlzLmxlbilcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCBsZW5ndGgpO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICB9IHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyOCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgd2lyZSB0eXBlLlxuICogQHBhcmFtIHtudW1iZXJ9IHdpcmVUeXBlIFdpcmUgdHlwZSByZWNlaXZlZFxuICogQHJldHVybnMge1JlYWRlcn0gYHRoaXNgXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2tpcFR5cGUgPSBmdW5jdGlvbih3aXJlVHlwZSkge1xuICAgIHN3aXRjaCAod2lyZVR5cGUpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5za2lwKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5za2lwKDgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuc2tpcCh0aGlzLnVpbnQzMigpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB3aGlsZSAoKHdpcmVUeXBlID0gdGhpcy51aW50MzIoKSAmIDcpICE9PSA0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5za2lwVHlwZSh3aXJlVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5za2lwKDQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiaW52YWxpZCB3aXJlIHR5cGUgXCIgKyB3aXJlVHlwZSArIFwiIGF0IG9mZnNldCBcIiArIHRoaXMucG9zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKEJ1ZmZlclJlYWRlcl8pIHtcbiAgICBCdWZmZXJSZWFkZXIgPSBCdWZmZXJSZWFkZXJfO1xuICAgIFJlYWRlci5jcmVhdGUgPSBjcmVhdGUoKTtcbiAgICBCdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSgpO1xuXG4gICAgdmFyIGZuID0gdXRpbC5Mb25nID8gXCJ0b0xvbmdcIiA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFwidG9OdW1iZXJcIjtcbiAgICB1dGlsLm1lcmdlKFJlYWRlci5wcm90b3R5cGUsIHtcblxuICAgICAgICBpbnQ2NDogZnVuY3Rpb24gcmVhZF9pbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpW2ZuXShmYWxzZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdWludDY0OiBmdW5jdGlvbiByZWFkX3VpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpW2ZuXSh0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzaW50NjQ6IGZ1bmN0aW9uIHJlYWRfc2ludDY0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRMb25nVmFyaW50LmNhbGwodGhpcykuenpEZWNvZGUoKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfZml4ZWQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRml4ZWQ2NC5jYWxsKHRoaXMpW2ZuXSh0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZml4ZWQ2NDogZnVuY3Rpb24gcmVhZF9zZml4ZWQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRml4ZWQ2NC5jYWxsKHRoaXMpW2ZuXShmYWxzZSk7XG4gICAgICAgIH1cblxuICAgIH0pO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJSZWFkZXI7XG5cbi8vIGV4dGVuZHMgUmVhZGVyXG52YXIgUmVhZGVyID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuKEJ1ZmZlclJlYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlYWRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlclJlYWRlcjtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBidWZmZXIgcmVhZGVyIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCByZWFkZXIgdXNpbmcgbm9kZSBidWZmZXJzLlxuICogQGV4dGVuZHMgUmVhZGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBCdWZmZXJSZWFkZXIoYnVmZmVyKSB7XG4gICAgUmVhZGVyLmNhbGwodGhpcywgYnVmZmVyKTtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyLlxuICAgICAqIEBuYW1lIEJ1ZmZlclJlYWRlciNidWZcbiAgICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgICAqL1xufVxuXG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh1dGlsLkJ1ZmZlcilcbiAgICAgICAgQnVmZmVyUmVhZGVyLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsLkJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG59O1xuXG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlclJlYWRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gcmVhZF9zdHJpbmdfYnVmZmVyKCkge1xuICAgIHZhciBsZW4gPSB0aGlzLnVpbnQzMigpOyAvLyBtb2RpZmllcyBwb3NcbiAgICByZXR1cm4gdGhpcy5idWYudXRmOFNsaWNlXG4gICAgICAgID8gdGhpcy5idWYudXRmOFNsaWNlKHRoaXMucG9zLCB0aGlzLnBvcyA9IE1hdGgubWluKHRoaXMucG9zICsgbGVuLCB0aGlzLmxlbikpXG4gICAgICAgIDogdGhpcy5idWYudG9TdHJpbmcoXCJ1dGYtOFwiLCB0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBzZXF1ZW5jZSBvZiBieXRlcyBwcmVjZWVkZWQgYnkgaXRzIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEBuYW1lIEJ1ZmZlclJlYWRlciNieXRlc1xuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBWYWx1ZSByZWFkXG4gKi9cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBTZXJ2aWNlO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8vIEV4dGVuZHMgRXZlbnRFbWl0dGVyXG4oU2VydmljZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHV0aWwuRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gU2VydmljZTtcblxuLyoqXG4gKiBBIHNlcnZpY2UgbWV0aG9kIGNhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIHJwYy5TZXJ2aWNlTWV0aG9kfFNlcnZpY2VNZXRob2R9LlxuICpcbiAqIERpZmZlcnMgZnJvbSB7QGxpbmsgUlBDSW1wbENhbGxiYWNrfSBpbiB0aGF0IGl0IGlzIGFuIGFjdHVhbCBjYWxsYmFjayBvZiBhIHNlcnZpY2UgbWV0aG9kIHdoaWNoIG1heSBub3QgcmV0dXJuIGByZXNwb25zZSA9IG51bGxgLlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RDYWxsYmFja1xuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge0Vycm9yfG51bGx9IGVycm9yIEVycm9yLCBpZiBhbnlcbiAqIEBwYXJhbSB7VFJlc30gW3Jlc3BvbnNlXSBSZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBwYXJ0IG9mIGEge0BsaW5rIHJwYy5TZXJ2aWNlfSBhcyBjcmVhdGVkIGJ5IHtAbGluayBTZXJ2aWNlLmNyZWF0ZX0uXG4gKiBAdHlwZWRlZiBycGMuU2VydmljZU1ldGhvZFxuICogQHRlbXBsYXRlIFRSZXEgZXh0ZW5kcyBNZXNzYWdlPFRSZXE+XG4gKiBAdGVtcGxhdGUgVFJlcyBleHRlbmRzIE1lc3NhZ2U8VFJlcz5cbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gW2NhbGxiYWNrXSBOb2RlLXN0eWxlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIHRoZSBlcnJvciwgaWYgYW55LCBhbmQgdGhlIHJlc3BvbnNlIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPE1lc3NhZ2U8VFJlcz4+fSBQcm9taXNlIGlmIGBjYWxsYmFja2AgaGFzIGJlZW4gb21pdHRlZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgXG4gKi9cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IFJQQyBzZXJ2aWNlIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBBbiBSUEMgc2VydmljZSBhcyByZXR1cm5lZCBieSB7QGxpbmsgU2VydmljZSNjcmVhdGV9LlxuICogQGV4cG9ydHMgcnBjLlNlcnZpY2VcbiAqIEBleHRlbmRzIHV0aWwuRXZlbnRFbWl0dGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UlBDSW1wbH0gcnBjSW1wbCBSUEMgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcXVlc3REZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc3BvbnNlRGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICovXG5mdW5jdGlvbiBTZXJ2aWNlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG5cbiAgICBpZiAodHlwZW9mIHJwY0ltcGwgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicnBjSW1wbCBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cbiAgICB1dGlsLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogUlBDIGltcGxlbWVudGF0aW9uLiBCZWNvbWVzIGBudWxsYCBvbmNlIHRoZSBzZXJ2aWNlIGlzIGVuZGVkLlxuICAgICAqIEB0eXBlIHtSUENJbXBsfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5ycGNJbXBsID0gcnBjSW1wbDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1ZXN0RGVsaW1pdGVkID0gQm9vbGVhbihyZXF1ZXN0RGVsaW1pdGVkKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVzcG9uc2VEZWxpbWl0ZWQgPSBCb29sZWFuKHJlc3BvbnNlRGVsaW1pdGVkKTtcbn1cblxuLyoqXG4gKiBDYWxscyBhIHNlcnZpY2UgbWV0aG9kIHRocm91Z2gge0BsaW5rIHJwYy5TZXJ2aWNlI3JwY0ltcGx8cnBjSW1wbH0uXG4gKiBAcGFyYW0ge01ldGhvZHxycGMuU2VydmljZU1ldGhvZDxUUmVxLFRSZXM+fSBtZXRob2QgUmVmbGVjdGVkIG9yIHN0YXRpYyBtZXRob2RcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VFJlcT59IHJlcXVlc3RDdG9yIFJlcXVlc3QgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VFJlcz59IHJlc3BvbnNlQ3RvciBSZXNwb25zZSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtUUmVxfFByb3BlcnRpZXM8VFJlcT59IHJlcXVlc3QgUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICogQHBhcmFtIHtycGMuU2VydmljZU1ldGhvZENhbGxiYWNrPFRSZXM+fSBjYWxsYmFjayBTZXJ2aWNlIGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRlbXBsYXRlIFRSZXEgZXh0ZW5kcyBNZXNzYWdlPFRSZXE+XG4gKiBAdGVtcGxhdGUgVFJlcyBleHRlbmRzIE1lc3NhZ2U8VFJlcz5cbiAqL1xuU2VydmljZS5wcm90b3R5cGUucnBjQ2FsbCA9IGZ1bmN0aW9uIHJwY0NhbGwobWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0LCBjYWxsYmFjaykge1xuXG4gICAgaWYgKCFyZXF1ZXN0KVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJyZXF1ZXN0IG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICghY2FsbGJhY2spXG4gICAgICAgIHJldHVybiB1dGlsLmFzUHJvbWlzZShycGNDYWxsLCBzZWxmLCBtZXRob2QsIHJlcXVlc3RDdG9yLCByZXNwb25zZUN0b3IsIHJlcXVlc3QpO1xuXG4gICAgaWYgKCFzZWxmLnJwY0ltcGwpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2soRXJyb3IoXCJhbHJlYWR5IGVuZGVkXCIpKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNlbGYucnBjSW1wbChcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgIHJlcXVlc3RDdG9yW3NlbGYucmVxdWVzdERlbGltaXRlZCA/IFwiZW5jb2RlRGVsaW1pdGVkXCIgOiBcImVuY29kZVwiXShyZXF1ZXN0KS5maW5pc2goKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJwY0NhbGxiYWNrKGVyciwgcmVzcG9uc2UpIHtcblxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbmQoLyogZW5kZWRCeVJQQyAqLyB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIShyZXNwb25zZSBpbnN0YW5jZW9mIHJlc3BvbnNlQ3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VDdG9yW3NlbGYucmVzcG9uc2VEZWxpbWl0ZWQgPyBcImRlY29kZURlbGltaXRlZFwiIDogXCJkZWNvZGVcIl0ocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VsZi5lbWl0KFwiZGF0YVwiLCByZXNwb25zZSwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKGVycik7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG5cbi8qKlxuICogRW5kcyB0aGlzIHNlcnZpY2UgYW5kIGVtaXRzIHRoZSBgZW5kYCBldmVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VuZGVkQnlSUEM9ZmFsc2VdIFdoZXRoZXIgdGhlIHNlcnZpY2UgaGFzIGJlZW4gZW5kZWQgYnkgdGhlIFJQQyBpbXBsZW1lbnRhdGlvbi5cbiAqIEByZXR1cm5zIHtycGMuU2VydmljZX0gYHRoaXNgXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZChlbmRlZEJ5UlBDKSB7XG4gICAgaWYgKHRoaXMucnBjSW1wbCkge1xuICAgICAgICBpZiAoIWVuZGVkQnlSUEMpIC8vIHNpZ25hbCBlbmQgdG8gcnBjSW1wbFxuICAgICAgICAgICAgdGhpcy5ycGNJbXBsKG51bGwsIG51bGwsIG51bGwpO1xuICAgICAgICB0aGlzLnJwY0ltcGwgPSBudWxsO1xuICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIikub2ZmKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFN0cmVhbWluZyBSUEMgaGVscGVycy5cbiAqIEBuYW1lc3BhY2VcbiAqL1xudmFyIHJwYyA9IGV4cG9ydHM7XG5cbi8qKlxuICogUlBDIGltcGxlbWVudGF0aW9uIHBhc3NlZCB0byB7QGxpbmsgU2VydmljZSNjcmVhdGV9IHBlcmZvcm1pbmcgYSBzZXJ2aWNlIHJlcXVlc3Qgb24gbmV0d29yayBsZXZlbCwgaS5lLiBieSB1dGlsaXppbmcgaHR0cCByZXF1ZXN0cyBvciB3ZWJzb2NrZXRzLlxuICogQHR5cGVkZWYgUlBDSW1wbFxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8TWVzc2FnZTx7fT4sTWVzc2FnZTx7fT4+fSBtZXRob2QgUmVmbGVjdGVkIG9yIHN0YXRpYyBtZXRob2QgYmVpbmcgY2FsbGVkXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHJlcXVlc3REYXRhIFJlcXVlc3QgZGF0YVxuICogQHBhcmFtIHtSUENJbXBsQ2FsbGJhY2t9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIHJwY0ltcGwobWV0aG9kLCByZXF1ZXN0RGF0YSwgY2FsbGJhY2spIHtcbiAqICAgICBpZiAocHJvdG9idWYudXRpbC5sY0ZpcnN0KG1ldGhvZC5uYW1lKSAhPT0gXCJteU1ldGhvZFwiKSAvLyBjb21wYXRpYmxlIHdpdGggc3RhdGljIGNvZGVcbiAqICAgICAgICAgdGhyb3cgRXJyb3IoXCJubyBzdWNoIG1ldGhvZFwiKTtcbiAqICAgICBhc3luY2hyb25vdXNseU9idGFpbkFSZXNwb25zZShyZXF1ZXN0RGF0YSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZURhdGEpIHtcbiAqICAgICAgICAgY2FsbGJhY2soZXJyLCByZXNwb25zZURhdGEpO1xuICogICAgIH0pO1xuICogfVxuICovXG5cbi8qKlxuICogTm9kZS1zdHlsZSBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBSUENJbXBsfS5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxDYWxsYmFja1xuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55LCBvdGhlcndpc2UgYG51bGxgXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl8bnVsbH0gW3Jlc3BvbnNlXSBSZXNwb25zZSBkYXRhIG9yIGBudWxsYCB0byBzaWduYWwgZW5kIG9mIHN0cmVhbSwgaWYgdGhlcmUgaGFzbid0IGJlZW4gYW4gZXJyb3JcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxucnBjLlNlcnZpY2UgPSByZXF1aXJlKFwiLi9ycGMvc2VydmljZVwiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLyoqXG4gKiBOYW1lZCByb290cy5cbiAqIFRoaXMgaXMgd2hlcmUgcGJqcyBzdG9yZXMgZ2VuZXJhdGVkIHN0cnVjdHVyZXMgKHRoZSBvcHRpb24gYC1yLCAtLXJvb3RgIHNwZWNpZmllcyBhIG5hbWUpLlxuICogQ2FuIGFsc28gYmUgdXNlZCBtYW51YWxseSB0byBtYWtlIHJvb3RzIGF2YWlsYWJsZSBhY2Nyb3NzIG1vZHVsZXMuXG4gKiBAbmFtZSByb290c1xuICogQHR5cGUge09iamVjdC48c3RyaW5nLFJvb3Q+fVxuICogQGV4YW1wbGVcbiAqIC8vIHBianMgLXIgbXlyb290IC1vIGNvbXBpbGVkLmpzIC4uLlxuICpcbiAqIC8vIGluIGFub3RoZXIgbW9kdWxlOlxuICogcmVxdWlyZShcIi4vY29tcGlsZWQuanNcIik7XG4gKlxuICogLy8gaW4gYW55IHN1YnNlcXVlbnQgbW9kdWxlOlxuICogdmFyIHJvb3QgPSBwcm90b2J1Zi5yb290c1tcIm15cm9vdFwiXTtcbiAqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcHJvdG9idWYgPSBleHBvcnRzO1xuXG4vKipcbiAqIEJ1aWxkIHR5cGUsIG9uZSBvZiBgXCJmdWxsXCJgLCBgXCJsaWdodFwiYCBvciBgXCJtaW5pbWFsXCJgLlxuICogQG5hbWUgYnVpbGRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAY29uc3RcbiAqL1xucHJvdG9idWYuYnVpbGQgPSBcIm1pbmltYWxcIjtcblxuLy8gU2VyaWFsaXphdGlvblxucHJvdG9idWYuV3JpdGVyICAgICAgID0gcmVxdWlyZShcIi4vd3JpdGVyXCIpO1xucHJvdG9idWYuQnVmZmVyV3JpdGVyID0gcmVxdWlyZShcIi4vd3JpdGVyX2J1ZmZlclwiKTtcbnByb3RvYnVmLlJlYWRlciAgICAgICA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlclJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlcl9idWZmZXJcIik7XG5cbi8vIFV0aWxpdHlcbnByb3RvYnVmLnV0aWwgICAgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcbnByb3RvYnVmLnJwYyAgICAgICAgICA9IHJlcXVpcmUoXCIuL3JwY1wiKTtcbnByb3RvYnVmLnJvb3RzICAgICAgICA9IHJlcXVpcmUoXCIuL3Jvb3RzXCIpO1xucHJvdG9idWYuY29uZmlndXJlICAgID0gY29uZmlndXJlO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyoqXG4gKiBSZWNvbmZpZ3VyZXMgdGhlIGxpYnJhcnkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZSgpIHtcbiAgICBwcm90b2J1Zi51dGlsLl9jb25maWd1cmUoKTtcbiAgICBwcm90b2J1Zi5Xcml0ZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJXcml0ZXIpO1xuICAgIHByb3RvYnVmLlJlYWRlci5fY29uZmlndXJlKHByb3RvYnVmLkJ1ZmZlclJlYWRlcik7XG59XG5cbi8vIFNldCB1cCBidWZmZXIgdXRpbGl0eSBhY2NvcmRpbmcgdG8gdGhlIGVudmlyb25tZW50XG5jb25maWd1cmUoKTtcbiIsIi8vIG1pbmltYWwgbGlicmFyeSBlbnRyeSBwb2ludC5cblxuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3NyYy9pbmRleC1taW5pbWFsXCIpO1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCAqIGFzIF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBdWRpb1NvdXJjZSB7XG4gIHBsYXlpbmc6IGJvb2xlYW5cbiAgdm9sdW1lOiBudW1iZXJcbiAgbG9vcDogYm9vbGVhblxuICBwaXRjaDogbnVtYmVyXG4gIHBsYXllZEF0VGltZXN0YW1wOiBudW1iZXJcbiAgYXVkaW9DbGlwVXJsOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXVkaW9Tb3VyY2UoKTogUEJBdWRpb1NvdXJjZSB7XG4gIHJldHVybiB7IHBsYXlpbmc6IGZhbHNlLCB2b2x1bWU6IDAsIGxvb3A6IGZhbHNlLCBwaXRjaDogMCwgcGxheWVkQXRUaW1lc3RhbXA6IDAsIGF1ZGlvQ2xpcFVybDogJycgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF1ZGlvU291cmNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdWRpb1NvdXJjZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBsYXlpbmcgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZvbHVtZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS52b2x1bWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxvb3AgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS5sb29wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5waXRjaCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5waXRjaClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxheWVkQXRUaW1lc3RhbXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDMyKG1lc3NhZ2UucGxheWVkQXRUaW1lc3RhbXApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmF1ZGlvQ2xpcFVybCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTApLnN0cmluZyhtZXNzYWdlLmF1ZGlvQ2xpcFVybClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXVkaW9Tb3VyY2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXVkaW9Tb3VyY2UoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2Uudm9sdW1lID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5sb29wID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnBpdGNoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5wbGF5ZWRBdFRpbWVzdGFtcCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuYXVkaW9DbGlwVXJsID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF1ZGlvU291cmNlIH0gZnJvbSAnLi9wYi9BdWRpb1NvdXJjZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDIwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb1NvdXJjZTogRWNzVHlwZTxQQkF1ZGlvU291cmNlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF1ZGlvU291cmNlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdWRpb1NvdXJjZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdWRpb1NvdXJjZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCAqIGFzIF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBdWRpb1N0cmVhbSB7XG4gIHBsYXlpbmc6IGJvb2xlYW5cbiAgdm9sdW1lOiBudW1iZXJcbiAgdXJsOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXVkaW9TdHJlYW0oKTogUEJBdWRpb1N0cmVhbSB7XG4gIHJldHVybiB7IHBsYXlpbmc6IGZhbHNlLCB2b2x1bWU6IDAsIHVybDogJycgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF1ZGlvU3RyZWFtID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdWRpb1N0cmVhbSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBsYXlpbmcgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZvbHVtZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS52b2x1bWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVybCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLnVybClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXVkaW9TdHJlYW0ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXVkaW9TdHJlYW0oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2Uudm9sdW1lID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS51cmwgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXVkaW9TdHJlYW0gfSBmcm9tICcuL3BiL0F1ZGlvU3RyZWFtLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMjFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF1ZGlvU3RyZWFtOiBFY3NUeXBlPFBCQXVkaW9TdHJlYW0+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQXVkaW9TdHJlYW0sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF1ZGlvU3RyZWFtLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF1ZGlvU3RyZWFtIHtcbiAgICByZXR1cm4gUEJBdWRpb1N0cmVhbS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXVkaW9TdHJlYW0ge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF1ZGlvU3RyZWFtLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkJveFNoYXBlIHtcbiAgd2l0aENvbGxpc2lvbnM6IGJvb2xlYW5cbiAgaXNQb2ludGVyQmxvY2tlcjogYm9vbGVhblxuICAvKiogVE9ETzogc2hvdWxkIHZpc2libGUgYmUgYW5vdGhlciBjb21wb25lbnQ/IHRoYXQgbWF5YmUgYWZmZWN0cyBhbGwgdGhlIGVudGl0aWVzICovXG4gIHZpc2libGU6IGJvb2xlYW5cbiAgdXZzOiBudW1iZXJbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJCb3hTaGFwZSgpOiBQQkJveFNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IGZhbHNlLCBpc1BvaW50ZXJCbG9ja2VyOiBmYWxzZSwgdmlzaWJsZTogZmFsc2UsIHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkJveFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJCb3hTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDM0KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJCb3hTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJCb3hTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uLy4uL2J1aWx0LWluLXR5cGVzL0Vjc1R5cGUnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJCb3hTaGFwZSB9IGZyb20gJy4vcGIvQm94U2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxM1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQm94U2hhcGU6IEVjc1R5cGU8UEJCb3hTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJCb3hTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQm94U2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQm94U2hhcGUge1xuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJCb3hTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQm94U2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ3lsaW5kZXJTaGFwZSB7XG4gIHdpdGhDb2xsaXNpb25zOiBib29sZWFuXG4gIGlzUG9pbnRlckJsb2NrZXI6IGJvb2xlYW5cbiAgLyoqIFRPRE86IHNob3VsZCB2aXNpYmxlIGJlIGFub3RoZXIgY29tcG9uZW50PyB0aGF0IG1heWJlIGFmZmVjdHMgYWxsIHRoZSBlbnRpdGllcyAqL1xuICB2aXNpYmxlOiBib29sZWFuXG4gIHJhZGl1c1RvcDogbnVtYmVyXG4gIHJhZGl1c0JvdHRvbTogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IGZhbHNlLCBpc1BvaW50ZXJCbG9ja2VyOiBmYWxzZSwgdmlzaWJsZTogZmFsc2UsIHJhZGl1c1RvcDogMCwgcmFkaXVzQm90dG9tOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDeWxpbmRlclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDeWxpbmRlclNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c1RvcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5yYWRpdXNUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c0JvdHRvbSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ3lsaW5kZXJTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c1RvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ3lsaW5kZXJTaGFwZSB9IGZyb20gJy4vcGIvQ3lsaW5kZXJTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE2XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlOiBFY3NUeXBlPFBCQ3lsaW5kZXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDeWxpbmRlclNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDeWxpbmRlclNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yMyB7XG4gIHI6IG51bWJlclxuICBnOiBudW1iZXJcbiAgYjogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2xvcjMoKTogQ29sb3IzIHtcbiAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENvbG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5iICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLmIpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2xvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvbG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuYiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCAqIGFzIF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJORlRTaGFwZSB7XG4gIHdpdGhDb2xsaXNpb25zOiBib29sZWFuXG4gIGlzUG9pbnRlckJsb2NrZXI6IGJvb2xlYW5cbiAgLyoqIFRPRE86IHNob3VsZCB2aXNpYmxlIGJlIGFub3RoZXIgY29tcG9uZW50PyB0aGF0IG1heWJlIGFmZmVjdHMgYWxsIHRoZSBlbnRpdGllcyAqL1xuICB2aXNpYmxlOiBib29sZWFuXG4gIHNyYzogc3RyaW5nXG4gIGFzc2V0SWQ6IHN0cmluZ1xuICBzdHlsZTogbnVtYmVyXG4gIGNvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTkZUU2hhcGUoKTogUEJORlRTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IGZhbHNlLFxuICAgIGlzUG9pbnRlckJsb2NrZXI6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIHNyYzogJycsXG4gICAgYXNzZXRJZDogJycsXG4gICAgc3R5bGU6IDAsXG4gICAgY29sb3I6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTkZUU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk5GVFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNyYyAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQpLnN0cmluZyhtZXNzYWdlLnNyYylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXNzZXRJZCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyhtZXNzYWdlLmFzc2V0SWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0eWxlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLnN0eWxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuY29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTkZUU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTkZUU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5hc3NldElkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2Uuc3R5bGUgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTkZUU2hhcGUgfSBmcm9tICcuL3BiL05GVFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE5GVFNoYXBlOiBFY3NUeXBlPFBCTkZUU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTkZUU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk5GVFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk5GVFNoYXBlIHtcbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTkZUU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlBsYW5lU2hhcGUge1xuICB3aXRoQ29sbGlzaW9uczogYm9vbGVhblxuICBpc1BvaW50ZXJCbG9ja2VyOiBib29sZWFuXG4gIC8qKiBUT0RPOiBzaG91bGQgdmlzaWJsZSBiZSBhbm90aGVyIGNvbXBvbmVudD8gdGhhdCBtYXliZSBhZmZlY3RzIGFsbCB0aGUgZW50aXRpZXMgKi9cbiAgdmlzaWJsZTogYm9vbGVhblxuICAvKiogVE9ETzogdGhpcyBjb3VsZCBiZSBiZXR0ZXIgc2VyaWFsaXplZCBhcyB1MDAgdjAwIHUwMSB2MDEgdTEwIHYxMCB1MTEgdjExIGZvciBzcGVlZCAqL1xuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKTogUEJQbGFuZVNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IGZhbHNlLCBpc1BvaW50ZXJCbG9ja2VyOiBmYWxzZSwgdmlzaWJsZTogZmFsc2UsIHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBsYW5lU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBsYW5lU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQbGFuZVNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBsYW5lU2hhcGUgfSBmcm9tICcuL3BiL1BsYW5lU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUGxhbmVTaGFwZTogRWNzVHlwZTxQQlBsYW5lU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUGxhbmVTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUGxhbmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICByZXR1cm4gUEJQbGFuZVNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJQbGFuZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQbGFuZVNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlNwaGVyZVNoYXBlIHtcbiAgd2l0aENvbGxpc2lvbnM6IGJvb2xlYW5cbiAgaXNQb2ludGVyQmxvY2tlcjogYm9vbGVhblxuICB2aXNpYmxlOiBib29sZWFuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlNwaGVyZVNoYXBlKCk6IFBCU3BoZXJlU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogZmFsc2UsIGlzUG9pbnRlckJsb2NrZXI6IGZhbHNlLCB2aXNpYmxlOiBmYWxzZSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCU3BoZXJlU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlNwaGVyZVNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlNwaGVyZVNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlNwaGVyZVNoYXBlIH0gZnJvbSAnLi9wYi9TcGhlcmVTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE1XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZTogRWNzVHlwZTxQQlNwaGVyZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlNwaGVyZVNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJTcGhlcmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJTcGhlcmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVGV4dFNoYXBlIHtcbiAgdGV4dDogc3RyaW5nXG4gIC8qKiB0aGlzIHNob3VsZCBiZSByZW1vdmVkICovXG4gIHZpc2libGU6IGJvb2xlYW5cbiAgZm9udDogc3RyaW5nXG4gIG9wYWNpdHk6IG51bWJlclxuICBmb250U2l6ZTogbnVtYmVyXG4gIGZvbnRBdXRvU2l6ZTogYm9vbGVhblxuICBoVGV4dEFsaWduOiBzdHJpbmdcbiAgdlRleHRBbGlnbjogc3RyaW5nXG4gIHdpZHRoOiBudW1iZXJcbiAgaGVpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdSaWdodDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBwYWRkaW5nTGVmdDogbnVtYmVyXG4gIGxpbmVTcGFjaW5nOiBudW1iZXJcbiAgbGluZUNvdW50OiBudW1iZXJcbiAgdGV4dFdyYXBwaW5nOiBib29sZWFuXG4gIHNoYWRvd0JsdXI6IG51bWJlclxuICBzaGFkb3dPZmZzZXRYOiBudW1iZXJcbiAgc2hhZG93T2Zmc2V0WTogbnVtYmVyXG4gIG91dGxpbmVXaWR0aDogbnVtYmVyXG4gIHNoYWRvd0NvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgb3V0bGluZUNvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgdGV4dENvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVGV4dFNoYXBlKCk6IFBCVGV4dFNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiAnJyxcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBmb250OiAnJyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIGZvbnRTaXplOiAwLFxuICAgIGZvbnRBdXRvU2l6ZTogZmFsc2UsXG4gICAgaFRleHRBbGlnbjogJycsXG4gICAgdlRleHRBbGlnbjogJycsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgcGFkZGluZ1JpZ2h0OiAwLFxuICAgIHBhZGRpbmdCb3R0b206IDAsXG4gICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgbGluZVNwYWNpbmc6IDAsXG4gICAgbGluZUNvdW50OiAwLFxuICAgIHRleHRXcmFwcGluZzogZmFsc2UsXG4gICAgc2hhZG93Qmx1cjogMCxcbiAgICBzaGFkb3dPZmZzZXRYOiAwLFxuICAgIHNoYWRvd09mZnNldFk6IDAsXG4gICAgb3V0bGluZVdpZHRoOiAwLFxuICAgIHNoYWRvd0NvbG9yOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgdGV4dENvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlRleHRTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVGV4dFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGV4dCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuZm9udClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3BhY2l0eSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5vcGFjaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250U2l6ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5mb250U2l6ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udEF1dG9TaXplID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5ib29sKG1lc3NhZ2UuZm9udEF1dG9TaXplKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oVGV4dEFsaWduICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuaFRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudlRleHRBbGlnbiAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLnZUZXh0QWxpZ24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLndpZHRoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDc3KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoODUpLmZsb2F0KG1lc3NhZ2UuaGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDkzKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdSaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDEpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1JpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwOSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nTGVmdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ0xlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxpbmVTcGFjaW5nICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyNSkuZmxvYXQobWVzc2FnZS5saW5lU3BhY2luZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZUNvdW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuaW50MzIobWVzc2FnZS5saW5lQ291bnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRleHRXcmFwcGluZyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzYpLmJvb2wobWVzc2FnZS50ZXh0V3JhcHBpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd0JsdXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLnNoYWRvd0JsdXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTU3KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFkgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY1KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVXaWR0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNzMpLmZsb2F0KG1lc3NhZ2Uub3V0bGluZVdpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uuc2hhZG93Q29sb3IsIHdyaXRlci51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uub3V0bGluZUNvbG9yLCB3cml0ZXIudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVGV4dFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuZm9udCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9wYWNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmZvbnRTaXplID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5mb250QXV0b1NpemUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuaFRleHRBbGlnbiA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLnZUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS53aWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLmhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5saW5lU3BhY2luZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmxpbmVDb3VudCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBtZXNzYWdlLnRleHRXcmFwcGluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Qmx1ciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd09mZnNldFggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRZID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZVdpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5vdXRsaW5lQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uLy4uL2J1aWx0LWluLXR5cGVzL0Vjc1R5cGUnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJUZXh0U2hhcGUgfSBmcm9tICcuL3BiL1RleHRTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDMwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0U2hhcGU6IEVjc1R5cGU8UEJUZXh0U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVGV4dFNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJUZXh0U2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVGV4dFNoYXBlIHtcbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlRleHRTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVGV4dFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGVudW0gWUdQb3NpdGlvblR5cGUge1xuICBZR1Bvc2l0aW9uVHlwZVN0YXRpYyA9IDAsXG4gIFlHUG9zaXRpb25UeXBlUmVsYXRpdmUgPSAxLFxuICBZR1Bvc2l0aW9uVHlwZUFic29sdXRlID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGVudW0gWUdBbGlnbiB7XG4gIFlHQWxpZ25BdXRvID0gMCxcbiAgWUdBbGlnbkZsZXhTdGFydCA9IDEsXG4gIFlHQWxpZ25DZW50ZXIgPSAyLFxuICBZR0FsaWduRmxleEVuZCA9IDMsXG4gIFlHQWxpZ25TdHJldGNoID0gNCxcbiAgWUdBbGlnbkJhc2VsaW5lID0gNSxcbiAgWUdBbGlnblNwYWNlQmV0d2VlbiA9IDYsXG4gIFlHQWxpZ25TcGFjZUFyb3VuZCA9IDcsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHVW5pdCB7XG4gIFlHVW5pdFVuZGVmaW5lZCA9IDAsXG4gIFlHVW5pdFBvaW50ID0gMSxcbiAgWUdVbml0UGVyY2VudCA9IDIsXG4gIFlHVW5pdEF1dG8gPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgZW51bSBZR0RpcmVjdGlvbiB7XG4gIFlHRGlyZWN0aW9uSW5oZXJpdCA9IDAsXG4gIFlHRGlyZWN0aW9uTFRSID0gMSxcbiAgWUdEaXJlY3Rpb25SVEwgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgZW51bSBZR0ZsZXhEaXJlY3Rpb24ge1xuICBZR0ZsZXhEaXJlY3Rpb25Db2x1bW4gPSAwLFxuICBZR0ZsZXhEaXJlY3Rpb25Db2x1bW5SZXZlcnNlID0gMSxcbiAgWUdGbGV4RGlyZWN0aW9uUm93ID0gMixcbiAgWUdGbGV4RGlyZWN0aW9uUm93UmV2ZXJzZSA9IDMsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHV3JhcCB7XG4gIFlHV3JhcE5vV3JhcCA9IDAsXG4gIFlHV3JhcFdyYXAgPSAxLFxuICBZR1dyYXBXcmFwUmV2ZXJzZSA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHSnVzdGlmeSB7XG4gIFlHSnVzdGlmeUZsZXhTdGFydCA9IDAsXG4gIFlHSnVzdGlmeUNlbnRlciA9IDEsXG4gIFlHSnVzdGlmeUZsZXhFbmQgPSAyLFxuICBZR0p1c3RpZnlTcGFjZUJldHdlZW4gPSAzLFxuICBZR0p1c3RpZnlTcGFjZUFyb3VuZCA9IDQsXG4gIFlHSnVzdGlmeVNwYWNlRXZlbmx5ID0gNSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGVudW0gWUdPdmVyZmxvdyB7XG4gIFlHT3ZlcmZsb3dWaXNpYmxlID0gMCxcbiAgWUdPdmVyZmxvd0hpZGRlbiA9IDEsXG4gIFlHT3ZlcmZsb3dTY3JvbGwgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgZW51bSBZR0Rpc3BsYXkge1xuICBZR0Rpc3BsYXlGbGV4ID0gMCxcbiAgWUdEaXNwbGF5Tm9uZSA9IDEsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHRWRnZSB7XG4gIFlHRWRnZUxlZnQgPSAwLFxuICBZR0VkZ2VUb3AgPSAxLFxuICBZR0VkZ2VSaWdodCA9IDIsXG4gIFlHRWRnZUJvdHRvbSA9IDMsXG4gIFlHRWRnZVN0YXJ0ID0gNCxcbiAgWUdFZGdlRW5kID0gNSxcbiAgWUdFZGdlSG9yaXpvbnRhbCA9IDYsXG4gIFlHRWRnZVZlcnRpY2FsID0gNyxcbiAgWUdFZGdlQWxsID0gOCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQlVpVHJhbnNmb3JtIHtcbiAgcG9zaXRpb25UeXBlOiBZR1Bvc2l0aW9uVHlwZVxuICBhbGlnbkNvbnRlbnQ6IFlHQWxpZ25cbiAgYWxpZ25JdGVtczogWUdBbGlnblxuICBhbGlnblNlbGY6IFlHQWxpZ25cbiAgZmxleERpcmVjdGlvbjogWUdGbGV4RGlyZWN0aW9uXG4gIGZsZXhXcmFwOiBZR1dyYXBcbiAganVzdGlmeUNvbnRlbnQ6IFlHSnVzdGlmeVxuICBvdmVyZmxvdzogWUdPdmVyZmxvd1xuICBkaXNwbGF5OiBZR0Rpc3BsYXlcbiAgZGlyZWN0aW9uOiBZR0RpcmVjdGlvblxuICBmbGV4OiBudW1iZXJcbiAgZmxleEJhc2lzVW5pdDogWUdVbml0XG4gIGZsZXhCYXNpczogbnVtYmVyXG4gIGZsZXhHcm93OiBudW1iZXJcbiAgZmxleFNocmluazogbnVtYmVyXG4gIHdpZHRoVW5pdDogWUdVbml0XG4gIHdpZHRoOiBudW1iZXJcbiAgaGVpZ2h0VW5pdDogWUdVbml0XG4gIGhlaWdodDogbnVtYmVyXG4gIG1pbldpZHRoVW5pdDogWUdVbml0XG4gIG1pbldpZHRoOiBudW1iZXJcbiAgbWluSGVpZ2h0VW5pdDogWUdVbml0XG4gIG1pbkhlaWdodDogbnVtYmVyXG4gIG1heFdpZHRoVW5pdDogWUdVbml0XG4gIG1heFdpZHRoOiBudW1iZXJcbiAgbWF4SGVpZ2h0VW5pdDogWUdVbml0XG4gIG1heEhlaWdodDogbnVtYmVyXG4gIHBvc2l0aW9uTGVmdFVuaXQ6IFlHVW5pdFxuICBwb3NpdGlvbkxlZnQ6IG51bWJlclxuICBwb3NpdGlvblRvcFVuaXQ6IFlHVW5pdFxuICBwb3NpdGlvblRvcDogbnVtYmVyXG4gIHBvc2l0aW9uUmlnaHRVbml0OiBZR1VuaXRcbiAgcG9zaXRpb25SaWdodDogbnVtYmVyXG4gIHBvc2l0aW9uQm90dG9tVW5pdDogWUdVbml0XG4gIHBvc2l0aW9uQm90dG9tOiBudW1iZXJcbiAgLyoqIG1hcmdpbiAqL1xuICBtYXJnaW5MZWZ0VW5pdDogWUdVbml0XG4gIG1hcmdpbkxlZnQ6IG51bWJlclxuICBtYXJnaW5Ub3BVbml0OiBZR1VuaXRcbiAgbWFyZ2luVG9wOiBudW1iZXJcbiAgbWFyZ2luUmlnaHRVbml0OiBZR1VuaXRcbiAgbWFyZ2luUmlnaHQ6IG51bWJlclxuICBtYXJnaW5Cb3R0b21Vbml0OiBZR1VuaXRcbiAgbWFyZ2luQm90dG9tOiBudW1iZXJcbiAgcGFkZGluZ0xlZnRVbml0OiBZR1VuaXRcbiAgcGFkZGluZ0xlZnQ6IG51bWJlclxuICBwYWRkaW5nVG9wVW5pdDogWUdVbml0XG4gIHBhZGRpbmdUb3A6IG51bWJlclxuICBwYWRkaW5nUmlnaHRVbml0OiBZR1VuaXRcbiAgcGFkZGluZ1JpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ0JvdHRvbVVuaXQ6IFlHVW5pdFxuICBwYWRkaW5nQm90dG9tOiBudW1iZXJcbiAgYm9yZGVyTGVmdDogbnVtYmVyXG4gIGJvcmRlclRvcDogbnVtYmVyXG4gIGJvcmRlclJpZ2h0OiBudW1iZXJcbiAgYm9yZGVyQm90dG9tOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVWlUcmFuc2Zvcm0oKTogUEJVaVRyYW5zZm9ybSB7XG4gIHJldHVybiB7XG4gICAgcG9zaXRpb25UeXBlOiAwLFxuICAgIGFsaWduQ29udGVudDogMCxcbiAgICBhbGlnbkl0ZW1zOiAwLFxuICAgIGFsaWduU2VsZjogMCxcbiAgICBmbGV4RGlyZWN0aW9uOiAwLFxuICAgIGZsZXhXcmFwOiAwLFxuICAgIGp1c3RpZnlDb250ZW50OiAwLFxuICAgIG92ZXJmbG93OiAwLFxuICAgIGRpc3BsYXk6IDAsXG4gICAgZGlyZWN0aW9uOiAwLFxuICAgIGZsZXg6IDAsXG4gICAgZmxleEJhc2lzVW5pdDogMCxcbiAgICBmbGV4QmFzaXM6IDAsXG4gICAgZmxleEdyb3c6IDAsXG4gICAgZmxleFNocmluazogMCxcbiAgICB3aWR0aFVuaXQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0VW5pdDogMCxcbiAgICBoZWlnaHQ6IDAsXG4gICAgbWluV2lkdGhVbml0OiAwLFxuICAgIG1pbldpZHRoOiAwLFxuICAgIG1pbkhlaWdodFVuaXQ6IDAsXG4gICAgbWluSGVpZ2h0OiAwLFxuICAgIG1heFdpZHRoVW5pdDogMCxcbiAgICBtYXhXaWR0aDogMCxcbiAgICBtYXhIZWlnaHRVbml0OiAwLFxuICAgIG1heEhlaWdodDogMCxcbiAgICBwb3NpdGlvbkxlZnRVbml0OiAwLFxuICAgIHBvc2l0aW9uTGVmdDogMCxcbiAgICBwb3NpdGlvblRvcFVuaXQ6IDAsXG4gICAgcG9zaXRpb25Ub3A6IDAsXG4gICAgcG9zaXRpb25SaWdodFVuaXQ6IDAsXG4gICAgcG9zaXRpb25SaWdodDogMCxcbiAgICBwb3NpdGlvbkJvdHRvbVVuaXQ6IDAsXG4gICAgcG9zaXRpb25Cb3R0b206IDAsXG4gICAgbWFyZ2luTGVmdFVuaXQ6IDAsXG4gICAgbWFyZ2luTGVmdDogMCxcbiAgICBtYXJnaW5Ub3BVbml0OiAwLFxuICAgIG1hcmdpblRvcDogMCxcbiAgICBtYXJnaW5SaWdodFVuaXQ6IDAsXG4gICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgbWFyZ2luQm90dG9tVW5pdDogMCxcbiAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgcGFkZGluZ0xlZnRVbml0OiAwLFxuICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgIHBhZGRpbmdUb3BVbml0OiAwLFxuICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgcGFkZGluZ1JpZ2h0VW5pdDogMCxcbiAgICBwYWRkaW5nUmlnaHQ6IDAsXG4gICAgcGFkZGluZ0JvdHRvbVVuaXQ6IDAsXG4gICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICBib3JkZXJMZWZ0OiAwLFxuICAgIGJvcmRlclRvcDogMCxcbiAgICBib3JkZXJSaWdodDogMCxcbiAgICBib3JkZXJCb3R0b206IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlVpVHJhbnNmb3JtID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJVaVRyYW5zZm9ybSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uVHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uVHlwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxpZ25Db250ZW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmFsaWduQ29udGVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxpZ25JdGVtcyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS5hbGlnbkl0ZW1zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGlnblNlbGYgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UuYWxpZ25TZWxmKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4RGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLmZsZXhEaXJlY3Rpb24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhXcmFwICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLmZsZXhXcmFwKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qdXN0aWZ5Q29udGVudCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1NikuaW50MzIobWVzc2FnZS5qdXN0aWZ5Q29udGVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3ZlcmZsb3cgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjQpLmludDMyKG1lc3NhZ2Uub3ZlcmZsb3cpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3BsYXkgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UuZGlzcGxheSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLmRpcmVjdGlvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5mbGV4KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4QmFzaXNVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwNCkuaW50MzIobWVzc2FnZS5mbGV4QmFzaXNVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4QmFzaXMgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLmZsZXhCYXNpcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleEdyb3cgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmZsZXhHcm93KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4U2hyaW5rICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzMykuZmxvYXQobWVzc2FnZS5mbGV4U2hyaW5rKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5pbnQzMihtZXNzYWdlLndpZHRoVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2lkdGggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE1MikuaW50MzIobWVzc2FnZS5oZWlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY1KS5mbG9hdChtZXNzYWdlLmhlaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluV2lkdGhVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2OCkuaW50MzIobWVzc2FnZS5taW5XaWR0aFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1pbldpZHRoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4MSkuZmxvYXQobWVzc2FnZS5taW5XaWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluSGVpZ2h0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxODQpLmludDMyKG1lc3NhZ2UubWluSGVpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluSGVpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE5NykuZmxvYXQobWVzc2FnZS5taW5IZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heFdpZHRoVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNDgpLmludDMyKG1lc3NhZ2UubWF4V2lkdGhVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhXaWR0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNjEpLmZsb2F0KG1lc3NhZ2UubWF4V2lkdGgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heEhlaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjY0KS5pbnQzMihtZXNzYWdlLm1heEhlaWdodFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heEhlaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNzcpLmZsb2F0KG1lc3NhZ2UubWF4SGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkxlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyOCkuaW50MzIobWVzc2FnZS5wb3NpdGlvbkxlZnRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQxKS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Ub3BVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0NCkuaW50MzIobWVzc2FnZS5wb3NpdGlvblRvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM1NykuZmxvYXQobWVzc2FnZS5wb3NpdGlvblRvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25SaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzYwKS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvblJpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3MykuZmxvYXQobWVzc2FnZS5wb3NpdGlvblJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkJvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzc2KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uQm90dG9tVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Cb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzg5KS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5MZWZ0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MDgpLmludDMyKG1lc3NhZ2UubWFyZ2luTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpbkxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIxKS5mbG9hdChtZXNzYWdlLm1hcmdpbkxlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblRvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDI0KS5pbnQzMihtZXNzYWdlLm1hcmdpblRvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblRvcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MzcpLmZsb2F0KG1lc3NhZ2UubWFyZ2luVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5SaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDQwKS5pbnQzMihtZXNzYWdlLm1hcmdpblJpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFyZ2luUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUzKS5mbG9hdChtZXNzYWdlLm1hcmdpblJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5Cb3R0b21Vbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1NikuaW50MzIobWVzc2FnZS5tYXJnaW5Cb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5Cb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDY5KS5mbG9hdChtZXNzYWdlLm1hcmdpbkJvdHRvbSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0xlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4OCkuaW50MzIobWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdMZWZ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUwMSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ1RvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTA0KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdUb3BVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUxNykuZmxvYXQobWVzc2FnZS5wYWRkaW5nVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUyMCkuaW50MzIobWVzc2FnZS5wYWRkaW5nUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTMzKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdSaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0JvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTM2KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdCb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU0OSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJMZWZ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU4MSkuZmxvYXQobWVzc2FnZS5ib3JkZXJMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJUb3AgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTk3KS5mbG9hdChtZXNzYWdlLmJvcmRlclRvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9yZGVyUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjEzKS5mbG9hdChtZXNzYWdlLmJvcmRlclJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJCb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjI5KS5mbG9hdChtZXNzYWdlLmJvcmRlckJvdHRvbSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVWlUcmFuc2Zvcm0oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uVHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmFsaWduQ29udGVudCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmFsaWduSXRlbXMgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbGlnblNlbGYgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4RGlyZWN0aW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleFdyYXAgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5qdXN0aWZ5Q29udGVudCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLm92ZXJmbG93ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzcGxheSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UuZmxleCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBtZXNzYWdlLmZsZXhCYXNpc1VuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleEJhc2lzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleEdyb3cgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4U2hyaW5rID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIG1lc3NhZ2Uud2lkdGhVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBtZXNzYWdlLndpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIG1lc3NhZ2UuaGVpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5oZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgbWVzc2FnZS5taW5XaWR0aFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2UubWluV2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5taW5IZWlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBtZXNzYWdlLm1pbkhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICBtZXNzYWdlLm1heFdpZHRoVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgbWVzc2FnZS5tYXhXaWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICBtZXNzYWdlLm1heEhlaWdodFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIG1lc3NhZ2UubWF4SGVpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25MZWZ0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvbkxlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblRvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Ub3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblJpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Cb3R0b21Vbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblRvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luUmlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgbWVzc2FnZS5tYXJnaW5Cb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1JpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIG1lc3NhZ2UuYm9yZGVyTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlclRvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlclJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgIG1lc3NhZ2UuYm9yZGVyQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVWlUcmFuc2Zvcm0gfSBmcm9tICcuL3BiL1VpVHJhbnNmb3JtLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNTBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFVpVHJhbnNmb3JtOiBFY3NUeXBlPFBCVWlUcmFuc2Zvcm0+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVWlUcmFuc2Zvcm0sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlVpVHJhbnNmb3JtLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlVpVHJhbnNmb3JtIHtcbiAgICByZXR1cm4gUEJVaVRyYW5zZm9ybS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlVpVHJhbnNmb3JtLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBBdWRpb1NvdXJjZSBmcm9tICcuL0F1ZGlvU291cmNlLmdlbidcbmltcG9ydCAqIGFzIEF1ZGlvU3RyZWFtIGZyb20gJy4vQXVkaW9TdHJlYW0uZ2VuJ1xuaW1wb3J0ICogYXMgQm94U2hhcGUgZnJvbSAnLi9Cb3hTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBDeWxpbmRlclNoYXBlIGZyb20gJy4vQ3lsaW5kZXJTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBORlRTaGFwZSBmcm9tICcuL05GVFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFBsYW5lU2hhcGUgZnJvbSAnLi9QbGFuZVNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFNwaGVyZVNoYXBlIGZyb20gJy4vU3BoZXJlU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgVGV4dFNoYXBlIGZyb20gJy4vVGV4dFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFVpVHJhbnNmb3JtIGZyb20gJy4vVWlUcmFuc2Zvcm0uZ2VuJ1xuaW1wb3J0IHR5cGUgeyBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUHJvdG9jb2xCdWZmZXJDb21wb25lbnRzKHtcbiAgZGVmaW5lQ29tcG9uZW50XG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnQnPikge1xuXG4gIHJldHVybiB7XG5BdWRpb1NvdXJjZTogZGVmaW5lQ29tcG9uZW50KEF1ZGlvU291cmNlLkNPTVBPTkVOVF9JRCwgQXVkaW9Tb3VyY2UuQXVkaW9Tb3VyY2UpLFxuQXVkaW9TdHJlYW06IGRlZmluZUNvbXBvbmVudChBdWRpb1N0cmVhbS5DT01QT05FTlRfSUQsIEF1ZGlvU3RyZWFtLkF1ZGlvU3RyZWFtKSxcbkJveFNoYXBlOiBkZWZpbmVDb21wb25lbnQoQm94U2hhcGUuQ09NUE9ORU5UX0lELCBCb3hTaGFwZS5Cb3hTaGFwZSksXG5DeWxpbmRlclNoYXBlOiBkZWZpbmVDb21wb25lbnQoQ3lsaW5kZXJTaGFwZS5DT01QT05FTlRfSUQsIEN5bGluZGVyU2hhcGUuQ3lsaW5kZXJTaGFwZSksXG5ORlRTaGFwZTogZGVmaW5lQ29tcG9uZW50KE5GVFNoYXBlLkNPTVBPTkVOVF9JRCwgTkZUU2hhcGUuTkZUU2hhcGUpLFxuUGxhbmVTaGFwZTogZGVmaW5lQ29tcG9uZW50KFBsYW5lU2hhcGUuQ09NUE9ORU5UX0lELCBQbGFuZVNoYXBlLlBsYW5lU2hhcGUpLFxuU3BoZXJlU2hhcGU6IGRlZmluZUNvbXBvbmVudChTcGhlcmVTaGFwZS5DT01QT05FTlRfSUQsIFNwaGVyZVNoYXBlLlNwaGVyZVNoYXBlKSxcblRleHRTaGFwZTogZGVmaW5lQ29tcG9uZW50KFRleHRTaGFwZS5DT01QT05FTlRfSUQsIFRleHRTaGFwZS5UZXh0U2hhcGUpLFxuVWlUcmFuc2Zvcm06IGRlZmluZUNvbXBvbmVudChVaVRyYW5zZm9ybS5DT01QT05FTlRfSUQsIFVpVHJhbnNmb3JtLlVpVHJhbnNmb3JtKVxuICB9XG59XG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnLi4vLi4vTWF0aCdcbmltcG9ydCB0eXBlIHsgRWNzVHlwZSB9IGZyb20gJy4uLy4uL2J1aWx0LWluLXR5cGVzL0Vjc1R5cGUnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybSA9IHtcbiAgcG9zaXRpb246IFZlY3RvcjMuTXV0YWJsZVZlY3RvcjNcbiAgcm90YXRpb246IFF1YXRlcm5pb24uTXV0YWJsZVF1YXRlcm5pb25cbiAgc2NhbGU6IFZlY3RvcjMuTXV0YWJsZVZlY3RvcjNcbiAgcGFyZW50PzogRW50aXR5XG59XG5cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fTEVOR1RIID0gNDRcblxuLy8gVGhpcyB0cmFuc2Zvcm0gY2FuIGJlIG9wdGltaXplZCB3aXRoIEZsb2F0MzJBcnJheSBmb3IgZXhhbXBsZVxuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybTogRWNzVHlwZTxUcmFuc2Zvcm0+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFRyYW5zZm9ybSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHB0ciA9IGJ1aWxkZXIuaW5jcmVtZW50V3JpdGVPZmZzZXQoVFJBTlNGT1JNX0xFTkdUSClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyLCB2YWx1ZS5wb3NpdGlvbi54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyA0LCB2YWx1ZS5wb3NpdGlvbi55KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyA4LCB2YWx1ZS5wb3NpdGlvbi56KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAxMiwgdmFsdWUucm90YXRpb24ueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMTYsIHZhbHVlLnJvdGF0aW9uLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDIwLCB2YWx1ZS5yb3RhdGlvbi56KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyNCwgdmFsdWUucm90YXRpb24udylcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjgsIHZhbHVlLnNjYWxlLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDMyLCB2YWx1ZS5zY2FsZS55KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAzNiwgdmFsdWUuc2NhbGUueilcbiAgICBidWlsZGVyLnNldFVpbnQzMihwdHIgKyA0MCwgdmFsdWUucGFyZW50IHx8IDApXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFRyYW5zZm9ybSB7XG4gICAgY29uc3QgcHRyID0gcmVhZGVyLmluY3JlbWVudFJlYWRPZmZzZXQoVFJBTlNGT1JNX0xFTkdUSClcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IFZlY3RvcjMuY3JlYXRlKFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIpLFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyA0KSxcbiAgICAgICAgcmVhZGVyLmdldEZsb2F0MzIocHRyICsgOClcbiAgICAgICksXG4gICAgICByb3RhdGlvbjogUXVhdGVybmlvbi5jcmVhdGUoXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDEyKSxcbiAgICAgICAgcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMTYpLFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyMCksXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDI0KVxuICAgICAgKSxcbiAgICAgIHNjYWxlOiBWZWN0b3IzLmNyZWF0ZShcbiAgICAgICAgcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjgpLFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAzMiksXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDM2KVxuICAgICAgKSxcbiAgICAgIHBhcmVudDogcmVhZGVyLmdldFVpbnQzMihwdHIgKyA0MCkgYXMgRW50aXR5XG4gICAgfVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSxcbiAgICAgIHNjYWxlOiB7IHg6IDEsIHk6IDEsIHo6IDEgfSxcbiAgICAgIHJvdGF0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAsIHc6IDEgfSxcbiAgICAgIHBhcmVudDogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGVudW0gTEVHQUNZX0NPTVBPTkVOVF9JRCB7XG4gIFRSQU5TRk9STSA9IDEsXG4gIFVVSURfQ0FMTEJBQ0sgPSA4LFxuICBCT1hfU0hBUEUgPSAxNixcbiAgU1BIRVJFX1NIQVBFID0gMTcsXG4gIFBMQU5FX1NIQVBFID0gMTgsXG4gIENPTkVfU0hBUEUgPSAxOSxcbiAgQ1lMSU5ERVJfU0hBUEUgPSAyMCxcbiAgVEVYVF9TSEFQRSA9IDIxLFxuXG4gIE5GVF9TSEFQRSA9IDIyLFxuICBVSV9XT1JMRF9TUEFDRV9TSEFQRSA9IDIzLFxuICBVSV9TQ1JFRU5fU1BBQ0VfU0hBUEUgPSAyNCxcbiAgVUlfQ09OVEFJTkVSX1JFQ1QgPSAyNSxcbiAgVUlfQ09OVEFJTkVSX1NUQUNLID0gMjYsXG4gIFVJX1RFWFRfU0hBUEUgPSAyNyxcbiAgVUlfSU5QVVRfVEVYVF9TSEFQRSA9IDI4LFxuICBVSV9JTUFHRV9TSEFQRSA9IDI5LFxuICBVSV9TTElERVJfU0hBUEUgPSAzMCxcbiAgQ0lSQ0xFX1NIQVBFID0gMzEsXG4gIEJJTExCT0FSRCA9IDMyLFxuXG4gIEFOSU1BVElPTiA9IDMzLFxuICBGT05UID0gMzQsXG5cbiAgVUlfRlVMTFNDUkVFTl9TSEFQRSA9IDQwLCAvLyBpbnRlcm5hbCBmdWxsc2NyZWVuIHNjZW5lc1xuICBVSV9CVVRUT05fU0hBUEUgPSA0MSxcblxuICBHTFRGX1NIQVBFID0gNTQsXG4gIE9CSl9TSEFQRSA9IDU1LFxuICBBVkFUQVJfU0hBUEUgPSA1NixcblxuICBCQVNJQ19NQVRFUklBTCA9IDY0LFxuICBQQlJfTUFURVJJQUwgPSA2NSxcblxuICBISUdITElHSFRfRU5USVRZID0gNjYsXG5cbiAgLyoqIEBkZXByZWNhdGVkIFNvdW5kIGhhcyBiZWVuIGRlcHJlY2F0YWVkICovXG4gIFNPVU5EID0gNjcsXG4gIFRFWFRVUkUgPSA2OCxcblxuICBWSURFT19DTElQID0gNzAsXG4gIFZJREVPX1RFWFRVUkUgPSA3MSxcblxuICBBVkFUQVJfVEVYVFVSRSA9IDcyLFxuXG4gIEFVRElPX0NMSVAgPSAyMDAsXG4gIEFVRElPX1NPVVJDRSA9IDIwMSxcbiAgQVVESU9fU1RSRUFNID0gMjAyLFxuICBHSVpNT1MgPSAyMDMsXG4gIFNNQVJUX0lURU0gPSAyMDQsXG4gIEFWQVRBUl9NT0RJRklFUl9BUkVBID0gMjA1LFxuICBBVkFUQVJfQVRUQUNIID0gMjA2LFxuICBDQU1FUkFfTU9ERV9BUkVBID0gMjA3LFxuXG4gIC8vIEZvciBzdGF0ZSBzeW5jIG9ubHlcbiAgTkFNRSA9IDMwMCxcbiAgTE9DS0VEX09OX0VESVQgPSAzMDEsXG4gIFZJU0lCTEVfT05fRURJVCA9IDMwMlxufVxuIiwiaW1wb3J0IHR5cGUgeyBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJ1xuaW1wb3J0IHsgZGVmaW5lUHJvdG9jb2xCdWZmZXJDb21wb25lbnRzIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL2luZGV4LmdlbidcbmltcG9ydCB7IFRyYW5zZm9ybSBhcyBMZWdhY3lUcmFuc2Zvcm0gfSBmcm9tICcuL1RyYW5zZm9ybSdcbmltcG9ydCB7IExFR0FDWV9DT01QT05FTlRfSUQgYXMgSUQgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTGVnYWN5Q29tcG9uZW50cyh7XG4gIGRlZmluZUNvbXBvbmVudFxufTogUGljazxJRW5naW5lLCAnZGVmaW5lQ29tcG9uZW50Jz4pIHtcbiAgcmV0dXJuIHtcbiAgICBUcmFuc2Zvcm06IGRlZmluZUNvbXBvbmVudChJRC5UUkFOU0ZPUk0sIExlZ2FjeVRyYW5zZm9ybSksXG4gICAgLi4uZGVmaW5lUHJvdG9jb2xCdWZmZXJDb21wb25lbnRzKHsgZGVmaW5lQ29tcG9uZW50IH0pXG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIENPTVBPTkVOVF9JRCB7XG4gIFNZTkMgPSAxMDAwXG59XG4iLCJpbXBvcnQgeyBkZWZpbmVMZWdhY3lDb21wb25lbnRzIH0gZnJvbSAnLi9sZWdhY3knXG5pbXBvcnQgdHlwZSB7IElFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMnXG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTZGtDb21wb25lbnRzKGVuZ2luZTogUGljazxJRW5naW5lLCAnZGVmaW5lQ29tcG9uZW50Jz4pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5kZWZpbmVMZWdhY3lDb21wb25lbnRzKGVuZ2luZSlcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU2RrQ29tcG9uZW50cyA9IFJldHVyblR5cGU8dHlwZW9mIGRlZmluZVNka0NvbXBvbmVudHM+XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZHRQcm90b2NvbCA9IGV4cG9ydHMuc2FtZURhdGEgPSB2b2lkIDA7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuLyoqXG4gKiBDb21wYXJlIHJhdyBkYXRhLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHNhbWVEYXRhKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBCdWZmZXIgJiYgYiBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gYS5lcXVhbHMoYik7XG4gICAgfVxuICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBiIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGEgPT09IGI7XG59XG5leHBvcnRzLnNhbWVEYXRhID0gc2FtZURhdGE7XG4vKipcbiAqIEBwdWJsaWNcbiAqIENSRFQgcHJvdG9jb2wuXG4gKiBTdG9yZXMgdGhlIGxhdGVzdCBzdGF0ZSwgYW5kIGRlY2lkZXMgd2hlbmV2ZXIgd2UgaGF2ZVxuICogdG8gcHJvY2VzcyBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGluIGNhc2UgaXRzIGFuIHVwZGF0ZSwgb3JcbiAqIHRvIGRpc2NhcmQgYW5kIHNlbmQgb3VyIGxvY2FsIHZhbHVlIGNhdXNlIHJlbW90ZSBpdCdzIG91dGRhdGVkLlxuICovXG5mdW5jdGlvbiBjcmR0UHJvdG9jb2woKSB7XG4gICAgLyoqXG4gICAgICogTG9jYWwgc3RhdGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGxhdGVzdCBsYW1wb3J0IHRpbWVzdGFtcFxuICAgICAqIGFuZCB0aGUgcmF3IGRhdGEgdmFsdWVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdCBzdGF0ZSA9IHt9O1xuICAgIC8qKlxuICAgICAqIFdlIHNob3VsZCBjYWxsIHRoaXMgZm4gaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBzdGF0ZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGtleSwgZGF0YSwgcmVtb3RlVGltZXN0YW1wKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGgubWF4KHJlbW90ZVRpbWVzdGFtcCwgc3RhdGVba2V5XT8udGltZXN0YW1wIHx8IDApO1xuICAgICAgICByZXR1cm4gKHN0YXRlW2tleV0gPSB7IHRpbWVzdGFtcCwgZGF0YSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGV2ZW50IGZvciB0aGUgc3BlY2lmaWVkIGtleSBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGFuZFxuICAgICAqIGxhbXBvcnQgdGltZXN0bWFwIGluY3JlbWVudGVkIGJ5IG9uZSBpbiB0aGUgc3RhdGUuXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGtleSwgZGF0YSkge1xuICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHRpbWVzdGFtcFxuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSAoc3RhdGVba2V5XT8udGltZXN0YW1wIHx8IDApICsgMTtcbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5LCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICByZXR1cm4geyBrZXksIGRhdGEsIHRpbWVzdGFtcCB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSByZWNlaXZlZCBtZXNzYWdlIG9ubHkgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHJlY2lldmVkIGlzIGhpZ2hlclxuICAgICAqIHRoYW4gdGhlIHN0b3JlZCBvbmUuIElmIGl0cyBsb3dlciwgd2Ugc3ByZWFkIGl0IHRvIHRoZSBuZXR3b3JrIHRvIGNvcnJlY3QgdGhlIHBlZXIuXG4gICAgICogSWYgdGhleSBhcmUgZXF1YWwsIHRoZSBiaWdnZXIgcmF3IGRhdGEgd2lucy5cbiAgXG4gICAgICogUmV0dXJucyB0aGUgcmVjaWV2ZWQgZGF0YSBpZiB0aGUgbGFtcG9ydCBudW1iZXIgd2FzIGJpZ2dlciB0aGFuIG91cnMuXG4gICAgICogSWYgaXQgd2FzIGFuIG91dGRhdGVkIG1lc3NhZ2UsIHRoZW4gd2UgcmV0dXJuIHZvaWRcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICBjb25zdCB7IGtleSwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gc3RhdGVba2V5XTtcbiAgICAgICAgLy8gVGhlIHJlY2VpdmVkIG1lc3NhZ2UgaXMgPiB0aGFuIG91ciBjdXJyZW50IHZhbHVlLCB1cGRhdGUgb3VyIHN0YXRlLlxuICAgICAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlKGtleSwgZGF0YSwgdGltZXN0YW1wKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE91dGRhdGVkIE1lc3NhZ2UuIFJlc2VuZCBvdXIgc3RhdGUgbWVzc2FnZSB0aHJvdWdoIHRoZSB3aXJlLlxuICAgICAgICBpZiAoY3VycmVudC50aW1lc3RhbXAgPiB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IGN1cnJlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IGN1cnJlbnQudGltZXN0YW1wXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNhbWUgZGF0YSwgc2FtZSB0aW1lc3RhbXAuIFdlaXJkbyBlY2hvIG1lc3NhZ2UuXG4gICAgICAgIGlmIChzYW1lRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSYWNlIGNvbmRpdGlvbiwgc2FtZSB0aW1lc3RhbXAgZGlmZiBkYXRhLlxuICAgICAgICBmdW5jdGlvbiBjb21wYXJlRGF0YShjdXJyZW50LCBkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudCA+IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVEYXRhKGN1cnJlbnQuZGF0YSwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IGN1cnJlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IGN1cnJlbnQudGltZXN0YW1wXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVN0YXRlKGtleSwgZGF0YSwgdGltZXN0YW1wKS5kYXRhO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlRXZlbnQsXG4gICAgICAgIHByb2Nlc3NNZXNzYWdlLFxuICAgICAgICBnZXRTdGF0ZVxuICAgIH07XG59XG5leHBvcnRzLmNyZHRQcm90b2NvbCA9IGNyZHRQcm90b2NvbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5J1xuXG5leHBvcnQgbmFtZXNwYWNlIEVudGl0eVV0aWxzIHtcbiAgZXhwb3J0IGNvbnN0IE1BWF9FTlRJVElFUyA9IDEwMDAwXG5cbiAgbGV0IG9mZnNldDogbnVtYmVyID0gTUFYX0VOVElUSUVTXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qgb2ZmID0gb2Zmc2V0ICsgMVxuICAgIG9mZnNldCArPSBNQVhfRU5USVRJRVNcbiAgICByZXR1cm4gb2ZmXG4gIH1cblxuICBjb25zdCBTVEFUSUNfRU5USVRJRVMgPSBbMCwgTUFYX0VOVElUSUVTXVxuICBleHBvcnQgZnVuY3Rpb24gaXNTdGF0aWNFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBbbWluLCBtYXhdID0gU1RBVElDX0VOVElUSUVTXG4gICAgcmV0dXJuIGVudGl0eSA+PSBtaW4gJiYgZW50aXR5IDw9IG1heFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eVV0aWxzXG4iLCIvKipcbiAqIFRha2UgdGhlIG1heCBiZXR3ZWVuIGN1cnJlbnRTaXplIGFuZCBpbnRlbmRlZFNpemUgYW5kIHRoZW4gcGx1cyAxMDI0LiBUaGVuLFxuICogIGZpbmQgdGhlIG5leHQgbmVhcmVyIG11bHRpcGxlIG9mIDEwMjQuXG4gKiBAcGFyYW0gY3VycmVudFNpemUgLSBudW1iZXJcbiAqIEBwYXJhbSBpbnRlbmRlZFNpemUgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSBjYWxjdWxhdGVkIG51bWJlclxuICovXG5mdW5jdGlvbiBnZXROZXh0U2l6ZShjdXJyZW50U2l6ZTogbnVtYmVyLCBpbnRlbmRlZFNpemU6IG51bWJlcikge1xuICBjb25zdCBtaW5OZXdTaXplID0gTWF0aC5tYXgoY3VycmVudFNpemUsIGludGVuZGVkU2l6ZSkgKyAxMDI0XG4gIHJldHVybiBNYXRoLmNlaWwobWluTmV3U2l6ZSAvIDEwMjQpICogMTAyNFxufVxuXG4vKipcbiAqIEBwYXJhbSB3cml0aW5nIC0gd3JpdGluZyBvcHRpb24sIHNlZSBvYmplY3Qgc3BlY3MuXG4gKiBAcGFyYW0gcmVhZGluZyAtIHJlYWRpbmcgb3B0aW9uLCBzZWUgb2JqZWN0IHNwZWNzLlxuICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAtIEluaXRpYWwgY2FwYWNpdHkgb2YgYnVmZmVyIHRvIGFsbG9jYXRlLCBpZ25vcmVkIGlmIHlvdSB1c2Ugd3JpdGluZyBvciByZWFkaW5nIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQgdG8gcmVhZCBmcm9tIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHdoZXJlIGJlZ2lucyB0byByZWFkLiBEZWZhdWx0IDBcbiAgICogQHBhcmFtIGxlbmd0aCAtIGRlbGltaXRlIHdoZXJlIHRoZSB2YWxpZCBkYXRhIGVuZHMuIERlZmF1bHQ6IGJ1ZmZlci5sZW5ndGhcbiAgICovXG4gIHJlYWRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgbGVuZ3RoPzogbnVtYmVyXG4gICAgY3VycmVudE9mZnNldDogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkIHRvIHdyaXRlIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHRvIG5vdCBzdGFydCB3cml0aW5nIGZyb20gdGhlIGJlZ2luIG9mIGl0LiBEZWZhdWx0IDBcbiAgICovXG4gIHdyaXRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgY3VycmVudE9mZnNldD86IG51bWJlclxuICB9XG5cbiAgaW5pdGlhbENhcGFjaXR5PzogbnVtYmVyXG59XG5cbmNvbnN0IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHkgPSAxMDI0MFxuXG4vKipcbiAqIEJ5dGVCdWZmZXIgaXMgYSB3cmFwcGVyIG9mIERhdGFWaWV3IHdoaWNoIGFsc28gYWRkcyBhIHJlYWQgYW5kIHdyaXRlIG9mZnNldC5cbiAqICBBbHNvIGluIGEgd3JpdGUgb3BlcmF0aW9uIGl0IHJlc2l6ZXMgdGhlIGJ1ZmZlciBpcyBiZWluZyB1c2VkIGlmIGl0IG5lZWRzLlxuICpcbiAqIC0gVXNlIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG9yIGNvbnN1bWUgZGF0YS5cbiAqIC0gVXNlIHNldCBhbmQgZ2V0IG9ubHkgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91J3JlIGRvaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnl0ZUJ1ZmZlcihvcHRpb25zOiBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluaXRpYWxST2Zmc2V0OiBudW1iZXIgPSBvcHRpb25zLnJlYWRpbmc/LmN1cnJlbnRPZmZzZXQgfHwgMFxuICBsZXQgaW5pdGlhbEJ1ZmZlcjogVWludDhBcnJheSB8IG51bGwgPSBudWxsXG4gIGxldCBpbml0aWFsV09mZnNldDogbnVtYmVyID0gMFxuXG4gIGlmIChvcHRpb25zLndyaXRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy53cml0aW5nLmJ1ZmZlclxuICAgIGlmIChvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldCkge1xuICAgICAgaW5pdGlhbFdPZmZzZXQgPSBvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldFxuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLnJlYWRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy5yZWFkaW5nLmJ1ZmZlclxuICAgIGluaXRpYWxXT2Zmc2V0ID0gb3B0aW9ucy5yZWFkaW5nLmxlbmd0aCB8fCBvcHRpb25zLnJlYWRpbmcuYnVmZmVyLmxlbmd0aFxuICB9IGVsc2Uge1xuICAgIGluaXRpYWxCdWZmZXIgPSBuZXcgVWludDhBcnJheShcbiAgICAgIG9wdGlvbnMuaW5pdGlhbENhcGFjaXR5IHx8IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHlcbiAgICApXG4gIH1cblxuICBsZXQgYnVmZmVyOiBVaW50OEFycmF5ID0gaW5pdGlhbEJ1ZmZlciFcbiAgbGV0IHZpZXc6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0KVxuICBsZXQgd29mZnNldDogbnVtYmVyID0gaW5pdGlhbFdPZmZzZXRcbiAgbGV0IHJvZmZzZXQ6IG51bWJlciA9IGluaXRpYWxST2Zmc2V0XG5cbiAgLyoqXG4gICAqIEluY3JlZW1lbnQgdGhlIHdyaXRlIG9mZnNldCBhbmQgcmVzaXplIHRoZSBidWZmZXIgaWYgaXQgbmVlZHMuXG4gICAqL1xuICBjb25zdCB3b0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmICh3b2Zmc2V0ICsgYW1vdW50ID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld3NpemUgPSBnZXROZXh0U2l6ZShidWZmZXIuYnl0ZUxlbmd0aCwgd29mZnNldCArIGFtb3VudClcbiAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld3NpemUpXG4gICAgICBuZXdCdWZmZXIuc2V0KGJ1ZmZlcilcbiAgICAgIGJ1ZmZlciA9IG5ld0J1ZmZlclxuICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKVxuICAgIH1cblxuICAgIHdvZmZzZXQgKz0gYW1vdW50XG4gICAgcmV0dXJuIHdvZmZzZXQgLSBhbW91bnRcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdGhlIHJlYWQgb2Zmc2V0IGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRyeWluZyB0byByZWFkXG4gICAqICBvdXRzaWRlIHRoZSBib3VuZHMuXG4gICAqL1xuICBjb25zdCByb0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChyb2Zmc2V0ICsgYW1vdW50ID4gd29mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdXRzaWRlIG9mIHRoZSBib3VuZHMgb2Ygd3JpdGVuIGRhdGEuJylcbiAgICB9XG5cbiAgICByb2Zmc2V0ICs9IGFtb3VudFxuICAgIHJldHVybiByb2Zmc2V0IC0gYW1vdW50XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBlbnRpcmUgY3VycmVudCBVaW50OEFycmF5LlxuICAgICAqXG4gICAgICogV0FSTklORzogaWYgdGhlIGJ1ZmZlciBncm93cywgdGhlIHZpZXcgaGFkIGNoYW5nZWQgaXRzZWxmLFxuICAgICAqICBhbmQgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIGEgaW52YWxpZCBvbmUuXG4gICAgICovXG4gICAgYnVmZmVyKCk6IFVpbnQ4QXJyYXkge1xuICAgICAgcmV0dXJuIGJ1ZmZlclxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGNhcGFjaXR5IG9mIHRoZSBjdXJyZW50IGJ1ZmZlclxuICAgICAqL1xuICAgIGJ1ZmZlckxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGhcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBieXRlQnVmZmVyIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IG9uZVxuICAgICAqL1xuICAgIHJlc2V0QnVmZmVyKCk6IHZvaWQge1xuICAgICAgcm9mZnNldCA9IDBcbiAgICAgIHdvZmZzZXQgPSAwXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCByZWFkIG9mZnNldFxuICAgICAqL1xuICAgIGN1cnJlbnRSZWFkT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gcm9mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgd3JpdGUgb2Zmc2V0XG4gICAgICovXG4gICAgY3VycmVudFdyaXRlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZGluZyBwdXJwb3NlXG4gICAgICogUmV0dXJucyB0aGUgcHJldml1b3Mgb2Zmc3NldCBzaXplIGJlZm9yZSBpbmNyZW1lbnRpbmdcbiAgICAgKi9cbiAgICBpbmNyZW1lbnRSZWFkT2Zmc2V0KGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByb0FkZChhbW91bnQpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBIb3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIHJlYWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nQnl0ZXMoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0IC0gcm9mZnNldFxuICAgIH0sXG4gICAgcmVhZEZsb2F0MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkRmxvYXQ2NCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRJbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQ4KHJvQWRkKDEpKVxuICAgIH0sXG4gICAgcmVhZEludDE2KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRJbnQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkSW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ0ludDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChyb0FkZCgxKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MTYoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRVaW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRCdWZmZXIoKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkocm9BZGQobGVuZ3RoKSwgcm9BZGQoMCkpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBXcml0aW5nIHB1cnBvc2VcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgb2Zmc2V0XG4gICAgICogQHBhcmFtIGFtb3VudCAtIGhvdyBtYW55IGJ5dGVzXG4gICAgICogQHJldHVybnMgVGhlIG9mZnNldCB3aGVuIHRoaXMgcmVzZXJ2aW5nIHN0YXJ0cy5cbiAgICAgKi9cbiAgICBpbmNyZW1lbnRXcml0ZU9mZnNldChhbW91bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29BZGQoYW1vdW50KVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0ZW4gaW4gdGhlIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBzaXplKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHN1YmFycmF5IGZyb20gMCB0byBvZmZzZXQuXG4gICAgICovXG4gICAgdG9CaW5hcnkoKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIHdvZmZzZXQpXG4gICAgfSxcbiAgICB3cml0ZUJ1ZmZlcih2YWx1ZTogVWludDhBcnJheSwgd3JpdGVMZW5ndGg6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICBpZiAod3JpdGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy53cml0ZVVpbnQzMih2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBsZWFuXG4gICAgICBjb25zdCBvID0gd29BZGQodmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgIGJ1ZmZlci5zZXQodmFsdWUsIG8pXG4gICAgfSxcbiAgICB3cml0ZUZsb2F0MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldEZsb2F0MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUZsb2F0NjQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEZsb2F0NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldEludDgobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDE2KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgyKVxuICAgICAgdmlldy5zZXRJbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldEludDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnSW50NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ4KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgxKVxuICAgICAgdmlldy5zZXRVaW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDE2KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgyKVxuICAgICAgdmlldy5zZXRVaW50MTYobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0VWludDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50NjQodmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIC8vIERhdGF2aWV3IFByb3h5XG4gICAgZ2V0RmxvYXQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ4KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDgob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MTYob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50NjQob2Zmc2V0OiBudW1iZXIpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnSW50NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDgob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDE2KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdVaW50NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgc2V0RmxvYXQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRGbG9hdDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRGbG9hdDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDgob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MTYob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MTYob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDgob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50MTYob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgdmlldy5zZXRCaWdVaW50NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEJ5dGVCdWZmZXIgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVCeXRlQnVmZmVyPlxuIiwiLyoqXG4gKiBUaGUgd2lyZSBtZXNzYWdlIGlzIHRoZSB0b3AtbGV2ZWwgbWVzc2FnZSB0aGF0IGNhbiBiZSBwYWNrZWRcbiAqICBpbnNpZGUgaXQgY2FuIGNvbnRhaW4gYSBkYXRhIHdpdGggYW5vdGhlciBzdHJ1Y3R1cmUgb3IgcHJvdG9jb2xcbiAqXG4gKiBFYWNoIHdpcmUgbWVzc2FnZSBoYXMgdGhyZWUgcHJpbWl0aXZlIHByb3BlcnR5IHRoYXQgaXQnbGwgbmV2ZXIgY2hhbmdlXG4gKiAgIC0tLT4gbGVuZ3RoICAgICAgICB1aW50MzIgKG1lc3NhZ2Ugc2l6ZSB1cCB0byA0LDI5NCw5NjcsMjk1KVxuICogICAtLS0+IHZlcnNpb24gICAgICAgdWludDMyIChmb3Igbm93IGp1c3QgYSBudW1iZXIgd2hpY2ggaXMgemVybylcbiAqICAgLS0tPiBtZXNzYWdlIHR5cGUgIHVpbnQzMlxuICogVGhlIGxlbmd0aCBpbmRpY2F0ZXMgaG93IG1hbnkgYnl0ZXMgYXJlIGFib3ZlIHNlbGYsIHRoZSB2ZXJzaW9uIGluXG4gKiBjb21iaW5hdGlvbiB3aXRoIG1lc3NhZ2UgdHlwZSBkZWZpbmVzIHRoZSBzZXQgb2YgaGFuZGxlcnMgdGhhdCB3aWxsIGJlXG4gKiBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZVxuICpcbiAqL1xuXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi9CeXRlQnVmZmVyJ1xuXG50eXBlIFVpbnQzMiA9IG51bWJlclxuXG5leHBvcnQgbmFtZXNwYWNlIFdpcmVNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gRW51bSB7XG4gICAgUkVTRVJWRUQgPSAwLFxuXG4gICAgLy8gQ29tcG9uZW50IE9wZXJhdGlvblxuICAgIFBVVF9DT01QT05FTlQgPSAxLFxuICAgIERFTEVURV9DT01QT05FTlQgPSAyLFxuXG4gICAgLy8gVE9ETzogP1xuICAgIE1BWF9NRVNTQUdFX1RZUEVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbGVuZ3RoIC0gVWludDMyIHRoZSBsZW5ndGggb2YgYWxsIG1lc3NhZ2UgKGluY2x1ZGluZyB0aGUgaGVhZGVyKVxuICAgKiBAcGFyYW0gdHlwZSAtIGRlZmluZSB0aGUgZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyB0aGUgZGF0YVxuICAgKi9cbiAgZXhwb3J0IHR5cGUgSGVhZGVyID0ge1xuICAgIGxlbmd0aDogVWludDMyXG4gICAgdHlwZTogVWludDMyXG4gIH1cblxuICBleHBvcnQgY29uc3QgSEVBREVSX0xFTkdUSCA9IDhcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlmIHRoZSBtZXNzYWdlIGluY29taW5nIGlzIGNvbXBsZXRlZFxuICAgKiBAcGFyYW0gYnVmXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoYnVmOiBCeXRlQnVmZmVyKSB7XG4gICAgY29uc3QgcmVtID0gYnVmLnJlbWFpbmluZ0J5dGVzKClcbiAgICBpZiAocmVtIDwgSEVBREVSX0xFTkdUSCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZUxlbmd0aCA9IGJ1Zi5nZXRVaW50MzIoYnVmLmN1cnJlbnRSZWFkT2Zmc2V0KCkpXG4gICAgaWYgKHJlbSA8IG1lc3NhZ2VMZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVhZEhlYWRlcihidWY6IEJ5dGVCdWZmZXIpOiBIZWFkZXIgfCBudWxsIHtcbiAgICBpZiAoIXZhbGlkYXRlKGJ1ZikpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aDogYnVmLnJlYWRVaW50MzIoKSxcbiAgICAgIHR5cGU6IGJ1Zi5yZWFkVWludDMyKCkgYXMgRW51bVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXaXJlTWVzc2FnZVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2VuZ2luZS9jb21wb25lbnQnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL0J5dGVCdWZmZXInXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vd2lyZU1lc3NhZ2UnXG5cbmV4cG9ydCBuYW1lc3BhY2UgUHV0Q29tcG9uZW50T3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBlbnRpdHkgLSBVaW50MzIgbnVtYmVyIG9mIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIGNvbXBvbmVudElkIC0gVWludDMyIG51bWJlciBvZiBpZFxuICAgKiBAcGFyYW0gdGltZXN0YW1wIC0gVWludDY0IExhbXBvcnQgdGltZXN0YW1wXG4gICAqIEBwYXJhbSBkYXRhIC0gVWludDhbXSBkYXRhIG9mIGNvbXBvbmVudFxuICAgKi9cbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHtcbiAgICBlbnRpdHk6IEVudGl0eVxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgICB0aW1lc3RhbXA6IG51bWJlclxuICAgIGRhdGE6IFVpbnQ4QXJyYXlcbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBNRVNTQUdFX0hFQURFUl9MRU5HVEggPSAyMFxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBhbiBvcHRpbWFsIHdyaXRpbmcgZGF0YSBwYXNzaW5nIHRoZSBCeXRlQnVmZmVyXG4gICAqICBhbHJlYWR5IGFsbG9jYXRlZFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHdyaXRlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIGNvbXBvbmVudERlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb24sXG4gICAgYnVmOiBCeXRlQnVmZmVyXG4gICkge1xuICAgIC8vIHJlc2VydmUgdGhlIGJlZ2lubmluZ1xuICAgIGNvbnN0IHN0YXJ0TWVzc2FnZU9mZnNldCA9IGJ1Zi5pbmNyZW1lbnRXcml0ZU9mZnNldChcbiAgICAgIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEggKyBNRVNTQUdFX0hFQURFUl9MRU5HVEhcbiAgICApXG5cbiAgICAvLyB3cml0ZSBib2R5XG4gICAgY29tcG9uZW50RGVmaW5pdGlvbi53cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHksIGJ1ZilcbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gYnVmLnNpemUoKSAtIHN0YXJ0TWVzc2FnZU9mZnNldFxuXG4gICAgLy8gV3JpdGUgV2lyZU1lc3NhZ2UgaGVhZGVyXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQsIG1lc3NhZ2VMZW5ndGgpXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyA0LCBXaXJlTWVzc2FnZS5FbnVtLlBVVF9DT01QT05FTlQpXG5cbiAgICAvLyBXcml0ZSBDb21wb25lbnRPcGVyYXRpb24gaGVhZGVyXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyA4LCBlbnRpdHkpXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyAxMiwgY29tcG9uZW50RGVmaW5pdGlvbi5faWQpXG4gICAgYnVmLnNldFVpbnQ2NChzdGFydE1lc3NhZ2VPZmZzZXQgKyAxNiwgQmlnSW50KHRpbWVzdGFtcCkpXG4gICAgYnVmLnNldFVpbnQzMihcbiAgICAgIHN0YXJ0TWVzc2FnZU9mZnNldCArIDI0LFxuICAgICAgbWVzc2FnZUxlbmd0aCAtIE1FU1NBR0VfSEVBREVSX0xFTkdUSCAtIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEhcbiAgICApXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVhZChidWY6IEJ5dGVCdWZmZXIpOiAoV2lyZU1lc3NhZ2UuSGVhZGVyICYgVHlwZSkgfCBudWxsIHtcbiAgICBjb25zdCBoZWFkZXIgPSBXaXJlTWVzc2FnZS5yZWFkSGVhZGVyKGJ1ZilcblxuICAgIGlmICghaGVhZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5oZWFkZXIsXG4gICAgICBlbnRpdHk6IGJ1Zi5yZWFkVWludDMyKCkgYXMgRW50aXR5LFxuICAgICAgY29tcG9uZW50SWQ6IGJ1Zi5yZWFkSW50MzIoKSxcbiAgICAgIHRpbWVzdGFtcDogTnVtYmVyKGJ1Zi5yZWFkVWludDY0KCkpLFxuICAgICAgZGF0YTogYnVmLnJlYWRCdWZmZXIoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgVHJhbnNwb3J0TWVzc2FnZSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIFRyYW5zcG9ydCA9IHtcbiAgdHlwZTogc3RyaW5nXG4gIHNlbmQobWVzc2FnZTogVWludDhBcnJheSk6IHZvaWRcbiAgb25tZXNzYWdlPyhtZXNzYWdlOiBVaW50OEFycmF5KTogdm9pZFxuICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSk6IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gbmV0d29ya1RyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAvLyBjb25zdCBycGMgPSBuZXcgUnBjVHJhbnNwb3J0KClcbiAgY29uc3QgcnBjID0ge1xuICAgIHNlbmQ6ICgpID0+IHt9XG4gIH1cblxuICBjb25zdCB0eXBlID0gJ25ldHdvcmstdHJhbnNwb3J0J1xuICByZXR1cm4ge1xuICAgIC4uLnJwYyxcbiAgICB0eXBlLFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFtZXNzYWdlIC8vIHZhbGlkQ29tcG9uZW50cy5pbmNsdWRlcyhjb21wb25lbnRJZClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zcG9ydHMoKSB7XG4gIHJldHVybiBbbmV0d29ya1RyYW5zcG9ydCgpXVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2VuZ2luZS9jb21wb25lbnQnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuXG5leHBvcnQgbmFtZXNwYWNlIENyZHRVdGlscyB7XG4gIGV4cG9ydCB0eXBlIENvbXBvbmVudElEID0gQ29tcG9uZW50RGVmaW5pdGlvblsnX2lkJ11cblxuICAvLyBUT0RPOiB1c2UgdGhpcyBhZ2FpblxuICAvLyBleHBvcnQgZnVuY3Rpb24gcGFyc2VLZXkoa2V5OiBzdHJpbmcpOiBbRW50aXR5LCBDb21wb25lbnRJRF0ge1xuICAvLyAgIGNvbnN0IFtlbnRpdHksIGNvbXBvbmVudElkXSA9IGtleS5zcGxpdCgnLicpLm1hcChOdW1iZXIpIGFzIFtcbiAgLy8gICAgIEVudGl0eSxcbiAgLy8gICAgIENvbXBvbmVudElEXG4gIC8vICAgXVxuICAvLyAgIHJldHVybiBbZW50aXR5LCBjb21wb25lbnRJZF1cbiAgLy8gfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZW50aXR5OiBFbnRpdHksIGNvbXBvbmVudElkOiBDb21wb25lbnRJRCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2VudGl0eX0uJHtjb21wb25lbnRJZH1gXG4gIH1cblxuICBleHBvcnQgZW51bSBTeW5jaHJvbml6ZWRFbnRpdHlUeXBlIHtcbiAgICAvLyBzeW5jaHJvbml6ZXMgZW50aXRpZXMgd2l0aCB0aGUgTmV0d29ya1N5bmNocm9uaXplZCBjb21wb25lbnQgb25seSwgdXNlZCBmb3IgbmV0d29ya2VkIGdhbWVzXG4gICAgTkVUV09SS0VELFxuICAgIC8vIHN5bmNocm9uaXplcyBlbnRpdGllcyBuZWVkZWQgYnkgdGhlIHJlbmRlcmVyXG4gICAgUkVOREVSRVJcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcmR0VXRpbHNcblxuLy8gVE9ETzogbmV4dCB2ZXJzaW9uIHNwbGl0IGJldHdlZW4gZGlmZiB0eXBlcyBvZiB0cmFuc3BvcnRzL2NyZHRzLlxuLy8gMS4gZW5naW5lLnJlY2VpdmVNZXNzYWdlKHJhd01lc3NhZ2UgXCJkaWZmXCIpXG4vLyAyLiBlbmdpbmUgY2hlY2tzIENSRFQgXCJmaWx0ZXJcIlxuLy8gICAyLjEuIElmIHBhc3MsIHRoZW4gYXBwbHkgQ1JEVCBtZXNzYWdlIHRvIGludGVybmFsIGNhY2hlXG4vLyAgIDIuMi4gVXBkYXRlIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBcInBhdGNoXCIgKHVzaW5nIHJhd01lc3NhZ2UgZGF0YSAmIGNyZWF0ZWQgY29tcG9uZW50cylcbi8vICAgMi4zLiBFeGVjdXRlIG9uVXBkYXRlIGNhbGxiYWNrcyBcImVtaXRcIlxuXG4vLyBlbmdpbmUub25VcGRhdGUoKHJhd01lc3NhZ2UpID0+IHtcbi8vICAgcmF3TWVzc2FnZSAvLyB7IGVudGl0eV9pZCwgZGF0YSwgY29tLCB0aW1lfVxuLy8gICBpZiAoY29tcG9uZW50Lm1ldGEuc3luY0ZsYWdzICYgU3luY2hyb25pemVkRW50aXR5VHlwZS5BTEwgfHwgY29tcG9uZW50Lm1ldGEuc3luY0ZsYWdzICYgU3luY2hyb25pemVkRW50aXR5VHlwZS5SRU5ERVJFUikge1xuLy8gICAgIFNFTkRUT1JFTkRFUkVSKClcbi8vICAgfVxuLy8gfSlcblxuLy8gYXN5bmMgZnVuY3Rpb24gc2VuZFVwZGF0ZXMobWVzc2FnZTogY3JkdC5NZXNzYWdlKSB7XG4vLyAgIHJldHVyblxuLy8gfVxuXG4vLyBmdW5jdGlvbiByZW5kZXJlclN0cmVhbSgpIHtcbi8vICAgY29uc3QgY29tcG9uZW50SWRzID0gZ2V0Q29tcG9uZW50SWRzKClcblxuLy8gICBmdW5jdGlvbiBmaWx0ZXIoY29tcG9uZW50SWQ6IG51bWJlcikge1xuLy8gICAgIHJldHVybiBjb21wb25lbnRJZHMuaW5jbHVkZXMoY29tcG9uZW50SWQpXG4vLyAgIH1cblxuLy8gICBmdW5jdGlvbiBzZW5kKCkge1xuLy8gICAgIGNvbnNvbGUubG9nKCdzZW5kJylcbi8vICAgfVxuXG4vLyAgIHJldHVybiB7IGZpbHRlciwgc2VuZCB9XG4vLyB9XG5cbi8vIGZ1bmN0aW9uIHNjZW5lU3RyZWFtKCkge1xuLy8gICBmdW5jdGlvbiBmaWx0ZXIoY29tcG9uZW50SWQ6IG51bWJlcikge31cbi8vIH1cbiIsImltcG9ydCB7IGNyZHRQcm90b2NvbCwgTWVzc2FnZSBhcyBDcmR0TWVzc2FnZSB9IGZyb20gJ0BkY2wvY3JkdCdcblxuaW1wb3J0IHR5cGUgeyBQcmVFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmUnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuaW1wb3J0IEVudGl0eVV0aWxzIGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHktdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUHV0Q29tcG9uZW50T3BlcmF0aW9uIGFzIE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL2NyZHQvY29tcG9uZW50T3BlcmF0aW9uJ1xuaW1wb3J0IFdpcmVNZXNzYWdlIGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vd2lyZU1lc3NhZ2UnXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRzLCBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydCdcbmltcG9ydCB7IFJlY2VpdmVNZXNzYWdlLCBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBDcmR0VXRpbHMgZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZHRTY2VuZVN5c3RlbSh7XG4gIGVuZ2luZSxcbiAgYXZhaWxhYmxlVHJhbnNwb3J0c1xufToge1xuICBlbmdpbmU6IFByZUVuZ2luZVxuICBhdmFpbGFibGVUcmFuc3BvcnRzPzogVHJhbnNwb3J0W11cbn0pIHtcbiAgLy8gQ1JEVCBDbGllbnRcbiAgY29uc3QgY3JkdENsaWVudCA9IGNyZHRQcm90b2NvbDxVaW50OEFycmF5PigpXG4gIC8vIE1lc3NhZ2VzIHRoYXQgd2UgcmVjZWl2ZWQgYXQgdHJhbnNwb3J0Lm9uTWVzc2FnZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZFxuICBjb25zdCByZWNlaXZlZE1lc3NhZ2VzOiBSZWNlaXZlTWVzc2FnZVtdID0gW11cbiAgLy8gTWVzc2FnZXMgYWxyZWFkeSBwcm9jZXNzZWQgYnkgdGhlIGVuZ2luZSBidXQgdGhhdCB3ZSBuZWVkIHRvIGJyb2FkY2FzdCB0byBvdGhlciB0cmFuc3BvcnRzLlxuICBjb25zdCB0cmFuc3BvcnRNZXNzYWdlczogVHJhbnNwb3J0TWVzc2FnZVtdID0gW11cbiAgLy8gTWFwIG9mIGVudGl0aWVzIGFscmVhZHkgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uY2VcbiAgY29uc3QgY3JkdEVudGl0aWVzID0gbmV3IE1hcDxFbnRpdHksIGJvb2xlYW4+KClcblxuICBjb25zdCB0cmFuc3BvcnRzID0gWy4uLmdldFRyYW5zcG9ydHMoKSwgLi4uKGF2YWlsYWJsZVRyYW5zcG9ydHMgfHwgW10pXVxuICB0cmFuc3BvcnRzLmZvckVhY2goXG4gICAgKHRyYW5zcG9ydCkgPT4gKHRyYW5zcG9ydC5vbm1lc3NhZ2UgPSBwYXJzZUNodW5rTWVzc2FnZSh0cmFuc3BvcnQudHlwZSkpXG4gIClcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydFR5cGUgdHJhbnBvcnQgaWQgdG8gaWRlbnRpeSBtZXNzYWdlc1xuICAgKiBAcmV0dXJucyBhIGZ1bmN0aW9uIHRvIHByb2Nlc3MgcmVjZWl2ZWQgbWVzc2FnZXNcbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydFR5cGU6IHN0cmluZykge1xuICAgIC8qKlxuICAgICAqIFJlY2VpdmVzIGEgY2h1bmsgb2YgYmluYXJ5IG1lc3NhZ2VzIGFuZCBzdG9yZXMgYWxsIHRoZSB2YWxpZFxuICAgICAqIENvbXBvbmVudCBPcGVyYXRpb24gTWVzc2FnZXMgYXQgbWVzc2FnZXMgcXVldWVcbiAgICAgKiBAcGFyYW0gY2h1bmtNZXNzYWdlIEEgY2h1bmsgb2YgYmluYXJ5IG1lc3NhZ2VzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhcnNlQ2h1bmtNZXNzYWdlKGNodW5rTWVzc2FnZTogVWludDhBcnJheSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcih7XG4gICAgICAgIHJlYWRpbmc6IHsgYnVmZmVyOiBjaHVua01lc3NhZ2UsIGN1cnJlbnRPZmZzZXQ6IDAgfVxuICAgICAgfSlcblxuICAgICAgd2hpbGUgKFdpcmVNZXNzYWdlLnZhbGlkYXRlKGJ1ZmZlcikpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYnVmZmVyLmN1cnJlbnRSZWFkT2Zmc2V0KClcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UucmVhZChidWZmZXIpIVxuXG4gICAgICAgIGNvbnN0IHsgZW50aXR5LCBjb21wb25lbnRJZCwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlXG4gICAgICAgIHJlY2VpdmVkTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICAgIHRyYW5zcG9ydFR5cGUsXG4gICAgICAgICAgbWVzc2FnZUJ1ZmZlcjogYnVmZmVyXG4gICAgICAgICAgICAuYnVmZmVyKClcbiAgICAgICAgICAgIC5zdWJhcnJheShvZmZzZXQsIGJ1ZmZlci5jdXJyZW50UmVhZE9mZnNldCgpKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW5kIGNsZWFyIHRoZSBtZXNzYWVzIHF1ZXVlXG4gICAqIEByZXR1cm5zIG1lc3NhZ2VzIHJlY2lldmVkIGJ5IHRoZSB0cmFuc3BvcnQgdG8gcHJvY2VzcyBvbiB0aGUgbmV4dCB0aWNrXG4gICAqL1xuICBmdW5jdGlvbiBnZXRNZXNzYWdlczxUID0gdW5rbm93bj4odmFsdWU6IFRbXSkge1xuICAgIGNvbnN0IG1lc3NhZ2VzVG9Qcm9jZXNzID0gQXJyYXkuZnJvbSh2YWx1ZSlcbiAgICB2YWx1ZS5sZW5ndGggPSAwXG4gICAgcmV0dXJuIG1lc3NhZ2VzVG9Qcm9jZXNzXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmbiB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSB0aWNrLlxuICAgKiBQcm9jZXNzIGFsbCB0aGUgbWVzc2FnZXMgcXVldWUgcmVjZWl2ZWQgYnkgdGhlIHRyYW5zcG9ydFxuICAgKi9cbiAgZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VzVG9Qcm9jZXNzID0gZ2V0TWVzc2FnZXMocmVjZWl2ZWRNZXNzYWdlcylcbiAgICBmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0cmFuc3BvcnRzKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlc1RvUHJvY2Vzcykge1xuICAgICAgICBjb25zdCB7IGRhdGEsIHRpbWVzdGFtcCwgY29tcG9uZW50SWQsIGVudGl0eSB9ID0gbWVzc2FnZVxuICAgICAgICBjb25zdCBjcmR0TWVzc2FnZTogQ3JkdE1lc3NhZ2U8VWludDhBcnJheT4gPSB7XG4gICAgICAgICAga2V5OiBDcmR0VXRpbHMuZ2V0S2V5KGVudGl0eSwgY29tcG9uZW50SWQpLFxuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBjdXJyZW50TWVzc2FnZSA9IGNyZHRDbGllbnQucHJvY2Vzc01lc3NhZ2UoY3JkdE1lc3NhZ2UpXG5cbiAgICAgICAgLy8gQ1JEVCBvdXRkYXRlZCBtZXNzYWdlLiBSZXNlbmQgdGhpcyBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmVcbiAgICAgICAgLy8gVE9ETzogcGVyZiB0cmFuc2FjdG9yXG4gICAgICAgIGlmIChjcmR0TWVzc2FnZSAhPT0gY3VycmVudE1lc3NhZ2UpIHtcbiAgICAgICAgICAvLyBDUkRUIG91dGRhdGVkIG1lc3NhZ2UuIFJlc2VuZCB0aGlzIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZVxuICAgICAgICAgIE1lc3NhZ2Uud3JpdGUoZW50aXR5LCBjdXJyZW50TWVzc2FnZS50aW1lc3RhbXAsIGNvbXBvbmVudCwgYnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9wdHMgPSB7IHJlYWRpbmc6IHsgYnVmZmVyOiBtZXNzYWdlLmRhdGEsIGN1cnJlbnRPZmZzZXQ6IDAgfSB9XG4gICAgICAgICAgY29uc3QgYmIgPSBjcmVhdGVCeXRlQnVmZmVyKG9wdHMpXG5cbiAgICAgICAgICAvLyBVcGRhdGUgZW5naW5lIGNvbXBvbmVudFxuICAgICAgICAgIGNvbXBvbmVudC51cHNlcnRGcm9tQmluYXJ5KG1lc3NhZ2UuZW50aXR5LCBiYilcbiAgICAgICAgICBjb21wb25lbnQuY2xlYXJEaXJ0eSgpXG5cbiAgICAgICAgICAvLyBBZGQgbWVzc2FnZSB0byB0cmFuc3BvcnQgcXVldWUgdG8gYmUgcHJvY2Vzc2VkIGJ5IG90aGVycyB0cmFuc3BvcnRzXG4gICAgICAgICAgdHJhbnNwb3J0TWVzc2FnZXMucHVzaChtZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChidWZmZXIuc2l6ZSgpKSB7XG4gICAgICAgIHRyYW5zcG9ydC5zZW5kKGJ1ZmZlci50b0JpbmFyeSgpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyB0aGUgZGlydHkgbWFwIGFuZCBnZW5lcmF0ZXMgY3JkdCBtZXNzYWdlcyB0byBiZSBzZW5kXG4gICAqIEBwYXJhbSBkaXJ0eU1hcCBhIG1hcCBvZiB7IGVudGl0aWVzOiBbY29tcG9uZW50SWRdIH1cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZU1lc3NhZ2VzKGRpcnR5TWFwOiBNYXA8RW50aXR5LCBTZXQ8bnVtYmVyPj4pIHtcbiAgICAvLyBDUkRUIE1lc3NhZ2VzIHdpbGwgYmUgdGhlIG1lcmdlIGJldHdlZW4gdGhlIHJlY2lldmVkIHRyYW5zcG9ydCBtZXNzYWdlcyBhbmQgdGhlIG5ldyBjcmR0IG1lc3NhZ2VzXG4gICAgY29uc3QgY3JkdE1lc3NhZ2VzID0gZ2V0TWVzc2FnZXModHJhbnNwb3J0TWVzc2FnZXMpXG4gICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGNvbXBvbmVudHNJZF0gb2YgZGlydHlNYXApIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50SWQgb2YgY29tcG9uZW50c0lkKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGVuZ2luZS5nZXRDb21wb25lbnQoY29tcG9uZW50SWQpXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gY3JkdENsaWVudC5jcmVhdGVFdmVudChcbiAgICAgICAgICBDcmR0VXRpbHMuZ2V0S2V5KGVudGl0eSwgY29tcG9uZW50SWQpLFxuICAgICAgICAgIGNvbXBvbmVudC50b0JpbmFyeShlbnRpdHkpLnRvQmluYXJ5KClcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcblxuICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBtZXNzYWdlcyBmb3IgdGhlIHN0YXRpYyBlbnRpdGllcyB0aGUgZmlyc3QgdGltZSB0aGV5IGFyZSBjcmVhdGVkXG4gICAgICAgIC8vIFRoZXkgYXJlIHBhcnQgb2YgdGhlIHNjZW5lIGxvYWRpbmcuIFNlbmQgb25seSB1cGRhdGVzLlxuICAgICAgICBpZiAoIUVudGl0eVV0aWxzLmlzU3RhdGljRW50aXR5KGVudGl0eSkgfHwgY3JkdEVudGl0aWVzLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgICAgTWVzc2FnZS53cml0ZShlbnRpdHksIGV2ZW50LnRpbWVzdGFtcCwgY29tcG9uZW50LCBidWZmZXIpXG4gICAgICAgICAgY3JkdE1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgICAuYnVmZmVyKClcbiAgICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNyZHRFbnRpdGllcy5zZXQoZW50aXR5LCB0cnVlKVxuICAgIH1cblxuICAgIC8vIFNlbmQgbWVzc2FnZXMgdG8gdHJhbnNwb3J0c1xuICAgIGNvbnN0IHRyYW5zcG9ydEJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgIGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHtcbiAgICAgIHRyYW5zcG9ydEJ1ZmZlci5yZXNldEJ1ZmZlcigpXG4gICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgY3JkdE1lc3NhZ2VzKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnQuZmlsdGVyKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdHJhbnNwb3J0QnVmZmVyLndyaXRlQnVmZmVyKG1lc3NhZ2UubWVzc2FnZUJ1ZmZlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc3BvcnRCdWZmZXIuc2l6ZSgpKSB7XG4gICAgICAgIHRyYW5zcG9ydC5zZW5kKHRyYW5zcG9ydEJ1ZmZlci50b0JpbmFyeSgpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlTWVzc2FnZXMsXG4gICAgcmVjZWl2ZU1lc3NhZ2VzXG4gIH1cbn1cbiIsImltcG9ydCB7IEVudGl0eVV0aWxzIH0gZnJvbSAnLi9lbnRpdHktdXRpbHMnXG5cbmRlY2xhcmUgY29uc3QgZW50aXR5U3ltYm9sOiB1bmlxdWUgc3ltYm9sXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5ID0gbnVtYmVyICYgeyBbZW50aXR5U3ltYm9sXTogdHJ1ZSB9XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlDb250YWluZXIoKSB7XG4gIGNvbnN0IHN0YXRpY0VudGl0eSA9IEVudGl0eSgpXG4gIGNvbnN0IGR5bmFtaWNFbnRpdHkgPSBFbnRpdHkodHJ1ZSlcbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZUVudGl0eShkeW5hbWljOiBib29sZWFuID0gZmFsc2UpOiBFbnRpdHkge1xuICAgICAgaWYgKGR5bmFtaWMpIHJldHVybiBkeW5hbWljRW50aXR5LmdlbmVyYXRlRW50aXR5KClcbiAgICAgIHJldHVybiBzdGF0aWNFbnRpdHkuZ2VuZXJhdGVFbnRpdHkoKVxuICAgIH0sXG4gICAgcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KTogdm9pZCB7XG4gICAgICBzdGF0aWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgICAgIGR5bmFtaWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgICB9LFxuICAgIGdldFVudXNlZEVudGl0aWVzKCk6IFNldDxFbnRpdHk+IHtcbiAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgLi4uc3RhdGljRW50aXR5LmdldFVudXNlZEVudGl0aWVzKCksXG4gICAgICAgIC4uLmR5bmFtaWNFbnRpdHkuZ2V0VW51c2VkRW50aXRpZXMoKVxuICAgICAgXSlcbiAgICB9LFxuICAgIGdldFVzZWRFbnRpdGllcygpOiBTZXQ8RW50aXR5PiB7XG4gICAgICByZXR1cm4gbmV3IFNldChbXG4gICAgICAgIC4uLnN0YXRpY0VudGl0eS5nZXRVc2VkRW50aXRpZXMoKSxcbiAgICAgICAgLi4uZHluYW1pY0VudGl0eS5nZXRVc2VkRW50aXRpZXMoKVxuICAgICAgXSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gRW50aXR5KHdpdGhPZmZzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICBmdW5jdGlvbiBjcmVhdGVFbnRpdHkoZW50aXR5OiBudW1iZXIpOiBFbnRpdHkge1xuICAgIHJldHVybiBlbnRpdHkgYXMgRW50aXR5XG4gIH1cblxuICAvLyBUT0RPOiBnZXRvZmZzZXQgZnJvbSBhIHNlcnZlcj9cbiAgY29uc3Qgb2Zmc2V0ID0gd2l0aE9mZnNldCA/IEVudGl0eVV0aWxzLmdldE9mZnNldCgpIDogMFxuICBjb25zdCB1c2VkRW50aXRpZXM6IFNldDxFbnRpdHk+ID0gbmV3IFNldCgpXG4gIGNvbnN0IHVudXNlZEVudGl0aWVzOiBTZXQ8RW50aXR5PiA9IG5ldyBTZXQoKVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlRW50aXR5KCk6IEVudGl0eSB7XG4gICAgaWYgKCF1bnVzZWRFbnRpdGllcy5zaXplICYmICF1c2VkRW50aXRpZXMuc2l6ZSkge1xuICAgICAgY29uc3QgZW50aXR5ID0gY3JlYXRlRW50aXR5KG9mZnNldClcbiAgICAgIHVzZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGVudGl0eVxuICAgIH1cblxuICAgIC8vIFRPRE86IHdoYXQgaGFwcGVucyBpZiB3ZSBkZWxldGUgYW4gZW50aXR5XG4gICAgLy8gYW5kIGNyZWF0ZXMgYSBuZXcgb25lIGluIHRoZSBzYW1lIHRpY2tcbiAgICBjb25zdCBpdGVyYXRvciA9IHVudXNlZEVudGl0aWVzW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KClcbiAgICBpZiAoaXRlcmF0b3IuZG9uZSkge1xuICAgICAgY29uc3QgZW50aXR5ID0gY3JlYXRlRW50aXR5KE1hdGgubWF4KC4uLnVzZWRFbnRpdGllcy52YWx1ZXMoKSkgKyAxKVxuICAgICAgaWYgKGVudGl0eSA+PSBFbnRpdHlVdGlscy5NQVhfRU5USVRJRVMgKyBvZmZzZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRpdHkgcmF0ZSBsaW1pdCBleGNlZWQnKVxuICAgICAgfVxuICAgICAgdXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gZW50aXR5XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gaXRlcmF0b3IudmFsdWVcbiAgICB1bnVzZWRFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICAgIHVzZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgaWYgKCF1c2VkRW50aXRpZXMuaGFzKGVudGl0eSkpIHJldHVyblxuICAgIHVzZWRFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICAgIHVudXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdldFVudXNlZEVudGl0aWVzKCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodW51c2VkRW50aXRpZXMpXG4gICAgfSxcbiAgICBnZXRVc2VkRW50aXRpZXMoKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh1c2VkRW50aXRpZXMpXG4gICAgfSxcbiAgICBnZW5lcmF0ZUVudGl0eSxcbiAgICByZW1vdmVFbnRpdHlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBEZWVwUmVhZG9ubHkgfSBmcm9tICcuLi9NYXRoJ1xuZXhwb3J0IHR5cGUgeyBEZWVwUmVhZG9ubHkgfVxuXG4vLyBUT0RPOiBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGluIHNjZW5lIGVudlxuLy8gY29uc3QgaXNQcm9kID0gKCkgPT4gZmFsc2Vcbi8vIGNvbnN0IGlzUHJvZCA9ICgpID0+ICEhcHJvY2Vzcy5lbnYuUFJPRFVDVElPTiB8fCBmYWxzZVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcFJlYWRvbmx5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHZhbDogVFxuKTogRGVlcFJlYWRvbmx5PFQ+IHtcbiAgLy8gRmFpbCBvbmx5IG9uIGRldmVsb3BtZW50IGR1ZSB0byBwZXJmIGlzc3Vlc1xuICAvLyBpZiAoaXNQcm9kKCkpIHtcbiAgLy8gICByZXR1cm4gdmFsXG4gIC8vIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnZhbCB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RVbmRlZmluZWQ8VD4odmFsOiBUIHwgdW5kZWZpbmVkKTogdmFsIGlzIFQge1xuICByZXR1cm4gISF2YWxcbn1cbiIsImltcG9ydCB0eXBlIHsgRWNzVHlwZSB9IGZyb20gJy4uL2J1aWx0LWluLXR5cGVzL0Vjc1R5cGUnXG5pbXBvcnQgeyBCeXRlQnVmZmVyLCBjcmVhdGVCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5pbXBvcnQgeyBkZWVwUmVhZG9ubHksIERlZXBSZWFkb25seSB9IGZyb20gJy4vdXRpbHMnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFY3NSZXN1bHQ8VCBleHRlbmRzIEVjc1R5cGU+ID0gVCBleHRlbmRzIEVjc1R5cGVcbiAgPyBSZXR1cm5UeXBlPFRbJ2Rlc2VyaWFsaXplJ10+XG4gIDogbmV2ZXJcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudFR5cGU8VCBleHRlbmRzIEVjc1R5cGU+ID0gRWNzUmVzdWx0PFQ+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDb21wb25lbnREZWZpbml0aW9uPFQgZXh0ZW5kcyBFY3NUeXBlID0gRWNzVHlwZTxhbnk+PiA9IHtcbiAgX2lkOiBudW1iZXJcbiAgaGFzKGVudGl0eTogRW50aXR5KTogYm9vbGVhblxuICBnZXRGcm9tKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+XG5cbiAgZ2V0T3JOdWxsKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHwgbnVsbFxuXG4gIC8vIGFkZHMgdGhpcyBjb21wb25lbnQgdG8gdGhlIGxpc3QgXCJ0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXCJcbiAgY3JlYXRlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb21wb25lbnRUeXBlPFQ+KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8vIGFkZHMgdGhpcyBjb21wb25lbnQgdG8gdGhlIGxpc3QgXCJ0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXCJcbiAgbXV0YWJsZShlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD5cbiAgY3JlYXRlT3JSZXBsYWNlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb21wb25lbnRUeXBlPFQ+KTogQ29tcG9uZW50VHlwZTxUPlxuICBkZWxldGVGcm9tKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcblxuICB1cHNlcnRGcm9tQmluYXJ5KGVudGl0eTogRW50aXR5LCBkYXRhOiBCeXRlQnVmZmVyKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcbiAgdXBkYXRlRnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG4gIC8vIGFsbG9jYXRlcyBhIGJ1ZmZlciBhbmQgcmV0dXJucyBuZXcgYnVmZmVyXG4gIHRvQmluYXJ5KGVudGl0eTogRW50aXR5KTogQnl0ZUJ1ZmZlclxuICAvLyB3cml0ZXMgdG8gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlclxuICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZFxuXG4gIGl0ZXJhdG9yKCk6IEl0ZXJhYmxlPFtFbnRpdHksIENvbXBvbmVudFR5cGU8VD5dPlxuXG4gIC8vIERpcnR5XG4gIGRpcnR5SXRlcmF0b3IoKTogSXRlcmFibGU8RW50aXR5PlxuICBjbGVhckRpcnR5KCk6IHZvaWRcbiAgaXNEaXJ0eShlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudDxUIGV4dGVuZHMgRWNzVHlwZT4oXG4gIGNvbXBvbmVudElkOiBudW1iZXIsXG4gIHNwZWM6IFRcbiAgLy8gbWV0YTogeyBzeW5jRmxhZ3MgfVxuKTogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiB7XG4gIGNvbnN0IGRhdGEgPSBuZXcgTWFwPEVudGl0eSwgQ29tcG9uZW50VHlwZTxUPj4oKVxuICBjb25zdCBkaXJ0eUl0ZXJhdG9yID0gbmV3IFNldDxFbnRpdHk+KClcblxuICByZXR1cm4ge1xuICAgIF9pZDogY29tcG9uZW50SWQsXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZGlydHlJdGVyYXRvci5oYXMoZW50aXR5KVxuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkYXRhLmhhcyhlbnRpdHkpXG4gICAgfSxcbiAgICBkZWxldGVGcm9tOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBkYXRhLmRlbGV0ZShlbnRpdHkpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50IHx8IG51bGxcbiAgICB9LFxuICAgIGdldE9yTnVsbDogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHlcbiAgICApOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnQgPyBkZWVwUmVhZG9ubHkoY29tcG9uZW50KSA6IG51bGxcbiAgICB9LFxuICAgIGdldEZyb206IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtnZXRGcm9tXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWVwUmVhZG9ubHkoY29tcG9uZW50KVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIHZhbHVlPzogQ29tcG9uZW50VHlwZTxUPlxuICAgICk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtjcmVhdGVdIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IGFscmVhZHkgZXhpc3RzYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjb25zdCB1c2VkVmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gc3BlYy5jcmVhdGUoKSA6IHZhbHVlXG4gICAgICBkYXRhLnNldChlbnRpdHksIHVzZWRWYWx1ZSlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiB1c2VkVmFsdWVcbiAgICB9LFxuICAgIGNyZWF0ZU9yUmVwbGFjZTogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICB2YWx1ZT86IENvbXBvbmVudFR5cGU8VD5cbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBzcGVjLmNyZWF0ZSgpIDogdmFsdWVcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlISlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiB1c2VkVmFsdWUhXG4gICAgfSxcbiAgICBtdXRhYmxlOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW211dGFibGVdIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgIH0sXG4gICAgaXRlcmF0b3I6IGZ1bmN0aW9uKiAoKTogSXRlcmFibGU8W0VudGl0eSwgQ29tcG9uZW50VHlwZTxUPl0+IHtcbiAgICAgIGZvciAoY29uc3QgW2VudGl0eSwgY29tcG9uZW50XSBvZiBkYXRhKSB7XG4gICAgICAgIHlpZWxkIFtlbnRpdHksIGNvbXBvbmVudF1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRpcnR5SXRlcmF0b3I6IGZ1bmN0aW9uKiAoKTogSXRlcmFibGU8RW50aXR5PiB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBkaXJ0eUl0ZXJhdG9yKSB7XG4gICAgICAgIHlpZWxkIGVudGl0eVxuICAgICAgfVxuICAgIH0sXG4gICAgdG9CaW5hcnkoZW50aXR5OiBFbnRpdHkpOiBCeXRlQnVmZmVyIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JpdGVCdWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICAgIHNwZWMuc2VyaWFsaXplKGNvbXBvbmVudCwgd3JpdGVCdWZmZXIpXG4gICAgICByZXR1cm4gd3JpdGVCdWZmZXJcbiAgICB9LFxuICAgIHdyaXRlVG9CeXRlQnVmZmVyKGVudGl0eTogRW50aXR5LCBidWZmZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3RvQmluYXJ5XSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgc3BlYy5zZXJpYWxpemUoY29tcG9uZW50LCBidWZmZXIpXG4gICAgfSxcbiAgICB1cGRhdGVGcm9tQmluYXJ5KFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICBidWZmZXI6IEJ5dGVCdWZmZXJcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt1cGRhdGVGcm9tQmluYXJ5XSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnVwc2VydEZyb21CaW5hcnkoZW50aXR5LCBidWZmZXIpXG4gICAgfSxcbiAgICB1cHNlcnRGcm9tQmluYXJ5KFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICBidWZmZXI6IEJ5dGVCdWZmZXJcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHNwZWMuZGVzZXJpYWxpemUoYnVmZmVyKVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCBuZXdWYWx1ZSlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBuZXdWYWx1ZVxuICAgIH0sXG4gICAgY2xlYXJEaXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgZGlydHlJdGVyYXRvci5jbGVhcigpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBkZWZpbmVTZGtDb21wb25lbnRzLCBTZGtDb21wb25lbnRzIH0gZnJvbSAnLi4vY29tcG9uZW50cydcbmltcG9ydCB7IGNyZHRTY2VuZVN5c3RlbSB9IGZyb20gJy4uL3N5c3RlbXMvY3JkdCdcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5Q29udGFpbmVyIH0gZnJvbSAnLi9lbnRpdHknXG5pbXBvcnQge1xuICBDb21wb25lbnRUeXBlLFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBkZWZpbmVDb21wb25lbnQgYXMgZGVmQ29tcG9uZW50XG59IGZyb20gJy4vY29tcG9uZW50J1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRFY3NUeXBlLCBVcGRhdGUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEZWVwUmVhZG9ubHkgfSBmcm9tICcuLi9NYXRoJ1xuaW1wb3J0IHR5cGUgeyBFY3NUeXBlIH0gZnJvbSAnLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IElFbmdpbmUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4uL3N5c3RlbXMvY3JkdC90cmFuc3BvcnQnXG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudFR5cGUsXG4gIEVudGl0eSxcbiAgQnl0ZUJ1ZmZlcixcbiAgU2RrQ29tcG9uZW50cyBhcyBTZGtDb21wb25ldG5zLFxuICBDb21wb25lbnREZWZpbml0aW9uXG59XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuXG5mdW5jdGlvbiBwcmVFbmdpbmUoKSB7XG4gIGNvbnN0IGVudGl0eUNvbnRhaW5lciA9IEVudGl0eUNvbnRhaW5lcigpXG4gIGNvbnN0IGNvbXBvbmVudHNEZWZpbml0aW9uID0gbmV3IE1hcDxudW1iZXIsIENvbXBvbmVudERlZmluaXRpb248YW55Pj4oKVxuICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIG1ha2UgdGhpcyB3b3JrLlxuICAvLyBNYXliZSBhIHByb3h5L2NhbGxiYWNrIHRvIGJlIHVwLXRvLWRhdGVcbiAgY29uc3QgZW50aXRpZXNDb21wb25lbnQgPSBuZXcgTWFwPFxuICAgIG51bWJlcixcbiAgICBTZXQ8Q29tcG9uZW50RGVmaW5pdGlvbjxhbnk+WydfaWQnXT5cbiAgPigpXG4gIGNvbnN0IHN5c3RlbXMgPSBuZXcgU2V0PFVwZGF0ZT4oKVxuXG4gIGZ1bmN0aW9uIGFkZFN5c3RlbShmbjogVXBkYXRlKSB7XG4gICAgaWYgKHN5c3RlbXMuaGFzKGZuKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gYWxyZWFkeSBhZGRlZCcpXG4gICAgfVxuICAgIHN5c3RlbXMuYWRkKGZuKVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGVudGl0aWVzQ29tcG5vbmVudC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgY29uc3QgZW50aXR5ID0gZW50aXR5Q29udGFpbmVyLmdlbmVyYXRlRW50aXR5KGR5bmFtaWMpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRHluYW1pY0VudGl0eSgpIHtcbiAgICByZXR1cm4gYWRkRW50aXR5KHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICAvLyBUT0RPOiBSZW1vdmUgYWxsIHRoZSBjb21wb25lbnRzIG9mIHRoYXQgZW50aXR5XG4gICAgZm9yIChjb25zdCBbLCBjb21wb25lbnRdIG9mIGNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBpZiAoY29tcG9uZW50LmhhcyhlbnRpdHkpKSB7XG4gICAgICAgIGNvbXBvbmVudC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZW50aXRpZXNDb21wb25lbnQuZGVsZXRlKGVudGl0eSlcbiAgICByZXR1cm4gZW50aXR5Q29udGFpbmVyLnJlbW92ZUVudGl0eShlbnRpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBkZWZpbmVDb21wb25lbnQ8VCBleHRlbmRzIEVjc1R5cGU+KFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgc3BlYzogVFxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQ+IHtcbiAgICBpZiAoY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gYWxyZWFkeSBkZWNsYXJlZGApXG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbXBvbmVudCA9IGRlZkNvbXBvbmVudDxUPihjb21wb25lbnRJZCwgc3BlYylcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbi5zZXQoY29tcG9uZW50SWQsIG5ld0NvbXBvbmVudClcbiAgICByZXR1cm4gbmV3Q29tcG9uZW50XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb21wb25lbnQ8VCBleHRlbmRzIEVjc1R5cGU+KFxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKVxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb21wb25lbnQgbm90IGZvdW5kLiBZb3UgbmVlZCB0byBkZWNsYXJlIHRoZSBjb21wb25lbnRzIGF0IHRoZSBiZWdpbm5pZyBvZiB0aGUgZW5naW5lIGRlY2xhcmF0aW9uJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cblxuICBmdW5jdGlvbiogbXV0YWJsZUdyb3VwT2Y8XG4gICAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4gID4oLi4uY29tcG9uZW50czogVCk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLkNvbXBvbmVudEVjc1R5cGU8VD5dPiB7XG4gICAgZm9yIChjb25zdCBbZW50aXR5LCAuLi5ncm91cENvbXBdIG9mIGdldENvbXBvbmVudERlZkdyb3VwKC4uLmNvbXBvbmVudHMpKSB7XG4gICAgICB5aWVsZCBbZW50aXR5LCAuLi5ncm91cENvbXAubWFwKChjKSA9PiBjLm11dGFibGUoZW50aXR5KSldIGFzIFtcbiAgICAgICAgRW50aXR5LFxuICAgICAgICAuLi5Db21wb25lbnRFY3NUeXBlPFQ+XG4gICAgICBdXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24qIGdyb3VwT2Y8VCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dPihcbiAgICAuLi5jb21wb25lbnRzOiBUXG4gICk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLkRlZXBSZWFkb25seTxDb21wb25lbnRFY3NUeXBlPFQ+Pl0+IHtcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIC4uLmdyb3VwQ29tcF0gb2YgZ2V0Q29tcG9uZW50RGVmR3JvdXAoLi4uY29tcG9uZW50cykpIHtcbiAgICAgIHlpZWxkIFtlbnRpdHksIC4uLmdyb3VwQ29tcC5tYXAoKGMpID0+IGMuZ2V0RnJvbShlbnRpdHkpKV0gYXMgW1xuICAgICAgICBFbnRpdHksXG4gICAgICAgIC4uLkRlZXBSZWFkb25seTxDb21wb25lbnRFY3NUeXBlPFQ+PlxuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRDb21wb25lbnREZWZHcm91cDxUIGV4dGVuZHMgQ29tcG9uZW50RGVmaW5pdGlvbltdPihcbiAgICAuLi5hcmdzOiBUXG4gICk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlRdPiB7XG4gICAgY29uc3QgW2ZpcnN0Q29tcG9uZW50RGVmLCAuLi5jb21wb25lbnREZWZpbml0aW9uc10gPSBhcmdzXG4gICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBmaXJzdENvbXBvbmVudERlZi5pdGVyYXRvcigpKSB7XG4gICAgICBsZXQgbWF0Y2hlcyA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIGNvbXBvbmVudERlZmluaXRpb25zKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50RGVmLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCAuLi5hcmdzXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW50aXRpZXNDb21wb25lbnQsXG4gICAgY29tcG9uZW50c0RlZmluaXRpb24sXG4gICAgc3lzdGVtcyxcbiAgICBhZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eSxcbiAgICByZW1vdmVFbnRpdHksXG4gICAgYWRkU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudCxcbiAgICBtdXRhYmxlR3JvdXBPZixcbiAgICBncm91cE9mLFxuICAgIGdldENvbXBvbmVudFxuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCB0eXBlIFByZUVuZ2luZSA9IFJldHVyblR5cGU8dHlwZW9mIHByZUVuZ2luZT5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbmdpbmUoe1xuICB0cmFuc3BvcnRzXG59OiB7IHRyYW5zcG9ydHM/OiBUcmFuc3BvcnRbXSB9ID0ge30pOiBJRW5naW5lIHtcbiAgY29uc3QgZW5naW5lID0gcHJlRW5naW5lKClcbiAgY29uc3QgY3JkdFN5c3RlbSA9IGNyZHRTY2VuZVN5c3RlbSh7XG4gICAgZW5naW5lLFxuICAgIGF2YWlsYWJsZVRyYW5zcG9ydHM6IHRyYW5zcG9ydHNcbiAgfSlcbiAgY29uc3QgYmFzZUNvbXBvbmVudHMgPSBkZWZpbmVTZGtDb21wb25lbnRzKGVuZ2luZSlcblxuICBmdW5jdGlvbiB1cGRhdGUoZHQ6IG51bWJlcikge1xuICAgIGNyZHRTeXN0ZW0ucmVjZWl2ZU1lc3NhZ2VzKClcblxuICAgIGZvciAoY29uc3Qgc3lzdGVtIG9mIGVuZ2luZS5zeXN0ZW1zKSB7XG4gICAgICBzeXN0ZW0oZHQpXG4gICAgfVxuXG4gICAgLy8gVE9ETzogUGVyZiB0aXBcbiAgICAvLyBTaG91bGQgd2UgYWRkIHNvbWUgZGlydHlJdGVyYXRvclNldCBhdCBlbmdpbmUgbGV2ZWwgc28gd2UgZG9udCBoYXZlXG4gICAgLy8gdG8gaXRlcmF0ZSBhbGwgdGhlIGNvbXBvbmVudCBkZWZpbml0aW9ucyB0byBnZXQgdGhlIGRpcnR5IG9uZXMgP1xuICAgIGNvbnN0IGRpcnR5U2V0ID0gbmV3IE1hcDxFbnRpdHksIFNldDxudW1iZXI+PigpXG4gICAgZm9yIChjb25zdCBbY29tcG9uZW50SWQsIGRlZmluaXRpb25dIG9mIGVuZ2luZS5jb21wb25lbnRzRGVmaW5pdGlvbikge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGVmaW5pdGlvbi5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgICAgaWYgKCFkaXJ0eVNldC5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIGRpcnR5U2V0LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICAgICAgfVxuICAgICAgICBkaXJ0eVNldC5nZXQoZW50aXR5KSEuYWRkKGNvbXBvbmVudElkKVxuICAgICAgfVxuICAgIH1cbiAgICBjcmR0U3lzdGVtLmNyZWF0ZU1lc3NhZ2VzKGRpcnR5U2V0KVxuXG4gICAgZm9yIChjb25zdCBbX2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGRlZmluaXRpb24uY2xlYXJEaXJ0eSgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRFbnRpdHk6IGVuZ2luZS5hZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eTogZW5naW5lLmFkZER5bmFtaWNFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5OiBlbmdpbmUucmVtb3ZlRW50aXR5LFxuICAgIGFkZFN5c3RlbTogZW5naW5lLmFkZFN5c3RlbSxcbiAgICBkZWZpbmVDb21wb25lbnQ6IGVuZ2luZS5kZWZpbmVDb21wb25lbnQsXG4gICAgbXV0YWJsZUdyb3VwT2Y6IGVuZ2luZS5tdXRhYmxlR3JvdXBPZixcbiAgICBncm91cE9mOiBlbmdpbmUuZ3JvdXBPZixcbiAgICBnZXRDb21wb25lbnQ6IGVuZ2luZS5nZXRDb21wb25lbnQsXG4gICAgdXBkYXRlLFxuICAgIGJhc2VDb21wb25lbnRzXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi9FY3NUeXBlJ1xuaW1wb3J0IHsgVG9PcHRpb25hbCB9IGZyb20gJy4vdHlwaW5nJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVjIHtcbiAgW2tleTogc3RyaW5nXTogRWNzVHlwZVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQgZXh0ZW5kcyBTcGVjPiA9IFRvT3B0aW9uYWw8e1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEVjc1R5cGVcbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZGVzZXJpYWxpemUnXT5cbiAgICA6IFRbS10gZXh0ZW5kcyBTcGVjXG4gICAgPyBSZXN1bHQ8VFtLXT5cbiAgICA6IG5ldmVyXG59PlxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1hcFR5cGU8VCBleHRlbmRzIFNwZWM+KHNwZWM6IFQpOiBFY3NUeXBlPFJlc3VsdDxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogUmVzdWx0PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICBzcGVjW2tleV0uc2VyaWFsaXplKCh2YWx1ZSBhcyBhbnkpW2tleV0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBSZXN1bHQ8VD4ge1xuICAgICAgY29uc3QgbmV3VmFsdWU6IFJlc3VsdDxUPiA9IHt9IGFzIGFueVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlYykge1xuICAgICAgICAvLyBUT0RPOiBhcyBhbnlcbiAgICAgICAgOyhuZXdWYWx1ZSBhcyBhbnkpW2tleV0gPSBzcGVjW2tleV0uZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5jcmVhdGUoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4vRWNzVHlwZSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBcnJheVR5cGU8VD4odHlwZTogRWNzVHlwZTxUPik6IEVjc1R5cGU8QXJyYXk8VD4+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IEFycmF5PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBidWlsZGVyLndyaXRlVWludDMyKHZhbHVlLmxlbmd0aClcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICB0eXBlLnNlcmlhbGl6ZShpdGVtLCBidWlsZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogQXJyYXk8VD4ge1xuICAgICAgY29uc3QgbmV3QXJyYXk6IEFycmF5PFQ+ID0gW11cbiAgICAgIGNvbnN0IGxlbmd0aCA9IHJlYWRlci5yZWFkVWludDMyKClcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaCh0eXBlLmRlc2VyaWFsaXplKHJlYWRlcikpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3QXJyYXlcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuL0Vjc1R5cGUnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gT3B0aW9uYWw8VD4oc3BlYzogRWNzVHlwZTxUPik6IEVjc1R5cGU8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCB8IHVuZGVmaW5lZCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGJ1aWxkZXIud3JpdGVJbnQ4KDEpXG4gICAgICAgIHNwZWMuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMClcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFQgfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgZXhpc3RzID0gcmVhZGVyLnJlYWRJbnQ4KClcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi9FY3NUeXBlJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDY0OiBFY3NUeXBlPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDY0KEJpZ0ludCh2YWx1ZSkpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihyZWFkZXIucmVhZEludDY0KCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MzI6IEVjc1R5cGU8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MzIodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDE2OiBFY3NUeXBlPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDE2KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDE2KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQ4OiBFY3NUeXBlPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uL0Vjc1R5cGUnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQzMjogRWNzVHlwZTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDMyKHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQ2NDogRWNzVHlwZTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDY0KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0NjQoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uL0Vjc1R5cGUnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxhdFN0cmluZzogRWNzVHlwZTxzdHJpbmc+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IHN0cmluZywgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHJlYWRlci5yZWFkQnVmZmVyKCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVjc1N0cmluZyA9IEZsYXRTdHJpbmdcbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vRWNzVHlwZSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnVtPFQ+KHR5cGU6IEVjc1R5cGU8YW55Pik6IEVjc1R5cGU8VD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgdHlwZS5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUIHtcbiAgICAgIHJldHVybiB0eXBlLmRlc2VyaWFsaXplKHJlYWRlcilcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uL0Vjc1R5cGUnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRWNzQm9vbGVhbjogRWNzVHlwZTxib29sZWFuPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBib29sZWFuLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUgPyAxIDogMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpID09PSAxXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiLyoqXG4gKiBAYWxwaGEgKiBUaGlzIGZpbGUgaW5pdGlhbGl6YXRpb24gaXMgYW4gYWxwaGEgb25lLiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBvbGQtZWNzXG4gKiBpbml0IGFuZCBpdCdsbCBiZSBjaGFuZ2luZy5cbiAqL1xuXG5pbXBvcnQgeyBFbmdpbmUgfSBmcm9tICcuL2VuZ2luZSdcbmltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuL3N5c3RlbXMvY3JkdC90eXBlcydcblxuZGVjbGFyZSBjb25zdCBkY2w6IERlY2VudHJhbGFuZEludGVyZmFjZVxubGV0IEV4cGVyaW1lbnRhbEFQSTogYW55IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbmV4cG9ydCBjb25zdCBlbmdpbmUgPSBFbmdpbmUoe1xuICB0cmFuc3BvcnRzOiBbY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQoKV1cbn0pXG5cbmlmIChkY2wpIHtcbiAgZGNsXG4gICAgLmxvYWRNb2R1bGUoJ0BkZWNlbnRyYWxhbmQvRXhwZXJpbWVudGFsQVBJJywge30pXG4gICAgLnRoZW4oKG1vZHVsZTogYW55KSA9PiB7XG4gICAgICBFeHBlcmltZW50YWxBUEkgPSBtb2R1bGVcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgIGRjbC5lcnJvcihcbiAgICAgICAgYEV4cGVyaW1lbnRhbEFQSSBjb3VsZG4ndCBiZSBsb2FkZWQsIHRoZSBtZXNzYWdlIHRvIHJlbmRlcmVyIGNhbid0IGJlIHNlbnQgd2l0aG91dCB0aGlzIEFQSS5gLFxuICAgICAgICBlcnJcbiAgICAgIClcbiAgICB9KVxuXG4gIGRjbC5vblVwZGF0ZSgoZHQ6IG51bWJlcikgPT4ge1xuICAgIGVuZ2luZS51cGRhdGUoZHQpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZW5kZXJlcicsXG4gICAgc2VuZChtZXNzYWdlOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgICBpZiAoRXhwZXJpbWVudGFsQVBJKSB7XG4gICAgICAgIGRjbFxuICAgICAgICAgIC5jYWxsUnBjKCdAZGVjZW50cmFsYW5kL0V4cGVyaW1lbnRhbEFQSScsICdzZW5kVG9SZW5kZXJlcicsIFtcbiAgICAgICAgICAgIHsgZGF0YTogbWVzc2FnZSB9XG4gICAgICAgICAgXSlcbiAgICAgICAgICAuY2F0Y2goZGNsLmVycm9yKVxuICAgICAgfVxuICAgIH0sXG4gICAgb25tZXNzYWdlKF9tZXNzYWdlOiBVaW50OEFycmF5KTogdm9pZCB7fSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSk6IGJvb2xlYW4ge1xuICAgICAgLy8gRWNobyBtZXNzYWdlLCBpZ25vcmUgdGhlbVxuICAgICAgaWYgKG1lc3NhZ2UudHJhbnNwb3J0VHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICEhbWVzc2FnZVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInRoaXMiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsImdsb2JhbCIsIl9tMC5Xcml0ZXIiLCJfbTAuUmVhZGVyIiwiQ09NUE9ORU5UX0lEIiwiQXVkaW9Tb3VyY2UuQ09NUE9ORU5UX0lEIiwiQXVkaW9Tb3VyY2UuQXVkaW9Tb3VyY2UiLCJBdWRpb1N0cmVhbS5DT01QT05FTlRfSUQiLCJBdWRpb1N0cmVhbS5BdWRpb1N0cmVhbSIsIkJveFNoYXBlLkNPTVBPTkVOVF9JRCIsIkJveFNoYXBlLkJveFNoYXBlIiwiQ3lsaW5kZXJTaGFwZS5DT01QT05FTlRfSUQiLCJDeWxpbmRlclNoYXBlLkN5bGluZGVyU2hhcGUiLCJORlRTaGFwZS5DT01QT05FTlRfSUQiLCJORlRTaGFwZS5ORlRTaGFwZSIsIlBsYW5lU2hhcGUuQ09NUE9ORU5UX0lEIiwiUGxhbmVTaGFwZS5QbGFuZVNoYXBlIiwiU3BoZXJlU2hhcGUuQ09NUE9ORU5UX0lEIiwiU3BoZXJlU2hhcGUuU3BoZXJlU2hhcGUiLCJUZXh0U2hhcGUuQ09NUE9ORU5UX0lEIiwiVGV4dFNoYXBlLlRleHRTaGFwZSIsIlVpVHJhbnNmb3JtLkNPTVBPTkVOVF9JRCIsIlVpVHJhbnNmb3JtLlVpVHJhbnNmb3JtIiwiVmVjdG9yMyIsIlF1YXRlcm5pb24iLCJJRCIsIkxlZ2FjeVRyYW5zZm9ybSIsIldpcmVNZXNzYWdlIiwiY3JkdFByb3RvY29sIiwiTWVzc2FnZSIsIkNyZHRVdGlscyIsIkVudGl0eVV0aWxzIiwiZGVmaW5lQ29tcG9uZW50IiwiZGVmQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztHQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0dBQzlELE9BQWtCLENBQUEsT0FBQSxHQUFBLEtBQUssQ0FBQyxDQUFDO0dBS3pCLENBQUMsVUFBVSxPQUFPLEVBQUU7Q0FDcEI7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LENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0MsVUFBUSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxFQUFFO0NBQ2xDO2VBQ1ksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoQyxjQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiO0NBQ1QsZUFBYSxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7Q0FDeEM7ZUFDWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDakMsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUMsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiO2dCQUNJO0NBQ2I7ZUFDWSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQy9DLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUNuRixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEY7Q0FDVCxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQyxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQyxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQztDQUNBLFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQzNDLE9BQU8sR0FBRyxDQUFDO1FBQ2Q7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0NB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QyxHQUFHLENBQUMsQ0FBQztNQUNyQyxJQUFJLFNBQVMsRUFBRTtVQUNYLElBQUksSUFBSSxHQUFHLEVBQUU7Y0FDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCLFNBQVEsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07Y0FDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQzlCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07Q0FDeEMsYUFBWSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDdkQ7TUFDRCxPQUFPLElBQUksQ0FBQztHQUNmLENBQUE7Ozs7Ozs7Ozs7QUMxRUQ7Q0FDQSxDQUFBLEtBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0VBQ0EsU0FBUyxPQUFPLENBQUMsT0FBTyxF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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCO0FBQ1Q7VUFDUSxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3BELGFBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUNiLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtDQUNBO1VBQ1EsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcs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LEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUN0QixNQUFLLENBQUM7Q0FDTixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztNQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztNQUMzQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0NBQzlELEtBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMsQ0FBQztNQUMxRCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztNQUM5QyxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDMUIsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztDQUM5RCxLQUFJLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLElBQUksTUFBTSxDQUFDLENBQUM7TUFDMUQsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FB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QUFRLEdBQUc7V0FDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0NBQy9DLE9BQUssQ0FBQztBQUNOO09BQ0ksT0FBTyxXQUFXLENBQUM7SUFDdEI7QUFDRDtDQUNBLEVBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDekI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Q0FDakQsTUFBSSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7Q0FDdEIsTUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7V0FDdEMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLE9BQU8sV0FBVztXQUNkLEtBQUssSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUMzRSxjQUFZLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxD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QztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztHQUNsQjtBQUNEO0NBQ0E7RUFDQSxTQUFTLElBQUksR0FBRyxFQUFFO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUN2QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7R0FDN0I7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsTUFBTSxHQUFHO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUks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QUNBO0FBQ0E7Q0FDQSxDQUFBLFNBQVMsY0FBYyxHQUFHO0NBQzFCO01BQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFO0NBQ2pDLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCO2NBQ1ksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDaEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQzFCLE9BQU8sSUFBSSxDQUFDO1dBQ25CO0NBQ1Q7VUFDUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzdELElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDN0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Y0FDMUIsT0FBTyxJQUFJLENBQUM7VUFDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNkLE1BQUssTUFBTTtDQUNYLFNBQVEsT0FBTyxDQUFD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QzFDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7Q0FDakMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRTtDQUM3QixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFO0NBQzdCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Q0FDdkIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDdkMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtDQUN4QixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUN4QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO0NBQzVCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzVDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7Q0FDOUIsWUFBQSxNQUFNLENBQUMsTUFB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QSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUM3QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzdDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDOUMsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUM5QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzlDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDOUMsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUMzQyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzNDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDM0MsUUFBQSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQTtNQUMvQztDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7U0FDNUIsTUFBTSxH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QUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtNQUNsQztDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtNQUNsQztLQUNELE1BQU0sR0FBQTtDQUNKLFFBQUEsT0FBTyxDQUFDLENBQUE7TUFDVDtHQUNGO0NBRUQ7O0NBRUc7QUFDVSxPQUFBLEtBQUssR0FBb0I7S0FDcEMsU0FBUyxDQUFDLEtBQWEsRUFBRSxPQUFtQixFQUFBO0NBQzFDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtNQUMxQjtDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtNQUMxQjtLQUNELE1BQU0sR0FBQTtDQUNKLFFBQUEsT0FBTyxDQUFDLENBQUE7TUFDVDtHQUNGO0NBRUQ7O0NBRUc7QUFDVSxPQUFBLEtBQUssR0FBb0I7S0FDcEMsU0FBUyxDQUFDLEtBQWEsRUFBRSxPQUFtQixFQUFBO0NBQzFDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtNQUMxQjtDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtNQUMxQjtLQUNELE1BQU0sR0FBQTtDQUNKLFFBQUEsT0FBTyxDQUFDLENBQUE7TUFDVDtHQUNGO0NBRUQ7O0NBRUc7QUFDVSxPQUFBLElBQUksR0FBb0I7S0FDbkMsU0FBUyxDQUFDLEtBQWEsRUFBRSxPQUFtQixFQUFBO0NBQzFDLFFBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtNQUN6QjtDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtNQUN6QjtLQUNELE1BQU0sR0FBQTtDQUNKLFFBQUEs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
6899
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdWRpb1NvdXJjZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9TdHJlYW0uZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU3RyZWFtLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQm94U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0N5bGluZGVyU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0N5bGluZGVyU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvR0xURlNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9jb21tb24vQ29sb3IzLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvTkZUU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9TcGhlcmVTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVGV4dFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1VpVHJhbnNmb3JtLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRyYW5zZm9ybS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaW5kZXguZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvbGVnYWN5L1RyYW5zZm9ybS50cyIsIi4uL3NyYy9jb21wb25lbnRzL2xlZ2FjeS90eXBlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL2xlZ2FjeS9pbmRleC50cyIsIi4uL3NyYy9jb21wb25lbnRzL3R5cGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvaW5kZXgudHMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvaW5kZXguanMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS11dGlscy50cyIsIi4uL3NyYy9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXIvaW5kZXgudHMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi93aXJlTWVzc2FnZS50cyIsIi4uL3NyYy9zZXJpYWxpemF0aW9uL2NyZHQvY29tcG9uZW50T3BlcmF0aW9uLnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC91dGlscy50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvaW5kZXgudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS50cyIsIi4uL3NyYy9lbmdpbmUvdXRpbHMudHMiLCIuLi9zcmMvZW5naW5lL2NvbXBvbmVudC50cyIsIi4uL3NyYy9lbmdpbmUvaW5kZXgudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvTWFwVHlwZS50cyIsIi4uL3NyYy9idWlsdC1pbi10eXBlcy9BcnJheVR5cGUudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvT3B0aW9uYWwudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvYmFzaWMvSW50ZWdlci50cyIsIi4uL3NyYy9idWlsdC1pbi10eXBlcy9iYXNpYy9GbG9hdC50cyIsIi4uL3NyYy9idWlsdC1pbi10eXBlcy9iYXNpYy9TdHJpbmcudHMiLCIuLi9zcmMvYnVpbHQtaW4tdHlwZXMvYmFzaWMvRW51bS50cyIsIi4uL3NyYy9idWlsdC1pbi10eXBlcy9iYXNpYy9Cb29sZWFuLnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL3JlbmRlcmVyVHJhbnNwb3J0LnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL25ldHdvcmtUcmFuc3BvcnQudHMiLCIuLi9zcmMvaW5pdGlhbGl6YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZlY3RvcjMgPSB2b2lkIDA7XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFZlY3RvcjM7XG4oZnVuY3Rpb24gKFZlY3RvcjMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMuXG4gICAgICogQHBhcmFtIHggLSBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGVzIChvbiBZIGF4aXMpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqL1xuICAgIHggPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKi9cbiAgICB5ID0gMCwgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdGhpcmQgY29vcmRpbmF0ZXMgKG9uIFogYXhpcylcbiAgICAgKi9cbiAgICB6ID0gMCkge1xuICAgICAgICByZXR1cm4geyB4LCB5LCB6IH07XG4gICAgfVxuICAgIFZlY3RvcjMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHBhcmFtIHZlY3RvcjEgLSB0aGUgZmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHZlY3RvcjIgLSB0aGUgc2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkKHZlY3RvcjEsIHZlY3RvcjIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHZlY3RvcjEueCArIHZlY3RvcjIueCxcbiAgICAgICAgICAgIHk6IHZlY3RvcjEueSArIHZlY3RvcjIueSxcbiAgICAgICAgICAgIHo6IHZlY3RvcjEueiArIHZlY3RvcjIuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLmFkZCA9IGFkZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueCxcbiAgICAgICAgICAgIHk6IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueSxcbiAgICAgICAgICAgIHo6IG1pbnVlbmQueiAtIHN1YnRyYWhlbmQuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0cmFjdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdWJ0cmFjdFRvUmVmKG1pbnVlbmQsIHN1YnRyYWhlbmQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBtaW51ZW5kLnkgLSBzdWJ0cmFoZW5kLnk7XG4gICAgICAgIHJlc3VsdC56ID0gbWludWVuZC56IC0gc3VidHJhaGVuZC56O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0VG9SZWYgPSBzdWJ0cmFjdFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIHRoZSBvdGhlciBzaWduXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcHBvc2l0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB4OiAtdmFsdWUueCwgeTogLXZhbHVlLnksIHo6IC12YWx1ZS56IH07XG4gICAgfVxuICAgIFZlY3RvcjMub3Bwb3NpdGUgPSBvcHBvc2l0ZTtcbiAgICAvKipcbiAgICAgKiBDb3B5IHNvdXJjZSBpbnRvIGRlc3RcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHkoc291cmNlLCBkZXN0KSB7XG4gICAgICAgIGRlc3QueCA9IHNvdXJjZS54O1xuICAgICAgICBkZXN0LnkgPSBzb3VyY2UueTtcbiAgICAgICAgZGVzdC56ID0gc291cmNlLno7XG4gICAgfVxuICAgIFZlY3RvcjMuY29weSA9IGNvcHk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIHNhbWUgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5jbG9uZSA9IGNsb25lO1xuICAgIC8vIFByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0bzNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVjdG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56KTtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGggPSBsZW5ndGg7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiB2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLno7XG4gICAgfVxuICAgIFZlY3RvcjMubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgXCJzY2FsZVwiXG4gICAgICogQHBhcmFtIHNjYWxlIC0gZGVmaW5lcyB0aGUgbXVsdGlwbGllciBmYWN0b3JcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2NhbGVUb1JlZih2ZWN0b3IsIHNjYWxlLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSB2ZWN0b3IueCAqIHNjYWxlO1xuICAgICAgICByZXN1bHQueSA9IHZlY3Rvci55ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC56ID0gdmVjdG9yLnogKiBzY2FsZTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZVRvUmVmID0gc2NhbGVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZSh2ZWN0b3IsIHNjYWxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUodmVjdG9yLnggKiBzY2FsZSwgdmVjdG9yLnkgKiBzY2FsZSwgdmVjdG9yLnogKiBzY2FsZSk7XG4gICAgfVxuICAgIFZlY3RvcjMuc2NhbGUgPSBzY2FsZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aCh2ZWN0b3IsIGxlbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCk7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbiwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoID0gbm9ybWFsaXplRnJvbUxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCB8fCBsZW4gPT09IDEuMCkge1xuICAgICAgICAgICAgY29weSh2ZWN0b3IsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVUb1JlZih2ZWN0b3IsIDEuMCAvIGxlbiwgcmVzdWx0KTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYgPSBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWY7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuZ3RoKHZlY3RvcikpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVRvUmVmKHZlY3RvciwgcmVzdWx0KSB7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbmd0aCh2ZWN0b3IpLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZVRvUmVmID0gbm9ybWFsaXplVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgZG90IHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb3QobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcbiAgICB9XG4gICAgVmVjdG9yMy5kb3QgPSBkb3Q7XG4gICAgLyoqXG4gICAgICogUm90YXRlcyBjdXJyZW50IFZlY3RvcjMgYmFzZWQgb24gdGhlIGdpdmVuIHF1YXRlcm5pb24sIGJ1dCBhcHBsaWVzIHRoZSByb3RhdGlvbiB0byB0YXJnZXQgVmVjdG9yMy5cbiAgICAgKiBAcGFyYW0gcSAtIGRlZmluZXMgdGhlIFF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlKHZlY3RvciwgcSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHogfSA9IHZlY3RvcjtcbiAgICAgICAgY29uc3QgeyB4OiBxeCwgeTogcXksIHo6IHF6LCB3OiBxdyB9ID0gcTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gICAgICAgIGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgICAgICAgY29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuICAgICAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5LFxuICAgICAgICAgICAgeTogaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xeixcbiAgICAgICAgICAgIHo6IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5yb3RhdGUgPSByb3RhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yIFwiYW1vdW50XCIgKGZsb2F0KSBvbiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgdmVjdG9ycyBcInN0YXJ0XCIgYW5kIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwID0gbGVycDtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgXCJyZXN1bHRcIiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGZyb20gdGhlIHZlY3RvciBcInN0YXJ0XCIgZm9yIFwiYW1vdW50XCIgdG8gdGhlIHZlY3RvciBcImVuZFwiXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZW5kIC0gZGVmaW5lcyB0aGUgZW5kIHZhbHVlXG4gICAgICogQHBhcmFtIGFtb3VudCAtIG1heCBkZWZpbmVzIGFtb3VudCBiZXR3ZWVuIGJvdGggKGJldHdlZW4gMCBhbmQgMSlcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueSA9IHN0YXJ0LnkgKyAoZW5kLnkgLSBzdGFydC55KSAqIGFtb3VudDtcbiAgICAgICAgcmVzdWx0LnogPSBzdGFydC56ICsgKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQ7XG4gICAgfVxuICAgIFZlY3RvcjMubGVycFRvUmVmID0gbGVycFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0aGUgdmVjdG9ycyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3MobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmVjdG9yMy5aZXJvKCk7XG4gICAgICAgIFZlY3RvcjMuY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zcyA9IGNyb3NzO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC55ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7XG4gICAgICAgIHJlc3VsdC56ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XG4gICAgfVxuICAgIFZlY3RvcjMuY3Jvc3NUb1JlZiA9IGNyb3NzVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmVybygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5aZXJvID0gWmVybztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHVuaXQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIE9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgxLjAsIDEuMCwgMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5PbmUgPSBPbmU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0b2xlbmd0aFNxdWFyZWQgKDAuMCwgMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdXAgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVwKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMS4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlVwID0gVXA7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAtMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gRG93bigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIC0xLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRG93biA9IERvd247XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBmb3J3YXJkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBGb3J3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkZvcndhcmQgPSBGb3J3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAtMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhY2t3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAtMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5CYWNrd2FyZCA9IEJhY2t3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgcmlnaHQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlJpZ2h0ID0gUmlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoLTEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgbGVmdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgtMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuTGVmdCA9IExlZnQ7XG59KShWZWN0b3IzID0gZXhwb3J0cy5WZWN0b3IzIHx8IChleHBvcnRzLlZlY3RvcjMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVjdG9yMy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2NhbGFyID0gdm9pZCAwO1xuLyoqXG4gKiBUd28gcGkgY29uc3RhbnRzIGNvbnZlbmllbnQgZm9yIGNvbXB1dGF0aW9uLlxuICovXG5jb25zdCBUd29QaSA9IE1hdGguUEkgKiAyO1xuLyoqXG4gKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHBhcmFtIGEgLSBudW1iZXJcbiAqIEBwYXJhbSBiIC0gbnVtYmVyXG4gKiBAcGFyYW0gZXBzaWxvbiAtIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICovXG5mdW5jdGlvbiB3aXRoaW5FcHNpbG9uKGEsIGIsIGVwc2lsb24gPSAxLjQwMTI5OGUtNDUpIHtcbiAgICBjb25zdCBudW0gPSBhIC0gYjtcbiAgICByZXR1cm4gLWVwc2lsb24gPD0gbnVtICYmIG51bSA8PSBlcHNpbG9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICogQHBhcmFtIGkgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5zbGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC5cbiAqL1xuZnVuY3Rpb24gdG9IZXgoaSkge1xuICAgIGNvbnN0IHN0ciA9IGkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChpIDw9IDE1KSB7XG4gICAgICAgIHJldHVybiAoJzAnICsgc3RyKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG4vKipcbiAqIFJldHVybnMgLTEgaWYgdmFsdWUgaXMgbmVnYXRpdmUgYW5kICsxIGlzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICogQHBhcmFtIF92YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFsIHRvIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcbiAgICBpZiAoX3ZhbHVlID09PSAwIHx8IGlzTmFOKF92YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF92YWx1ZSA+IDAgPyAxIDogLTE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGJldHdlZW4gbWluIGFuZCBtYXguXG4gKiBSZXR1cm5zIG1pbiBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBtaW4uXG4gKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjbG1hcFxuICogQHBhcmFtIG1pbiAtIHRoZSBtaW4gdmFsdWUgdG8gY2xhbXAgdG8gKGRlZmF1bHQ6IDApXG4gKiBAcGFyYW0gbWF4IC0gdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSlcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpO1xufVxuLyoqXG4gKiB0aGUgbG9nMiBvZiB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2ZcbiAqIEByZXR1cm5zIHRoZSBsb2cyIG9mIHZhbHVlLlxuICovXG5mdW5jdGlvbiBsb2cyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHZhbHVlKSAqIE1hdGguTE9HMkU7XG59XG4vKipcbiAqIExvb3BzIHRoZSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAwLlxuICpcbiAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbW9kdWxvIG9wZXJhdG9yIGJ1dCBpdCB3b3JrcyB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG4gKiBGb3IgZXhhbXBsZSwgdXNpbmcgMy4wIGZvciB0IGFuZCAyLjUgZm9yIGxlbmd0aCwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjUuXG4gKiBXaXRoIHQgPSA1IGFuZCBsZW5ndGggPSAyLjUsIHRoZSByZXN1bHQgd291bGQgYmUgMC4wLlxuICogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgYmVoYXZpb3VyIGlzIG5vdCBkZWZpbmVkIGZvciBuZWdhdGl2ZSBudW1iZXJzIGFzIGl0IGlzIGZvciB0aGUgbW9kdWxvIG9wZXJhdG9yXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWVcbiAqIEBwYXJhbSBsZW5ndGggLSB0aGUgbGVuZ3RoXG4gKiBAcmV0dXJucyB0aGUgbG9vcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gTWF0aC5mbG9vcih2YWx1ZSAvIGxlbmd0aCkgKiBsZW5ndGg7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCB1c2luZyBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHBhcmFtIG1heCAtIG1pbiB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIERlbm9ybWFsaXplIHRoZSB2YWx1ZSBmcm9tIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG5vcm1hbGl6ZWQgLSB2YWx1ZSB0byBkZW5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBkZW5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGVub3JtYWxpemUobm9ybWFsaXplZCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZCAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xlcyBnaXZlbiBpbiBkZWdyZWVzLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IGFuZ2xlIGluIGRlZ3JlZXNcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgYW5nbGUgaW4gZGVncmVlc1xuICogQHJldHVybnMgdGhlIGRlbHRhXG4gKi9cbmZ1bmN0aW9uIGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KSB7XG4gICAgbGV0IG51bSA9IHJlcGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbi8qKlxuICogUGluZ1BvbmdzIHRoZSB2YWx1ZSB0LCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKiBAcGFyYW0gdHggLSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIGxlbmd0aFxuICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIDAgYW5kIGxlbmd0aFxuICovXG5mdW5jdGlvbiBwaW5nUG9uZyh0eCwgbGVuZ3RoKSB7XG4gICAgY29uc3QgdCA9IHJlcGVhdCh0eCwgbGVuZ3RoICogMi4wKTtcbiAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG4vKipcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExlcnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwXG4gKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFuZCBvdGhlciB0cmFuc2l0aW9ucy5cbiAqIEBwYXJhbSBmcm9tIC0gZnJvbVxuICogQHBhcmFtIHRvIC0gdG9cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgc21vb3RoIHN0ZXBwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gc21vb3RoU3RlcChmcm9tLCB0bywgdHgpIHtcbiAgICBsZXQgdCA9IGNsYW1wKHR4KTtcbiAgICB0ID0gLTIuMCAqIHQgKiB0ICogdCArIDMuMCAqIHQgKiB0O1xuICAgIHJldHVybiB0byAqIHQgKyBmcm9tICogKDEuMCAtIHQpO1xufVxuLyoqXG4gKiBNb3ZlcyBhIHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLlxuICogTmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRhcmdldC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKE1hdGguYWJzKHRhcmdldCAtIGN1cnJlbnQpIDw9IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyBzaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTW92ZVRvd2FyZHMgYnV0IG1ha2VzIHN1cmUgdGhlIHZhbHVlcyBpbnRlcnBvbGF0ZSBjb3JyZWN0bHkgd2hlbiB0aGV5IHdyYXAgYXJvdW5kIDM2MCBkZWdyZWVzLlxuICpcbiAqIFZhcmlhYmxlcyBjdXJyZW50IGFuZCB0YXJnZXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gZGVncmVlcy4gRm9yIG9wdGltaXphdGlvbiByZWFzb25zLCBuZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGFcbiAqICBhcmUgbm90IHN1cHBvcnRlZCBhbmQgbWF5IGNhdXNlIG9zY2lsbGF0aW9uLiBUbyBwdXNoIGN1cnJlbnQgYXdheSBmcm9tIGEgdGFyZ2V0IGFuZ2xlLCBhZGQgMTgwIHRvIHRoYXQgYW5nbGUgaW5zdGVhZC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyBhbmdsZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkc0FuZ2xlKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBjb25zdCBudW0gPSBkZWx0YUFuZ2xlKGN1cnJlbnQsIHRhcmdldCk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhEZWx0YSkge1xuICAgICAgICByZXN1bHQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBtb3ZlVG93YXJkcyhjdXJyZW50LCBjdXJyZW50ICsgbnVtLCBtYXhEZWx0YSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NhbGFyIHdpdGggdmFsdWVzIGxpbmVhcmx5IGludGVycG9sYXRlZCBvZiBcImFtb3VudFwiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXJcbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gZW5kIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gYW1vdW50IHRvIGxlcnAgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGxlcnBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBhbW91bnQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTGVycCBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKiBUaGUgcGFyYW1ldGVyIHQgaXMgY2xhbXBlZCB0byB0aGUgcmFuZ2UgWzAsIDFdLiBWYXJpYWJsZXMgYSBhbmQgYiBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnBBbmdsZShzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgbnVtICogY2xhbXAoYW1vdW50KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGluZWFyIHBhcmFtZXRlciB0IHRoYXQgcHJvZHVjZXMgdGhlIGludGVycG9sYW50IHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UgW2EsIGJdLlxuICogQHBhcmFtIGEgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGIgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIGJldHdlZW4gYSBhbmQgYlxuICogQHJldHVybnMgdGhlIGludmVyc2VMZXJwIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGludmVyc2VMZXJwKGEsIGIsIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgcmVzdWx0ID0gY2xhbXAoKHZhbHVlIC0gYSkgLyAoYiAtIGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IDAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBzY2FsYXIgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBIZXJtaXRlIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBzY2FsYXJzIFwidmFsdWUxXCIsIFwidmFsdWUzXCIsIFwidGFuZ2VudDFcIiwgXCJ0YW5nZW50MlwiLlxuICoge0BsaW5rIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vSGVybWl0ZVBvbHlub21pYWwuaHRtbH1cbiAqIEBwYXJhbSB2YWx1ZTEgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB0YW5nZW50MSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHZhbHVlMiAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gaW5wdXQgdmFsdWVcbiAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGhlcm1pdGUodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50MiwgYW1vdW50KSB7XG4gICAgY29uc3Qgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDtcbiAgICBjb25zdCBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDEgPSAyLjAgKiBjdWJlZCAtIDMuMCAqIHNxdWFyZWQgKyAxLjA7XG4gICAgY29uc3QgcGFydDIgPSAtMi4wICogY3ViZWQgKyAzLjAgKiBzcXVhcmVkO1xuICAgIGNvbnN0IHBhcnQzID0gY3ViZWQgLSAyLjAgKiBzcXVhcmVkICsgYW1vdW50O1xuICAgIGNvbnN0IHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkO1xuICAgIHJldHVybiB2YWx1ZTEgKiBwYXJ0MSArIHZhbHVlMiAqIHBhcnQyICsgdGFuZ2VudDEgKiBwYXJ0MyArIHRhbmdlbnQyICogcGFydDQ7XG59XG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJldHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZSBvZiByYW5kb21cbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWUgb2YgcmFuZG9tXG4gKiBAcmV0dXJucyByYW5kb20gdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmFuZ2UobWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUpXG4gKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKVxuICogQHBhcmFtIG51bSAtIHRvIGNvbnZlcnQgdG8gcGVyY2VudGFnZVxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIHBlcmNlbnRhZ2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1BlcmNlbnQobnVtLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobnVtIC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBlcmNlbnRhZ2UgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBQZXJjZW50VG9SYW5nZSgwLjM0LDAsMTAwKSB3aWxsIHJldHVybiAzNC5cbiAqIEBwYXJhbSBwZXJjZW50IC0gdG8gY29udmVydCB0byBudW1iZXJcbiAqIEBwYXJhbSBtaW4gLSBtaW4gcmFuZ2VcbiAqIEBwYXJhbSBtYXggLSBtYXggcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gcGVyY2VudFRvUmFuZ2UocGVyY2VudCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKG1heCAtIG1pbikgKiBwZXJjZW50ICsgbWluO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbmdsZSBjb252ZXJ0ZWQgdG8gZXF1aXZhbGVudCB2YWx1ZSBiZXR3ZWVuIC1NYXRoLlBJIGFuZCBNYXRoLlBJIHJhZGlhbnMuXG4gKiBAcGFyYW0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplIGluIHJhZGlhbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgYW5nbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhZGlhbnMoYW5nbGUpIHtcbiAgICAvLyBNb3JlIHByZWNpc2UgYnV0IHNsb3dlciB2ZXJzaW9uIGtlcHQgZm9yIHJlZmVyZW5jZS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb21tZW50ZWQtb3V0LWNvZGVcbiAgICAvKlxuICAgICAgLy8gYW5nbGUgPSBhbmdsZSAlIFRvb2xzLlR3b1BpO1xuICAgICAgLy8gYW5nbGUgPSAoYW5nbGUgKyBUb29scy5Ud29QaSkgJSBUb29scy5Ud29QaTtcbiAgXG4gICAgICAvL2lmIChhbmdsZSA+IE1hdGguUEkpIHtcbiAgICAgIC8vXHRhbmdsZSAtPSBUb29scy5Ud29QaTtcbiAgICAgIC8vfVxuICAgICAgICAqL1xuICAgIHJldHVybiBhbmdsZSAtIFR3b1BpICogTWF0aC5mbG9vcigoYW5nbGUgKyBNYXRoLlBJKSAvIFR3b1BpKTtcbn1cbi8qKlxuICogU2NhbGFyIGNvbXB1dGF0aW9uIGxpYnJhcnlcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5TY2FsYXIgPSB7XG4gICAgd2l0aGluRXBzaWxvbixcbiAgICB0b0hleCxcbiAgICBzaWduLFxuICAgIGNsYW1wLFxuICAgIGxvZzIsXG4gICAgcmVwZWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICBkZW5vcm1hbGl6ZSxcbiAgICBkZWx0YUFuZ2xlLFxuICAgIHBpbmdQb25nLFxuICAgIHNtb290aFN0ZXAsXG4gICAgbW92ZVRvd2FyZHMsXG4gICAgbW92ZVRvd2FyZHNBbmdsZSxcbiAgICBsZXJwLFxuICAgIGxlcnBBbmdsZSxcbiAgICBpbnZlcnNlTGVycCxcbiAgICBoZXJtaXRlLFxuICAgIHJhbmRvbVJhbmdlLFxuICAgIHJhbmdlVG9QZXJjZW50LFxuICAgIHBlcmNlbnRUb1JhbmdlLFxuICAgIG5vcm1hbGl6ZVJhZGlhbnMsXG4gICAgVHdvUGlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2FsYXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJBRDJERUcgPSBleHBvcnRzLkRFRzJSQUQgPSBleHBvcnRzLkVwc2lsb24gPSBleHBvcnRzLlRvTGluZWFyU3BhY2UgPSBleHBvcnRzLlRvR2FtbWFTcGFjZSA9IGV4cG9ydHMuU3BhY2UgPSBleHBvcnRzLk9yaWVudGF0aW9uID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZpbmVzIHBvdGVudGlhbCBvcmllbnRhdGlvbiBmb3IgYmFjayBmYWNlIGN1bGxpbmdcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE9yaWVudGF0aW9uO1xuKGZ1bmN0aW9uIChPcmllbnRhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENsb2Nrd2lzZVxuICAgICAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ1dcIl0gPSAwXSA9IFwiQ1dcIjtcbiAgICAvKiogQ291bnRlciBjbG9ja3dpc2UgKi9cbiAgICBPcmllbnRhdGlvbltPcmllbnRhdGlvbltcIkNDV1wiXSA9IDFdID0gXCJDQ1dcIjtcbn0pKE9yaWVudGF0aW9uID0gZXhwb3J0cy5PcmllbnRhdGlvbiB8fCAoZXhwb3J0cy5PcmllbnRhdGlvbiA9IHt9KSk7XG4vKipcbiAqIERlZmluZXMgc3VwcG9ydGVkIHNwYWNlc1xuICogQHB1YmxpY1xuICovXG52YXIgU3BhY2U7XG4oZnVuY3Rpb24gKFNwYWNlKSB7XG4gICAgLyoqIExvY2FsIChvYmplY3QpIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJMT0NBTFwiXSA9IDBdID0gXCJMT0NBTFwiO1xuICAgIC8qKiBXb3JsZCBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiV09STERcIl0gPSAxXSA9IFwiV09STERcIjtcbiAgICAvKiogQm9uZSBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiQk9ORVwiXSA9IDJdID0gXCJCT05FXCI7XG59KShTcGFjZSA9IGV4cG9ydHMuU3BhY2UgfHwgKGV4cG9ydHMuU3BhY2UgPSB7fSkpO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvR2FtbWFTcGFjZSA9IDEgLyAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGxpbmVhciBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvTGluZWFyU3BhY2UgPSAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gZGVmaW5lIHRoZSBtaW5pbWFsIG51bWJlciB2YWx1ZSBpbiBCYWJ5bG9uLmpzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuRXBzaWxvbiA9IDAuMDAwMDAxO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSBFdWxlciBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5ERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGZyb20gcmFkaWFucyB0byBFdWxlciBkZWdyZWVzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuUkFEMkRFRyA9IDM2MCAvIChNYXRoLlBJICogMik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVhdGVybmlvbiA9IHZvaWQgMDtcbmNvbnN0IFZlY3RvcjNfMSA9IHJlcXVpcmUoXCIuL1ZlY3RvcjNcIik7XG5jb25zdCBTY2FsYXJfMSA9IHJlcXVpcmUoXCIuL1NjYWxhclwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgUXVhdGVybmlvbjtcbihmdW5jdGlvbiAoUXVhdGVybmlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBmbG9hdHNcbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB6IC0gZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHcgLSBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoXG4gICAgLyoqIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHggPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeSA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHRoaXJkIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHogPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkgKi9cbiAgICB3ID0gMS4wKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHosIHcgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBRdWF0ZXJuaW9uIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gcXVhdGVybmlvbnMuXG4gICAgICogQHBhcmFtIHExIC0gdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcTIgLSB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQocTEsIHEyKSB7XG4gICAgICAgIHJldHVybiB7IHg6IHExLnggKyBxMi54LCB5OiBxMS55ICsgcTIueSwgejogcTEueiArIHEyLnosIHc6IHExLncgKyBxMi53IH07XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXVsZXIgZmxvYXQgYW5nbGVzICh5LCB4LCB6KSBhbmQgc3RvcmVzIGl0IGluIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB5YXcgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzXG4gICAgICogQHBhcmFtIHBpdGNoIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpc1xuICAgICAqIEBwYXJhbSByb2xsIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFogYXhpc1xuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHlhdywgcGl0Y2gsIHJvbGwpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMywgczIgKiBjMSAqIGMzIC0gYzIgKiBzMSAqIHMzLCBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzMsIGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRpb25ZYXdQaXRjaFJvbGwgPSByb3RhdGlvbllhd1BpdGNoUm9sbDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcm90YXRpb24gdGhhdCByb3RhdGVzIHogZGVncmVlcyBhcm91bmQgdGhlIHogYXhpcywgeCBkZWdyZWVzIGFyb3VuZCB0aGUgeCBheGlzLCBhbmQgeSBkZWdyZWVzIGFyb3VuZCB0aGUgeSBheGlzLlxuICAgICAqIEBwYXJhbSB4IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB4IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB5IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB5IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB6IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB6IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyKHgsIHksIHopIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHkgKiB0eXBlc18xLkRFRzJSQUQsIHggKiB0eXBlc18xLkRFRzJSQUQsIHogKiB0eXBlc18xLkRFRzJSQUQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyID0gZXVsZXI7XG4gICAgLyoqXG4gICAgICogR2V0cyBsZW5ndGggb2YgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHF1YXRlcm5pb24gbGVuZ3RoIChmbG9hdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgocSkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGxlbmd0aFNxdWFyZWQocSkpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQocSkge1xuICAgICAgICByZXR1cm4gcS54ICogcS54ICsgcS55ICogcS55ICsgcS56ICogcS56ICsgcS53ICogcS53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aFNxdWFyZWQgPSBsZW5ndGhTcXVhcmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IChmbG9hdCkgYmV0d2VlbiB0aGUgcXVhdGVybmlvbnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gKGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0LncpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBpbiBkZWdyZWVzIGJldHdlZW4gdHdvIHJvdGF0aW9ucyBhIGFuZCBiLlxuICAgICAqIEBwYXJhbSBxdWF0MSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcXVhdDIgLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFuZ2xlKHF1YXQxLCBxdWF0Mikge1xuICAgICAgICBjb25zdCBkb3RWYWwgPSBkb3QocXVhdDEsIHF1YXQyKTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLmFicyhkb3RWYWwpLCAxKSkgKiAyICogdHlwZXNfMS5SQUQyREVHO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlID0gYW5nbGU7XG4gICAgLyoqXG4gICAgICogVGhlIGZyb20gcXVhdGVybmlvbiBpcyByb3RhdGVkIHRvd2FyZHMgdG8gYnkgYW4gYW5ndWxhciBzdGVwIG9mIG1heERlZ3JlZXNEZWx0YS5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBtYXhEZWdyZWVzRGVsdGEgLSB0aGUgaW50ZXJ2YWwgc3RlcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0ZVRvd2FyZHMoZnJvbSwgdG8sIG1heERlZ3JlZXNEZWx0YSkge1xuICAgICAgICBjb25zdCBudW0gPSBhbmdsZShmcm9tLCB0byk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgbWF4RGVncmVlc0RlbHRhIC8gbnVtKTtcbiAgICAgICAgcmV0dXJuIHNsZXJwKGZyb20sIHRvLCB0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGVUb3dhcmRzID0gcm90YXRlVG93YXJkcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGZvcndhcmQgYW5kIHVwd2FyZHMgZGlyZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gZm9yd2FyZCAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpblxuICAgICAqIEBwYXJhbSB1cCAtIHRoZSB2ZWN0b3IgdGhhdCBkZWZpbmVzIGluIHdoaWNoIGRpcmVjdGlvbiB1cCBpc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvb2tSb3RhdGlvbihmb3J3YXJkLCB1cCA9IHsgeDogMC4wLCB5OiAxLjAsIHo6IDAuMCB9KSB7XG4gICAgICAgIGNvbnN0IGZvcndhcmROZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHVwLCBmb3J3YXJkTmV3KSk7XG4gICAgICAgIGNvbnN0IHVwTmV3ID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3MoZm9yd2FyZE5ldywgcmlnaHQpO1xuICAgICAgICBjb25zdCBtMDAgPSByaWdodC54O1xuICAgICAgICBjb25zdCBtMDEgPSByaWdodC55O1xuICAgICAgICBjb25zdCBtMDIgPSByaWdodC56O1xuICAgICAgICBjb25zdCBtMTAgPSB1cE5ldy54O1xuICAgICAgICBjb25zdCBtMTEgPSB1cE5ldy55O1xuICAgICAgICBjb25zdCBtMTIgPSB1cE5ldy56O1xuICAgICAgICBjb25zdCBtMjAgPSBmb3J3YXJkTmV3Lng7XG4gICAgICAgIGNvbnN0IG0yMSA9IGZvcndhcmROZXcueTtcbiAgICAgICAgY29uc3QgbTIyID0gZm9yd2FyZE5ldy56O1xuICAgICAgICBjb25zdCBudW04ID0gbTAwICsgbTExICsgbTIyO1xuICAgICAgICBjb25zdCBxdWF0ZXJuaW9uID0gY3JlYXRlKCk7XG4gICAgICAgIGlmIChudW04ID4gMCkge1xuICAgICAgICAgICAgbGV0IG51bSA9IE1hdGguc3FydChudW04ICsgMSk7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSBudW0gKiAwLjU7XG4gICAgICAgICAgICBudW0gPSAwLjUgLyBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEyIC0gbTIxKSAqIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjAgLSBtMDIpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMSAtIG0xMCkgKiBudW07XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTAwID49IG0xMSAmJiBtMDAgPj0gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW03ID0gTWF0aC5zcXJ0KDEgKyBtMDAgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtNCA9IDAuNSAvIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAwLjUgKiBudW03O1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0wMSArIG0xMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMiArIG0yMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0xMiAtIG0yMSkgKiBudW00O1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0xMSA+IG0yMikge1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IE1hdGguc3FydCgxICsgbTExIC0gbTAwIC0gbTIyKTtcbiAgICAgICAgICAgIGNvbnN0IG51bTMgPSAwLjUgLyBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gKG0xMCArIG0wMSkgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gMC41ICogbnVtNjtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMjEgKyBtMTIpICogbnVtMztcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IChtMjAgLSBtMDIpICogbnVtMztcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bTUgPSBNYXRoLnNxcnQoMSArIG0yMiAtIG0wMCAtIG0xMSk7XG4gICAgICAgIGNvbnN0IG51bTIgPSAwLjUgLyBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTIwICsgbTAyKSAqIG51bTI7XG4gICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjEgKyBtMTIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi56ID0gMC41ICogbnVtNTtcbiAgICAgICAgcXVhdGVybmlvbi53ID0gKG0wMSAtIG0xMCkgKiBudW0yO1xuICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sb29rUm90YXRpb24gPSBsb29rUm90YXRpb247XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGluIHBsYWNlIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUocSkge1xuICAgICAgICBjb25zdCBxTGVuZ3RoID0gMS4wIC8gbGVuZ3RoKHEpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKHEueCAqIHFMZW5ndGgsIHEueSAqIHFMZW5ndGgsIHEueiAqIHFMZW5ndGgsIHEudyAqIHFMZW5ndGgpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2hpY2ggcm90YXRlcyBmcm9tIGZyb21EaXJlY3Rpb24gdG8gdG9EaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGZyb20gLSBkZWZpbmVzIHRoZSBmaXJzdCBkaXJlY3Rpb24gVmVjdG9yXG4gICAgICogQHBhcmFtIHRvIC0gZGVmaW5lcyB0aGUgdGFyZ2V0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tVG9Sb3RhdGlvbihmcm9tLCB0bywgdXAgPSBWZWN0b3IzXzEuVmVjdG9yMy5VcCgpKSB7XG4gICAgICAgIC8vIFVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBpbXBsZW1lbnRlZCBmcm9tIGh0dHBzOi8vZm9ydW0udW5pdHkuY29tL3RocmVhZHMvcXVhdGVybmlvbi1sb29rcm90YXRpb24tYXJvdW5kLWFuLWF4aXMuNjA4NDcwLyNwb3N0LTQwNjk4ODhcbiAgICAgICAgY29uc3QgdjAgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZnJvbSk7XG4gICAgICAgIGNvbnN0IHYxID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKHRvKTtcbiAgICAgICAgY29uc3QgYSA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHYwLCB2MSk7XG4gICAgICAgIGNvbnN0IHcgPSBNYXRoLnNxcnQoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZCh2MCkgKiBWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYxKSkgK1xuICAgICAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuZG90KHYwLCB2MSk7XG4gICAgICAgIGlmIChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKGEpIDwgMC4wMDAxKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmVjdG9ycyBhcmUgcGFyYWxsZWwsIGNoZWNrIHcgdG8gZmluZCBkaXJlY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIHcgaXMgMCB0aGVuIHZhbHVlcyBhcmUgb3Bwb3NpdGUsIGFuZCB3ZSBzb3VsZCByb3RhdGUgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBzdXBwbGllZCBheGlzXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHZlY3RvcnMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFuZCBubyByb3RhdGlvbiBzaG91bGQgb2NjdXJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh3KSA8IDAuMDAwMVxuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplKGNyZWF0ZSh1cC54LCB1cC55LCB1cC56LCAwKSlcbiAgICAgICAgICAgICAgICA6IElkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGNyZWF0ZShhLngsIGEueSwgYS56LCB3KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tVG9Sb3RhdGlvbiA9IGZyb21Ub1JvdGF0aW9uO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIC0gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLklkZW50aXR5ID0gSWRlbnRpdHk7XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBldWxlciBhbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcm90YXRpb24uXG4gICAgICogSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyQW5nbGVzKHEpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gVmVjdG9yM18xLlZlY3RvcjMuY3JlYXRlKCk7XG4gICAgICAgIC8vIGlmIHRoZSBpbnB1dCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgaXMgZXhhY3RseSBvbmUuIE90aGVyd2lzZSwgdGhpcyBhY3RzIGFzIGEgY29ycmVjdGlvbiBmYWN0b3IgZm9yIHRoZSBxdWF0ZXJuaW9uJ3Mgbm90LW5vcm1hbGl6ZWRuZXNzXG4gICAgICAgIGNvbnN0IHVuaXQgPSBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgICAgIC8vIHEgd2lsbCBoYXZlIGEgbWFnbml0dWRlIG9mIDAuNSBvciBncmVhdGVyIGlmIGFuZCBvbmx5IGlmIHEgaXMgYSBzaW5ndWxhcml0eSBjYXNlXG4gICAgICAgIGNvbnN0IHRlc3QgPSBxLnggKiBxLncgLSBxLnkgKiBxLno7XG4gICAgICAgIGlmICh0ZXN0ID4gMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgbm9ydGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSBNYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gMiAqIE1hdGguYXRhbjIocS55LCBxLngpO1xuICAgICAgICAgICAgb3V0LnogPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRlc3QgPCAtMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgc291dGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSAtTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICBvdXQueSA9IC0yICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBzaW5ndWxhcml0eSAtIHEgaXMgdGhlIG1ham9yaXR5IG9mIGNhc2VzXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguYXNpbigyICogKHEudyAqIHEueCAtIHEueSAqIHEueikpO1xuICAgICAgICAgICAgb3V0LnkgPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnkgKyAyICogcS56ICogcS54LCAxIC0gMiAqIChxLnggKiBxLnggKyBxLnkgKiBxLnkpKTtcbiAgICAgICAgICAgIG91dC56ID0gTWF0aC5hdGFuMigyICogcS53ICogcS56ICsgMiAqIHEueCAqIHEueSwgMSAtIDIgKiAocS56ICogcS56ICsgcS54ICogcS54KSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0LnggKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICBvdXQueSAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC56ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBkZWdyZWUgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDM2MFxuICAgICAgICBvdXQueCA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LngsIDM2MCk7XG4gICAgICAgIG91dC55ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueSwgMzYwKTtcbiAgICAgICAgb3V0LnogPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC56LCAzNjApO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyQW5nbGVzID0gZXVsZXJBbmdsZXM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXN1bHQueCA9IGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMztcbiAgICAgICAgcmVzdWx0LnkgPSBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczM7XG4gICAgICAgIHJlc3VsdC56ID0gYzIgKiBjMSAqIHMzIC0gczIgKiBzMSAqIGMzO1xuICAgICAgICByZXN1bHQudyA9IGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmID0gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZjtcbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0gbWF0cml4IC0gZGVmaW5lcyB0aGUgc291cmNlIG1hdHJpeFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdHJpeCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXRyaXguX207XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgY29uc3QgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTtcbiAgICAgICAgY29uc3QgbTIxID0gZGF0YVsxXSwgbTIyID0gZGF0YVs1XSwgbTIzID0gZGF0YVs5XTtcbiAgICAgICAgY29uc3QgbTMxID0gZGF0YVsyXSwgbTMyID0gZGF0YVs2XSwgbTMzID0gZGF0YVsxMF07XG4gICAgICAgIC8vIHRzbGludDplbmFibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCB0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcbiAgICAgICAgbGV0IHM7XG4gICAgICAgIGlmICh0cmFjZSA+IDApIHtcbiAgICAgICAgICAgIHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAwLjI1IC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0zMiAtIG0yMykgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEzIC0gbTMxKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjEgLSBtMTIpICogcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtMTEgPiBtMjIgJiYgbTExID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMzIgLSBtMjMpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0xMyArIG0zMSkgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0yMiA+IG0zMykge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMTEgLSBtMzMpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTEzIC0gbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMSAtIG0xMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gMC4yNSAqIHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmO1xuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2VcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnAobGVmdCwgcmlnaHQsIGFtb3VudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnNsZXJwID0gc2xlcnA7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zIGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsZXJwVG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIGxldCBudW0yO1xuICAgICAgICBsZXQgbnVtMztcbiAgICAgICAgbGV0IG51bTQgPSBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAobnVtNCA8IDApIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgbnVtNCA9IC1udW00O1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHtcbiAgICAgICAgICAgIG51bTMgPSAxIC0gYW1vdW50O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguYWNvcyhudW00KTtcbiAgICAgICAgICAgIGNvbnN0IG51bTYgPSAxLjAgLyBNYXRoLnNpbihudW01KTtcbiAgICAgICAgICAgIG51bTMgPSBNYXRoLnNpbigoMS4wIC0gYW1vdW50KSAqIG51bTUpICogbnVtNjtcbiAgICAgICAgICAgIG51bTIgPSBmbGFnXG4gICAgICAgICAgICAgICAgPyAtTWF0aC5zaW4oYW1vdW50ICogbnVtNSkgKiBudW02XG4gICAgICAgICAgICAgICAgOiBNYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTY7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnggPSBudW0zICogbGVmdC54ICsgbnVtMiAqIHJpZ2h0Lng7XG4gICAgICAgIHJlc3VsdC55ID0gbnVtMyAqIGxlZnQueSArIG51bTIgKiByaWdodC55O1xuICAgICAgICByZXN1bHQueiA9IG51bTMgKiBsZWZ0LnogKyBudW0yICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LncgPSBudW0zICogbGVmdC53ICsgbnVtMiAqIHJpZ2h0Lnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZiA9IHNsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcXVhdGVybmlvbnNcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseShzZWxmLCBxMSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCwgMS4wKTtcbiAgICAgICAgbXVsdGlwbHlUb1JlZihzZWxmLCBxMSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIFwicmVzdWx0XCIgYXMgdGhlIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzZWxmLnggKiBxMS53ICsgc2VsZi55ICogcTEueiAtIHNlbGYueiAqIHExLnkgKyBzZWxmLncgKiBxMS54O1xuICAgICAgICByZXN1bHQueSA9IC1zZWxmLnggKiBxMS56ICsgc2VsZi55ICogcTEudyArIHNlbGYueiAqIHExLnggKyBzZWxmLncgKiBxMS55O1xuICAgICAgICByZXN1bHQueiA9IHNlbGYueCAqIHExLnkgLSBzZWxmLnkgKiBxMS54ICsgc2VsZi56ICogcTEudyArIHNlbGYudyAqIHExLno7XG4gICAgICAgIHJlc3VsdC53ID0gLXNlbGYueCAqIHExLnggLSBzZWxmLnkgKiBxMS55IC0gc2VsZi56ICogcTEueiArIHNlbGYudyAqIHExLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZiA9IG11bHRpcGx5VG9SZWY7XG4gICAgZnVuY3Rpb24gYW5nbGVBeGlzKGRlZ3Jlc3MsIGF4aXMpIHtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYXhpcykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSWRlbnRpdHkoKTtcbiAgICAgICAgbGV0IHJhZGlhbnMgPSBkZWdyZXNzICogdHlwZXNfMS5ERUcyUkFEO1xuICAgICAgICByYWRpYW5zICo9IDAuNTtcbiAgICAgICAgY29uc3QgYTIgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoYXhpcyk7XG4gICAgICAgIFZlY3RvcjNfMS5WZWN0b3IzLnNjYWxlVG9SZWYoYTIsIE1hdGguc2luKHJhZGlhbnMpLCBhMik7XG4gICAgICAgIHJlc3VsdC54ID0gYTIueDtcbiAgICAgICAgcmVzdWx0LnkgPSBhMi55O1xuICAgICAgICByZXN1bHQueiA9IGEyLno7XG4gICAgICAgIHJlc3VsdC53ID0gTWF0aC5jb3MocmFkaWFucyk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUocmVzdWx0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hbmdsZUF4aXMgPSBhbmdsZUF4aXM7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHplcm8gZmlsbGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uWmVybyA9IFplcm87XG59KShRdWF0ZXJuaW9uID0gZXhwb3J0cy5RdWF0ZXJuaW9uIHx8IChleHBvcnRzLlF1YXRlcm5pb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVhdGVybmlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1F1YXRlcm5pb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1ZlY3RvcjNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbmRleFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBhc1Byb21pc2U7XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5hc1Byb21pc2V9LlxyXG4gKiBAdHlwZWRlZiBhc1Byb21pc2VDYWxsYmFja1xyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBBZGRpdGlvbmFsIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSBmcm9tIGEgbm9kZS1zdHlsZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHthc1Byb21pc2VDYWxsYmFja30gZm4gRnVuY3Rpb24gdG8gY2FsbFxyXG4gKiBAcGFyYW0geyp9IGN0eCBGdW5jdGlvbiBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEZ1bmN0aW9uIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTwqPn0gUHJvbWlzaWZpZWQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGFzUHJvbWlzZShmbiwgY3R4LyosIHZhcmFyZ3MgKi8pIHtcclxuICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICBvZmZzZXQgID0gMCxcclxuICAgICAgICBpbmRleCAgID0gMixcclxuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcclxuICAgIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpXHJcbiAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0XSA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVyci8qLCB2YXJhcmdzICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlLmFwcGx5KG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgYmFzZTY0IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgYmFzZTY0ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBieXRlIGxlbmd0aCBvZiBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbmJhc2U2NC5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgcCA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICBpZiAoIXApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB2YXIgbiA9IDA7XHJcbiAgICB3aGlsZSAoLS1wICUgNCA+IDEgJiYgc3RyaW5nLmNoYXJBdChwKSA9PT0gXCI9XCIpXHJcbiAgICAgICAgKytuO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbChzdHJpbmcubGVuZ3RoICogMykgLyA0IC0gbjtcclxufTtcclxuXHJcbi8vIEJhc2U2NCBlbmNvZGluZyB0YWJsZVxyXG52YXIgYjY0ID0gbmV3IEFycmF5KDY0KTtcclxuXHJcbi8vIEJhc2U2NCBkZWNvZGluZyB0YWJsZVxyXG52YXIgczY0ID0gbmV3IEFycmF5KDEyMyk7XHJcblxyXG4vLyA2NS4uOTAsIDk3Li4xMjIsIDQ4Li41NywgNDMsIDQ3XHJcbmZvciAodmFyIGkgPSAwOyBpIDwgNjQ7KVxyXG4gICAgczY0W2I2NFtpXSA9IGkgPCAyNiA/IGkgKyA2NSA6IGkgPCA1MiA/IGkgKyA3MSA6IGkgPCA2MiA/IGkgLSA0IDogaSAtIDU5IHwgNDNdID0gaSsrO1xyXG5cclxuLyoqXHJcbiAqIEVuY29kZXMgYSBidWZmZXIgdG8gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IGVuY29kZWQgc3RyaW5nXHJcbiAqL1xyXG5iYXNlNjQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdO1xyXG4gICAgdmFyIGkgPSAwLCAvLyBvdXRwdXQgaW5kZXhcclxuICAgICAgICBqID0gMCwgLy8gZ290byBpbmRleFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHZhciBiID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W2IgPj4gMl07XHJcbiAgICAgICAgICAgICAgICB0ID0gKGIgJiAzKSA8PCA0O1xyXG4gICAgICAgICAgICAgICAgaiA9IDE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA0XTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDE1KSA8PCAyO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA2XTtcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiAmIDYzXTtcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaikge1xyXG4gICAgICAgIGNodW5rW2krK10gPSBiNjRbdF07XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IDYxO1xyXG4gICAgICAgIGlmIChqID09PSAxKVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxudmFyIGludmFsaWRFbmNvZGluZyA9IFwiaW52YWxpZCBlbmNvZGluZ1wiO1xyXG5cclxuLyoqXHJcbiAqIERlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gYSBidWZmZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW5cclxuICogQHRocm93cyB7RXJyb3J9IElmIGVuY29kaW5nIGlzIGludmFsaWRcclxuICovXHJcbmJhc2U2NC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0O1xyXG4gICAgdmFyIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoYyA9PT0gNjEgJiYgaiA+IDEpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGlmICgoYyA9IHM2NFtjXSkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gdCA8PCAyIHwgKGMgJiA0OCkgPj4gNDtcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9ICh0ICYgMTUpIDw8IDQgfCAoYyAmIDYwKSA+PiAyO1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAzKSA8PCA2IHwgYztcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBhcHBlYXJzIHRvIGJlIGJhc2U2NCBlbmNvZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byB0ZXN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcHJvYmFibHkgYmFzZTY0IGVuY29kZWQsIG90aGVyd2lzZSBmYWxzZVxyXG4gKi9cclxuYmFzZTY0LnRlc3QgPSBmdW5jdGlvbiB0ZXN0KHN0cmluZykge1xyXG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHN0cmluZyk7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UuXHJcbiAqIEBjbGFzc2Rlc2MgQSBtaW5pbWFsIGV2ZW50IGVtaXR0ZXIuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsKj59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIExpc3RlbmVyXHJcbiAqIEBwYXJhbSB7Kn0gW2N0eF0gTGlzdGVuZXIgY29udGV4dFxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2dCwgZm4sIGN0eCkge1xyXG4gICAgKHRoaXMuX2xpc3RlbmVyc1tldnRdIHx8ICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdKSkucHVzaCh7XHJcbiAgICAgICAgZm4gIDogZm4sXHJcbiAgICAgICAgY3R4IDogY3R4IHx8IHRoaXNcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBvciBhbnkgbWF0Y2hpbmcgbGlzdGVuZXJzIGlmIGFyZ3VtZW50cyBhcmUgb21pdHRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtldnRdIEV2ZW50IG5hbWUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBpZiBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIExpc3RlbmVyIHRvIHJlbW92ZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIG9mIGBldnRgIGlmIG9taXR0ZWQuXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZihldnQsIGZuKSB7XHJcbiAgICBpZiAoZXZ0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXS5mbiA9PT0gZm4pXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICArK2k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdHMgYW4gZXZlbnQgYnkgY2FsbGluZyBpdHMgbGlzdGVuZXJzIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2dCkge1xyXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgaWYgKGxpc3RlbmVycykge1xyXG4gICAgICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2krK10uY3R4LCBhcmdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmYWN0b3J5KTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyAvIHdyaXRlcyBmbG9hdHMgLyBkb3VibGVzIGZyb20gLyB0byBidWZmZXJzLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0XHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLy8gRmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm9kZS1iYXNlZCB0ZXN0aW5nIGluIG1vZGlmaWVkIGdsb2JhbCBlbnZpcm9ubWVudHNcclxuZnVuY3Rpb24gZmFjdG9yeShleHBvcnRzKSB7XHJcblxyXG4gICAgLy8gZmxvYXQ6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShbIC0wIF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmMzIuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzNdID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9jcHkgOiB3cml0ZUZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfcmV2IDogd3JpdGVGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfY3B5IDogcmVhZEZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gbGUgPyByZWFkRmxvYXRfZjMyX3JldiA6IHJlYWRGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgIC8vIGZsb2F0OiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9pZWVlNzU0KHdyaXRlVWludCwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc05hTih2YWwpKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDMyODkzNDQsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMy40MDI4MjM0NjYzODUyODg2ZSszOCkgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgMS4xNzU0OTQzNTA4MjIyODc1ZS0zOCkgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IE1hdGgucm91bmQodmFsIC8gMS40MDEyOTg0NjQzMjQ4MTdlLTQ1KSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBNYXRoLnJvdW5kKHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCkgKiA4Mzg4NjA4KSAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEyNyA8PCAyMyB8IG1hbnRpc3NhKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFKTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2llZWU3NTQocmVhZFVpbnQsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciB1aW50ID0gcmVhZFVpbnQoYnVmLCBwb3MpLFxyXG4gICAgICAgICAgICAgICAgc2lnbiA9ICh1aW50ID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSB1aW50ID4+PiAyMyAmIDI1NSxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdWludCAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjU1XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE1MCkgKiAobWFudGlzc2EgKyA4Mzg4NjA4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUpO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgLy8gZG91YmxlOiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGY2NC5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbN10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbN107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbN107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfY3B5IDogd3JpdGVEb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X3JldiA6IHdyaXRlRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSBsZSA/IHJlYWREb3VibGVfZjY0X2NweSA6IHJlYWREb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9yZXYgOiByZWFkRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgLy8gZG91YmxlOiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfaWVlZTc1NCh3cml0ZVVpbnQsIG9mZjAsIG9mZjEsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDY5NTkzNjAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpIHsgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTQ2NDM1MDcyKSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYW50aXNzYTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgeyAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsIC8gNWUtMzI0O1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBtYW50aXNzYSAvIDQyOTQ5NjcyOTYpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09PSAxMDI0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDEwMjM7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSAqIDQ1MDM1OTk2MjczNzA0OTYgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMDIzIDw8IDIwIHwgbWFudGlzc2EgKiAxMDQ4NTc2ICYgMTA0ODU3NSkgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9pZWVlNzU0KHJlYWRVaW50LCBvZmYwLCBvZmYxLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgbG8gPSByZWFkVWludChidWYsIHBvcyArIG9mZjApLFxyXG4gICAgICAgICAgICAgICAgaGkgPSByZWFkVWludChidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IChoaSA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gaGkgPj4+IDIwICYgMjA0NyxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gNDI5NDk2NzI5NiAqIChoaSAmIDEwNDg1NzUpICsgbG87XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjA0N1xyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiA1ZS0zMjQgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxMDc1KSAqIChtYW50aXNzYSArIDQ1MDM1OTk2MjczNzA0OTYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbn1cclxuXHJcbi8vIHVpbnQgaGVscGVyc1xyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50TEUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludEJFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgPj4+IDI0O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludExFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXVxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdIDw8IDI0KSA+Pj4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRCRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF0gPDwgMjRcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSkgPj4+IDA7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gaW5xdWlyZTtcclxuXHJcbi8qKlxyXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSBvbmx5IGlmIGF2YWlsYWJsZS5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWUgTW9kdWxlIHRvIHJlcXVpcmVcclxuICogQHJldHVybnMgez9PYmplY3R9IFJlcXVpcmVkIG1vZHVsZSBpZiBhdmFpbGFibGUgYW5kIG5vdCBlbXB0eSwgb3RoZXJ3aXNlIGBudWxsYFxyXG4gKi9cclxuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBtb2QgPSBldmFsKFwicXVpcmVcIi5yZXBsYWNlKC9eLyxcInJlXCIpKShtb2R1bGVOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXHJcbiAgICAgICAgaWYgKG1vZCAmJiAobW9kLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhtb2QpLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgVVRGOCBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIGFycmF5cy5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxudmFyIHV0ZjggPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFVURjggYnl0ZSBsZW5ndGggb2YgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGUgbGVuZ3RoXHJcbiAqL1xyXG51dGY4Lmxlbmd0aCA9IGZ1bmN0aW9uIHV0ZjhfbGVuZ3RoKHN0cmluZykge1xyXG4gICAgdmFyIGxlbiA9IDAsXHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXHJcbiAgICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIGVsc2UgaWYgKChjICYgMHhGQzAwKSA9PT0gMHhEODAwICYmIChzdHJpbmcuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBsZW4gKz0gNDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgbGVuICs9IDM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHJlYWRcclxuICovXHJcbnV0ZjgucmVhZCA9IGZ1bmN0aW9uIHV0ZjhfcmVhZChidWZmZXIsIHN0YXJ0LCBlbmQpIHtcclxuICAgIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdLFxyXG4gICAgICAgIGkgPSAwLCAvLyBjaGFyIG9mZnNldFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHQgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgaWYgKHQgPCAxMjgpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSB0O1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBlbHNlIGlmICh0ID4gMjM5ICYmIHQgPCAzNjUpIHtcclxuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzKSAtIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweERDMDAgKyAodCAmIDEwMjMpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBpZiAoaSA+IDgxOTEpIHtcclxuICAgICAgICAgICAgKHBhcnRzIHx8IChwYXJ0cyA9IFtdKSkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmspKTtcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgaWYgKGkpXHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSBzdHJpbmcgYXMgVVRGOCBieXRlcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlcyB3cml0dGVuXHJcbiAqL1xyXG51dGY4LndyaXRlID0gZnVuY3Rpb24gdXRmOF93cml0ZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQsXHJcbiAgICAgICAgYzEsIC8vIGNoYXJhY3RlciAxXHJcbiAgICAgICAgYzI7IC8vIGNoYXJhY3RlciAyXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMxID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMxIDwgMTI4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGMxIDwgMjA0OCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgICAgICB8IDE5MjtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoYzEgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKChjMiA9IHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgYzEgPSAweDEwMDAwICsgKChjMSAmIDB4MDNGRikgPDwgMTApICsgKGMyICYgMHgwM0ZGKTtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTggICAgICB8IDI0MDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgICAgICB8IDIyNDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gcG9vbDtcclxuXHJcbi8qKlxyXG4gKiBBbiBhbGxvY2F0b3IgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbEFsbG9jYXRvclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcclxuICovXHJcblxyXG4vKipcclxuICogQSBzbGljZXIgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbFNsaWNlclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmQgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXIgc2xpY2VcclxuICogQHRoaXMge1VpbnQ4QXJyYXl9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlciBwb29sLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtQb29sQWxsb2NhdG9yfSBhbGxvYyBBbGxvY2F0b3JcclxuICogQHBhcmFtIHtQb29sU2xpY2VyfSBzbGljZSBTbGljZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTgxOTJdIFNsYWIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7UG9vbEFsbG9jYXRvcn0gUG9vbGVkIGFsbG9jYXRvclxyXG4gKi9cclxuZnVuY3Rpb24gcG9vbChhbGxvYywgc2xpY2UsIHNpemUpIHtcclxuICAgIHZhciBTSVpFICAgPSBzaXplIHx8IDgxOTI7XHJcbiAgICB2YXIgTUFYICAgID0gU0laRSA+Pj4gMTtcclxuICAgIHZhciBzbGFiICAgPSBudWxsO1xyXG4gICAgdmFyIG9mZnNldCA9IFNJWkU7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9vbF9hbGxvYyhzaXplKSB7XHJcbiAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiBNQVgpXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvYyhzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IFNJWkUpIHtcclxuICAgICAgICAgICAgc2xhYiA9IGFsbG9jKFNJWkUpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnVmID0gc2xpY2UuY2FsbChzbGFiLCBvZmZzZXQsIG9mZnNldCArPSBzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICYgNykgLy8gYWxpZ24gdG8gMzIgYml0XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgfCA3KSArIDE7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZjtcclxuICAgIH07XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IExvbmdCaXRzO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzLlxuICogQGNsYXNzZGVzYyBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWUuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbG8gTG93IDMyIGJpdHMsIHVuc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gaGkgSGlnaCAzMiBiaXRzLCB1bnNpZ25lZFxuICovXG5mdW5jdGlvbiBMb25nQml0cyhsbywgaGkpIHtcblxuICAgIC8vIG5vdGUgdGhhdCB0aGUgY2FzdHMgYmVsb3cgYXJlIHRoZW9yZXRpY2FsbHkgdW5uZWNlc3NhcnkgYXMgb2YgdG9kYXksIGJ1dCBvbGRlciBzdGF0aWNhbGx5XG4gICAgLy8gZ2VuZXJhdGVkIGNvbnZlcnRlciBjb2RlIG1pZ2h0IHN0aWxsIGNhbGwgdGhlIGN0b3Igd2l0aCBzaWduZWQgMzJiaXRzLiBrZXB0IGZvciBjb21wYXQuXG5cbiAgICAvKipcbiAgICAgKiBMb3cgYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubG8gPSBsbyA+Pj4gMDtcblxuICAgIC8qKlxuICAgICAqIEhpZ2ggYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGkgPSBoaSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBaZXJvIGJpdHMuXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3V0aWwuTG9uZ0JpdHN9XG4gKi9cbnZhciB6ZXJvID0gTG9uZ0JpdHMuemVybyA9IG5ldyBMb25nQml0cygwLCAwKTtcblxuemVyby50b051bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbnplcm8uenpFbmNvZGUgPSB6ZXJvLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9O1xuemVyby5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH07XG5cbi8qKlxuICogWmVybyBoYXNoLlxuICogQG1lbWJlcm9mIHV0aWwuTG9uZ0JpdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbnZhciB6ZXJvSGFzaCA9IExvbmdCaXRzLnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIG51bWJlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb21OdW1iZXIgPSBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gemVybztcbiAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMDtcbiAgICBpZiAoc2lnbilcbiAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgdmFyIGxvID0gdmFsdWUgPj4+IDAsXG4gICAgICAgIGhpID0gKHZhbHVlIC0gbG8pIC8gNDI5NDk2NzI5NiA+Pj4gMDtcbiAgICBpZiAoc2lnbikge1xuICAgICAgICBoaSA9IH5oaSA+Pj4gMDtcbiAgICAgICAgbG8gPSB+bG8gPj4+IDA7XG4gICAgICAgIGlmICgrK2xvID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKCsraGkgPiA0Mjk0OTY3Mjk1KVxuICAgICAgICAgICAgICAgIGhpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKGxvLCBoaSk7XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIGEgbnVtYmVyLCBsb25nIG9yIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIodmFsdWUpO1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICAgICAgdmFsdWUgPSB1dGlsLkxvbmcuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBMb25nQml0cy5mcm9tTnVtYmVyKHBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubG93IHx8IHZhbHVlLmhpZ2ggPyBuZXcgTG9uZ0JpdHModmFsdWUubG93ID4+PiAwLCB2YWx1ZS5oaWdoID4+PiAwKSA6IHplcm87XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgcG9zc2libHkgdW5zYWZlIEphdmFTY3JpcHQgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBQb3NzaWJseSB1bnNhZmUgbnVtYmVyXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKHVuc2lnbmVkKSB7XG4gICAgaWYgKCF1bnNpZ25lZCAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgICB2YXIgbG8gPSB+dGhpcy5sbyArIDEgPj4+IDAsXG4gICAgICAgICAgICBoaSA9IH50aGlzLmhpICAgICA+Pj4gMDtcbiAgICAgICAgaWYgKCFsbylcbiAgICAgICAgICAgIGhpID0gaGkgKyAxID4+PiAwO1xuICAgICAgICByZXR1cm4gLShsbyArIGhpICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgbG9uZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd9IExvbmdcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uIHRvTG9uZyh1bnNpZ25lZCkge1xuICAgIHJldHVybiB1dGlsLkxvbmdcbiAgICAgICAgPyBuZXcgdXRpbC5Mb25nKHRoaXMubG8gfCAwLCB0aGlzLmhpIHwgMCwgQm9vbGVhbih1bnNpZ25lZCkpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogeyBsb3c6IHRoaXMubG8gfCAwLCBoaWdoOiB0aGlzLmhpIHwgMCwgdW5zaWduZWQ6IEJvb2xlYW4odW5zaWduZWQpIH07XG59O1xuXG52YXIgY2hhckNvZGVBdCA9IFN0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdDtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIDggY2hhcmFjdGVycyBsb25nIGhhc2guXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gQml0c1xuICovXG5Mb25nQml0cy5mcm9tSGFzaCA9IGZ1bmN0aW9uIGZyb21IYXNoKGhhc2gpIHtcbiAgICBpZiAoaGFzaCA9PT0gemVyb0hhc2gpXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMoXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDApXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDEpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMykgPDwgMjQpID4+PiAwXG4gICAgLFxuICAgICAgICAoIGNoYXJDb2RlQXQuY2FsbChoYXNoLCA0KVxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA1KSA8PCA4XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDYpIDw8IDE2XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDcpIDw8IDI0KSA+Pj4gMFxuICAgICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvSGFzaCA9IGZ1bmN0aW9uIHRvSGFzaCgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgdGhpcy5sbyAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gMjQgICAgICAsXG4gICAgICAgIHRoaXMuaGkgICAgICAgICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiA4ICAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMTYgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDI0XG4gICAgKTtcbn07XG5cbi8qKlxuICogWmlnLXphZyBlbmNvZGVzIHRoaXMgbG9uZyBiaXRzLlxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IGB0aGlzYFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUuenpFbmNvZGUgPSBmdW5jdGlvbiB6ekVuY29kZSgpIHtcbiAgICB2YXIgbWFzayA9ICAgdGhpcy5oaSA+PiAzMTtcbiAgICB0aGlzLmhpICA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5sbyAgPSAoIHRoaXMubG8gPDwgMSAgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGRlY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekRlY29kZSA9IGZ1bmN0aW9uIHp6RGVjb2RlKCkge1xuICAgIHZhciBtYXNrID0gLSh0aGlzLmxvICYgMSk7XG4gICAgdGhpcy5sbyAgPSAoKHRoaXMubG8gPj4+IDEgfCB0aGlzLmhpIDw8IDMxKSBeIG1hc2spID4+PiAwO1xuICAgIHRoaXMuaGkgID0gKCB0aGlzLmhpID4+PiAxICAgICAgICAgICAgICAgICAgXiBtYXNrKSA+Pj4gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgbG9uZ2JpdHMgd2hlbiBlbmNvZGVkIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge251bWJlcn0gTGVuZ3RoXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoKSB7XG4gICAgdmFyIHBhcnQwID0gIHRoaXMubG8sXG4gICAgICAgIHBhcnQxID0gKHRoaXMubG8gPj4+IDI4IHwgdGhpcy5oaSA8PCA0KSA+Pj4gMCxcbiAgICAgICAgcGFydDIgPSAgdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHBhcnQyID09PSAwXG4gICAgICAgICA/IHBhcnQxID09PSAwXG4gICAgICAgICAgID8gcGFydDAgPCAxNjM4NFxuICAgICAgICAgICAgID8gcGFydDAgPCAxMjggPyAxIDogMlxuICAgICAgICAgICAgIDogcGFydDAgPCAyMDk3MTUyID8gMyA6IDRcbiAgICAgICAgICAgOiBwYXJ0MSA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MSA8IDEyOCA/IDUgOiA2XG4gICAgICAgICAgICAgOiBwYXJ0MSA8IDIwOTcxNTIgPyA3IDogOFxuICAgICAgICAgOiBwYXJ0MiA8IDEyOCA/IDkgOiAxMDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciB1dGlsID0gZXhwb3J0cztcblxuLy8gdXNlZCB0byByZXR1cm4gYSBQcm9taXNlIHdoZXJlIGNhbGxiYWNrIGlzIG9taXR0ZWRcbnV0aWwuYXNQcm9taXNlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2FzcHJvbWlzZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwuYmFzZTY0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Jhc2U2NFwiKTtcblxuLy8gYmFzZSBjbGFzcyBvZiBycGMuU2VydmljZVxudXRpbC5FdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZXZlbnRlbWl0dGVyXCIpO1xuXG4vLyBmbG9hdCBoYW5kbGluZyBhY2Nyb3NzIGJyb3dzZXJzXG51dGlsLmZsb2F0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Zsb2F0XCIpO1xuXG4vLyByZXF1aXJlcyBtb2R1bGVzIG9wdGlvbmFsbHkgYW5kIGhpZGVzIHRoZSBjYWxsIGZyb20gYnVuZGxlcnNcbnV0aWwuaW5xdWlyZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9pbnF1aXJlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gdXRmOCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwudXRmOCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy91dGY4XCIpO1xuXG4vLyBwcm92aWRlcyBhIG5vZGUtbGlrZSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlclxudXRpbC5wb29sID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3Bvb2xcIik7XG5cbi8vIHV0aWxpdHkgdG8gd29yayB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZVxudXRpbC5Mb25nQml0cyA9IHJlcXVpcmUoXCIuL2xvbmdiaXRzXCIpO1xuXG4vKipcbiAqIFdoZXRoZXIgcnVubmluZyB3aXRoaW4gbm9kZSBvciBub3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbnV0aWwuaXNOb2RlID0gQm9vbGVhbih0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9uc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG4vKipcbiAqIEdsb2JhbCBvYmplY3QgcmVmZXJlbmNlLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbnV0aWwuZ2xvYmFsID0gdXRpbC5pc05vZGUgJiYgZ2xvYmFsXG4gICAgICAgICAgIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG4gICAgICAgICAgIHx8IHR5cGVvZiBzZWxmICAgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuICAgICAgICAgICB8fCB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG4vKipcbiAqIEFuIGltbXVhYmxlIGVtcHR5IGFycmF5LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtBcnJheS48Kj59XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoW10pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW107IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIEFuIGltbXV0YWJsZSBlbXB0eSBvYmplY3QuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7fTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xudXRpbC5pc0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmdcbiAqL1xudXRpbC5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqL1xudXRpbC5pc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIHV0aWwuaXNTZXR9LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc3NldCA9XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzU2V0ID0gZnVuY3Rpb24gaXNTZXQob2JqLCBwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW3Byb3BdO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXEsIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmxlbmd0aCA6IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpID4gMDtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBCdWZmZXIgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IG5vZGUncyB0eXBpbmdzLlxuICogQGludGVyZmFjZSBCdWZmZXJcbiAqIEBleHRlbmRzIFVpbnQ4QXJyYXlcbiAqL1xuXG4vKipcbiAqIE5vZGUncyBCdWZmZXIgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPEJ1ZmZlcj59XG4gKi9cbnV0aWwuQnVmZmVyID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBCdWZmZXIgPSB1dGlsLmlucXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuICAgICAgICAvLyByZWZ1c2UgdG8gdXNlIG5vbi1ub2RlIGJ1ZmZlcnMgaWYgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQgKHBlcmYgcmVhc29ucyk6XG4gICAgICAgIHJldHVybiBCdWZmZXIucHJvdG90eXBlLnV0ZjhXcml0ZSA/IEJ1ZmZlciA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59KSgpO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZnVsbCBmb3IgQnVmZmVyLmZyb20uXG51dGlsLl9CdWZmZXJfZnJvbSA9IG51bGw7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmaWxsIGZvciBCdWZmZXIuYWxsb2NVbnNhZmUuXG51dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIG9mIHdoYXRldmVyIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbc2l6ZU9yQXJyYXk9MF0gQnVmZmVyIHNpemUgb3IgbnVtYmVyIGFycmF5XG4gKiBAcmV0dXJucyB7VWludDhBcnJheXxCdWZmZXJ9IEJ1ZmZlclxuICovXG51dGlsLm5ld0J1ZmZlciA9IGZ1bmN0aW9uIG5ld0J1ZmZlcihzaXplT3JBcnJheSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHR5cGVvZiBzaXplT3JBcnJheSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogbmV3IHV0aWwuQXJyYXkoc2l6ZU9yQXJyYXkpXG4gICAgICAgIDogdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2Zyb20oc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IHR5cGVvZiBVaW50OEFycmF5ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBzaXplT3JBcnJheVxuICAgICAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoc2l6ZU9yQXJyYXkpO1xufTtcblxuLyoqXG4gKiBBcnJheSBpbXBsZW1lbnRhdGlvbiB1c2VkIGluIHRoZSBicm93c2VyLiBgVWludDhBcnJheWAgaWYgc3VwcG9ydGVkLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxVaW50OEFycmF5Pn1cbiAqL1xudXRpbC5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiID8gVWludDhBcnJheSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA6IEFycmF5O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIExvbmcgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgTG9uZyBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbG9uZy5qcy5cbiAqIEBpbnRlcmZhY2UgTG9uZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvdyBMb3cgYml0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGhpZ2ggSGlnaCBiaXRzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKi9cblxuLyoqXG4gKiBMb25nLmpzJ3MgTG9uZyBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8TG9uZz59XG4gKi9cbnV0aWwuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8gJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTy5Mb25nXG4gICAgICAgICB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5Mb25nXG4gICAgICAgICB8fCB1dGlsLmlucXVpcmUoXCJsb25nXCIpO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAyIGJpdCAoYGJvb2xgKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDMyIGJpdCAoYGludDMyYCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkzMlJlID0gL14tPyg/OjB8WzEtOV1bMC05XSopJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDY0IGJpdCAoYGludDY0YCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXk2NFJlID0gL14oPzpbXFxcXHgwMC1cXFxceGZmXXs4fXwtPyg/OjB8WzEtOV1bMC05XSopKSQvO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIG9yIGxvbmcgdG8gYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIYXNoXG4gKi9cbnV0aWwubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uIGxvbmdUb0hhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyB1dGlsLkxvbmdCaXRzLmZyb20odmFsdWUpLnRvSGFzaCgpXG4gICAgICAgIDogdXRpbC5Mb25nQml0cy56ZXJvSGFzaDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcgdG8gYSBsb25nIG9yIG51bWJlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd8bnVtYmVyfSBPcmlnaW5hbCB2YWx1ZVxuICovXG51dGlsLmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uIGxvbmdGcm9tSGFzaChoYXNoLCB1bnNpZ25lZCkge1xuICAgIHZhciBiaXRzID0gdXRpbC5Mb25nQml0cy5mcm9tSGFzaChoYXNoKTtcbiAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICByZXR1cm4gdXRpbC5Mb25nLmZyb21CaXRzKGJpdHMubG8sIGJpdHMuaGksIHVuc2lnbmVkKTtcbiAgICByZXR1cm4gYml0cy50b051bWJlcihCb29sZWFuKHVuc2lnbmVkKSk7XG59O1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgc291cmNlIG9iamVjdCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gZHN0IERlc3RpbmF0aW9uIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gc3JjIFNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lmTm90U2V0PWZhbHNlXSBNZXJnZXMgb25seSBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHNldFxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBEZXN0aW5hdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIGlmTm90U2V0KSB7IC8vIHVzZWQgYnkgY29udmVydGVyc1xuICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChkc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCB8fCAhaWZOb3RTZXQpXG4gICAgICAgICAgICBkc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgcmV0dXJuIGRzdDtcbn1cblxudXRpbC5tZXJnZSA9IG1lcmdlO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbnZlcnRlZCBzdHJpbmdcbiAqL1xudXRpbC5sY0ZpcnN0ID0gZnVuY3Rpb24gbGNGaXJzdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBlcnJvciBjb25zdHJ1Y3Rvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFcnJvciBuYW1lXG4gKiBAcmV0dXJucyB7Q29uc3RydWN0b3I8RXJyb3I+fSBDdXN0b20gZXJyb3IgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gbmV3RXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcykge1xuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDdXN0b21FcnJvcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgICAgIC8vIF4ganVzdCByZXR1cm5zIGEgbmV3IGVycm9yIGluc3RhbmNlIGJlY2F1c2UgdGhlIGN0b3IgY2FuIGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWVzc2FnZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtZXNzYWdlOyB9IH0pO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgLy8gbm9kZVxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3VzdG9tRXJyb3IpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFja1wiLCB7IHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayB8fCBcIlwiIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgbWVyZ2UodGhpcywgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgKEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21FcnJvci5wcm90b3R5cGUsIFwibmFtZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBuYW1lOyB9IH0pO1xuXG4gICAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcblxuICAgIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxudXRpbC5uZXdFcnJvciA9IG5ld0Vycm9yO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcHJvdG9jb2wgZXJyb3IuXG4gKiBAY2xhc3NkZXNjIEVycm9yIHN1YmNsYXNzIGluZGljYXRpbmcgYSBwcm90b2NvbCBzcGVjaWZjIGVycm9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBleHRlbmRzIEVycm9yXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW3Byb3BlcnRpZXNdIEFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogQGV4YW1wbGVcbiAqIHRyeSB7XG4gKiAgICAgTXlNZXNzYWdlLmRlY29kZShzb21lQnVmZmVyKTsgLy8gdGhyb3dzIGlmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICogfSBjYXRjaCAoZSkge1xuICogICAgIGlmIChlIGluc3RhbmNlb2YgUHJvdG9jb2xFcnJvciAmJiBlLmluc3RhbmNlKVxuICogICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgc28gZmFyOiBcIiArIEpTT04uc3RyaW5naWZ5KGUuaW5zdGFuY2UpKTtcbiAqIH1cbiAqL1xudXRpbC5Qcm90b2NvbEVycm9yID0gbmV3RXJyb3IoXCJQcm90b2NvbEVycm9yXCIpO1xuXG4vKipcbiAqIFNvIGZhciBkZWNvZGVkIG1lc3NhZ2UgaW5zdGFuY2UuXG4gKiBAbmFtZSB1dGlsLlByb3RvY29sRXJyb3IjaW5zdGFuY2VcbiAqIEB0eXBlIHtNZXNzYWdlPFQ+fVxuICovXG5cbi8qKlxuICogQSBPbmVPZiBnZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZHZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZHZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBnZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZHZXR0ZXJ9IFVuYm91bmQgZ2V0dGVyXG4gKi9cbnV0aWwub25lT2ZHZXR0ZXIgPSBmdW5jdGlvbiBnZXRPbmVPZihmaWVsZE5hbWVzKSB7XG4gICAgdmFyIGZpZWxkTWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICBmaWVsZE1hcFtmaWVsZE5hbWVzW2ldXSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID4gLTE7IC0taSlcbiAgICAgICAgICAgIGlmIChmaWVsZE1hcFtrZXlzW2ldXSA9PT0gMSAmJiB0aGlzW2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgdGhpc1trZXlzW2ldXSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5c1tpXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBIE9uZU9mIHNldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZlNldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZlNldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZSBGaWVsZCBuYW1lXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgc2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mU2V0dGVyfSBVbmJvdW5kIHNldHRlclxuICovXG51dGlsLm9uZU9mU2V0dGVyID0gZnVuY3Rpb24gc2V0T25lT2YoZmllbGROYW1lcykge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmllbGQgbmFtZVxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVzW2ldICE9PSBuYW1lKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2ZpZWxkTmFtZXNbaV1dO1xuICAgIH07XG59O1xuXG4vKipcbiAqIERlZmF1bHQgY29udmVyc2lvbiBvcHRpb25zIHVzZWQgZm9yIHtAbGluayBNZXNzYWdlI3RvSlNPTn0gaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoZXNlIG9wdGlvbnMgYXJlIGNsb3NlIHRvIHByb3RvMydzIEpTT04gbWFwcGluZyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBpbnRlcm5hbCB0eXBlcyBsaWtlIEFueSBhcmUgaGFuZGxlZCBqdXN0IGxpa2UgbWVzc2FnZXMuIE1vcmUgcHJlY2lzZWx5OlxuICpcbiAqIC0gTG9uZ3MgYmVjb21lIHN0cmluZ3NcbiAqIC0gRW51bXMgYmVjb21lIHN0cmluZyBrZXlzXG4gKiAtIEJ5dGVzIGJlY29tZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG4gKiAtIChTdWItKU1lc3NhZ2VzIGJlY29tZSBwbGFpbiBvYmplY3RzXG4gKiAtIE1hcHMgYmVjb21lIHBsYWluIG9iamVjdHMgd2l0aCBhbGwgc3RyaW5nIGtleXNcbiAqIC0gUmVwZWF0ZWQgZmllbGRzIGJlY29tZSBhcnJheXNcbiAqIC0gTmFOIGFuZCBJbmZpbml0eSBmb3IgZmxvYXQgYW5kIGRvdWJsZSBmaWVsZHMgYmVjb21lIHN0cmluZ3NcbiAqXG4gKiBAdHlwZSB7SUNvbnZlcnNpb25PcHRpb25zfVxuICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zP2hsPWVuI2pzb25cbiAqL1xudXRpbC50b0pTT05PcHRpb25zID0ge1xuICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgZW51bXM6IFN0cmluZyxcbiAgICBieXRlczogU3RyaW5nLFxuICAgIGpzb246IHRydWVcbn07XG5cbi8vIFNldHMgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCAoY2FsbGVkIGluIGluZGV4LW1pbmltYWwpXG51dGlsLl9jb25maWd1cmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgQnVmZmVyID0gdXRpbC5CdWZmZXI7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFCdWZmZXIpIHtcbiAgICAgICAgdXRpbC5fQnVmZmVyX2Zyb20gPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJlY2F1c2Ugbm9kZSA0LnggYnVmZmVycyBhcmUgaW5jb21wYXRpYmxlICYgaW1tdXRhYmxlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGNvZGVJTy9wcm90b2J1Zi5qcy9wdWxsLzY2NVxuICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gQnVmZmVyLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBCdWZmZXIuZnJvbSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfZnJvbSh2YWx1ZSwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZyk7XG4gICAgICAgIH07XG4gICAgdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gQnVmZmVyLmFsbG9jVW5zYWZlIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9hbGxvY1Vuc2FmZShzaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICAgICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyV3JpdGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgYmFzZTY0ICAgID0gdXRpbC5iYXNlNjQsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHdyaXRlciBvcGVyYXRpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgVWludDhBcnJheSwgbnVtYmVyKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gT3AoZm4sIGxlbiwgdmFsKSB7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfVxuICAgICAqL1xuICAgIHRoaXMuZm4gPSBmbjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IG9wZXJhdGlvbi5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbCA9IHZhbDsgLy8gdHlwZSB2YXJpZXNcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgc3RhdGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIENvcGllZCB3cml0ZXIgc3RhdGUuXG4gKiBAbWVtYmVyb2YgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7V3JpdGVyfSB3cml0ZXIgV3JpdGVyIHRvIGNvcHkgc3RhdGUgZnJvbVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBTdGF0ZSh3cml0ZXIpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaGVhZC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IHdyaXRlci5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCB0YWlsLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gd3JpdGVyLnRhaWw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IHdyaXRlci5sZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IHN0YXRlLlxuICAgICAqIEB0eXBlIHtTdGF0ZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHdyaXRlci5zdGF0ZXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXcml0ZXIoKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gMDtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgaGVhZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgdGFpbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogTGlua2VkIGZvcmtlZCBzdGF0ZXMuXG4gICAgICogQHR5cGUge09iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGVzID0gbnVsbDtcblxuICAgIC8vIFdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuLCB0aGUgd3JpdGVyIGNhbGN1bGF0ZXMgaXRzIGJ5dGUgbGVuZ3RoIGFuZCBwdXRzIGl0IGludG8gYSBsaW5rZWRcbiAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGZpbmlzaCgpIGlzIGNhbGxlZC4gVGhpcyBib3RoIGFsbG93cyB1cyB0byBhbGxvY2F0ZVxuICAgIC8vIGJ1ZmZlcnMgb2YgdGhlIGV4YWN0IHJlcXVpcmVkIHNpemUgYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGhhdmUgdG8gZG8gY29tcGFyZWRcbiAgICAvLyB0byBmaXJzdCBjYWxjdWxhdGluZyBvdmVyIG9iamVjdHMgYW5kIHRoZW4gZW5jb2Rpbmcgb3ZlciBvYmplY3RzLiBJbiBvdXIgY2FzZSwgdGhlIGVuY29kaW5nXG4gICAgLy8gcGFydCBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2FsayBjYWxsaW5nIG9wZXJhdGlvbnMgd2l0aCBhbHJlYWR5IHByZXBhcmVkIHZhbHVlcy5cbn1cblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKCkge1xuICAgICAgICAgICAgcmV0dXJuIChXcml0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlcigpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGVyKCk7XG4gICAgICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyV3JpdGVyfFdyaXRlcn0gQSB7QGxpbmsgQnVmZmVyV3JpdGVyfSB3aGVuIEJ1ZmZlcnMgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGEge0BsaW5rIFdyaXRlcn1cbiAqL1xuV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxuICovXG5Xcml0ZXIuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gICAgcmV0dXJuIG5ldyB1dGlsLkFycmF5KHNpemUpO1xufTtcblxuLy8gVXNlIFVpbnQ4QXJyYXkgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXIsIGp1c3QgbGlrZSBub2RlIGRvZXMgd2l0aCBidWZmZXJzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHV0aWwuQXJyYXkgIT09IEFycmF5KVxuICAgIFdyaXRlci5hbGxvYyA9IHV0aWwucG9vbChXcml0ZXIuYWxsb2MsIHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KTtcblxuLyoqXG4gKiBQdXNoZXMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAcHJpdmF0ZVxuICovXG5Xcml0ZXIucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gcHVzaChmbiwgbGVuLCB2YWwpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcChmbiwgbGVuLCB2YWwpO1xuICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQnl0ZSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWwgJiAyNTU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwgPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbCAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsID4+Pj0gNztcbiAgICB9XG4gICAgYnVmW3Bvc10gPSB2YWw7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHZhcmludCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGV4dGVuZHMgT3BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBWYXJpbnRPcChsZW4sIHZhbCkge1xuICAgIHRoaXMubGVuID0gbGVuO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbn1cblxuVmFyaW50T3AucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcC5wcm90b3R5cGUpO1xuVmFyaW50T3AucHJvdG90eXBlLmZuID0gd3JpdGVWYXJpbnQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50MzIgPSBmdW5jdGlvbiB3cml0ZV91aW50MzIodmFsdWUpIHtcbiAgICAvLyBoZXJlLCB0aGUgY2FsbCB0byB0aGlzLnB1c2ggaGFzIGJlZW4gaW5saW5lZCBhbmQgYSB2YXJpbnQgc3BlY2lmaWMgT3Agc3ViY2xhc3MgaXMgdXNlZC5cbiAgICAvLyB1aW50MzIgaXMgYnkgZmFyIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gYW5kIGJlbmVmaXRzIHNpZ25pZmljYW50bHkgZnJvbSB0aGlzLlxuICAgIHRoaXMubGVuICs9ICh0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBWYXJpbnRPcChcbiAgICAgICAgKHZhbHVlID0gdmFsdWUgPj4+IDApXG4gICAgICAgICAgICAgICAgPCAxMjggICAgICAgPyAxXG4gICAgICAgIDogdmFsdWUgPCAxNjM4NCAgICAgPyAyXG4gICAgICAgIDogdmFsdWUgPCAyMDk3MTUyICAgPyAzXG4gICAgICAgIDogdmFsdWUgPCAyNjg0MzU0NTYgPyA0XG4gICAgICAgIDogICAgICAgICAgICAgICAgICAgICA1LFxuICAgIHZhbHVlKSkubGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gd3JpdGVfaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPCAwXG4gICAgICAgID8gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCAxMCwgTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSkpIC8vIDEwIGJ5dGVzIHBlciBzcGVjXG4gICAgICAgIDogdGhpcy51aW50MzIodmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gd3JpdGVfc2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCh2YWx1ZSA8PCAxIF4gdmFsdWUgPj4gMzEpID4+PiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50NjQodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwuaGkpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gKHZhbC5sbyA+Pj4gNyB8IHZhbC5oaSA8PCAyNSkgPj4+IDA7XG4gICAgICAgIHZhbC5oaSA+Pj49IDc7XG4gICAgfVxuICAgIHdoaWxlICh2YWwubG8gPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gdmFsLmxvID4+PiA3O1xuICAgIH1cbiAgICBidWZbcG9zKytdID0gdmFsLmxvO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50NjQgPSBmdW5jdGlvbiB3cml0ZV91aW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQ2NCA9IFdyaXRlci5wcm90b3R5cGUudWludDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSkuenpFbmNvZGUoKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgYm9vbGlzaCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiB3cml0ZV9ib29sKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCB2YWx1ZSA/IDEgOiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlRml4ZWQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICAmIDI1NTtcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdmFsdWUgPj4+IDApO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkMzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkNjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5sbykuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmhpKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBmbG9hdCAoMzIgYml0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHdyaXRlX2Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHdyaXRlX2RvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRSwgOCwgdmFsdWUpO1xufTtcblxudmFyIHdyaXRlQnl0ZXMgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zZXRcbiAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc19mb3IodmFsLCBidWYsIHBvcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHZhbFtpXTtcbiAgICB9O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fHN0cmluZ30gdmFsdWUgQnVmZmVyIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlcyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgaWYgKCFsZW4pXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhciBidWYgPSBXcml0ZXIuYWxsb2MobGVuID0gYmFzZTY0Lmxlbmd0aCh2YWx1ZSkpO1xuICAgICAgICBiYXNlNjQuZGVjb2RlKHZhbHVlLCBidWYsIDApO1xuICAgICAgICB2YWx1ZSA9IGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudWludDMyKGxlbikuX3B1c2god3JpdGVCeXRlcywgbGVuLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0ZjgubGVuZ3RoKHZhbHVlKTtcbiAgICByZXR1cm4gbGVuXG4gICAgICAgID8gdGhpcy51aW50MzIobGVuKS5fcHVzaCh1dGY4LndyaXRlLCBsZW4sIHZhbHVlKVxuICAgICAgICA6IHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhpcyB3cml0ZXIncyBzdGF0ZSBieSBwdXNoaW5nIGl0IHRvIGEgc3RhY2suXG4gKiBDYWxsaW5nIHtAbGluayBXcml0ZXIjcmVzZXR8cmVzZXR9IG9yIHtAbGluayBXcml0ZXIjbGRlbGltfGxkZWxpbX0gcmVzZXRzIHRoZSB3cml0ZXIgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uIGZvcmsoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyk7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgIHRoaXMubGVuID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGxhc3Qgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgICB0aGlzLmhlYWQgICA9IHRoaXMuc3RhdGVzLmhlYWQ7XG4gICAgICAgIHRoaXMudGFpbCAgID0gdGhpcy5zdGF0ZXMudGFpbDtcbiAgICAgICAgdGhpcy5sZW4gICAgPSB0aGlzLnN0YXRlcy5sZW47XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMubmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgICAgIHRoaXMubGVuICA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdG8gdGhlIGxhc3Qgc3RhdGUgYW5kIGFwcGVuZHMgdGhlIGZvcmsgc3RhdGUncyBjdXJyZW50IHdyaXRlIGxlbmd0aCBhcyBhIHZhcmludCBmb2xsb3dlZCBieSBpdHMgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGxkZWxpbSgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgdGFpbCA9IHRoaXMudGFpbCxcbiAgICAgICAgbGVuICA9IHRoaXMubGVuO1xuICAgIHRoaXMucmVzZXQoKS51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gaGVhZC5uZXh0OyAvLyBza2lwIG5vb3BcbiAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQubmV4dCwgLy8gc2tpcCBub29wXG4gICAgICAgIGJ1ZiAgPSB0aGlzLmNvbnN0cnVjdG9yLmFsbG9jKHRoaXMubGVuKSxcbiAgICAgICAgcG9zICA9IDA7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgaGVhZC5mbihoZWFkLnZhbCwgYnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gaGVhZC5sZW47XG4gICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIC8vIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyV3JpdGVyXykge1xuICAgIEJ1ZmZlcldyaXRlciA9IEJ1ZmZlcldyaXRlcl87XG4gICAgV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcldyaXRlcjtcblxuLy8gZXh0ZW5kcyBXcml0ZXJcbnZhciBXcml0ZXIgPSByZXF1aXJlKFwiLi93cml0ZXJcIik7XG4oQnVmZmVyV3JpdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQnVmZmVyV3JpdGVyO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1ZmZlciB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBub2RlIGJ1ZmZlcnMuXG4gKiBAZXh0ZW5kcyBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBCdWZmZXJXcml0ZXIoKSB7XG4gICAgV3JpdGVyLmNhbGwodGhpcyk7XG59XG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcbiAgICAgKiBAcmV0dXJucyB7QnVmZmVyfSBCdWZmZXJcbiAgICAgKi9cbiAgICBCdWZmZXJXcml0ZXIuYWxsb2MgPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmU7XG5cbiAgICBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwuQnVmZmVyICYmIHV0aWwuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiXG4gICAgICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICAgIGJ1Zi5zZXQodmFsLCBwb3MpOyAvLyBmYXN0ZXIgdGhhbiBjb3B5IChyZXF1aXJlcyBub2RlID49IDQgd2hlcmUgQnVmZmVycyBleHRlbmQgVWludDhBcnJheSBhbmQgc2V0IGlzIHByb3Blcmx5IGluaGVyaXRlZClcbiAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIHdyaXRlQnl0ZXNCdWZmZXJfY29weSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgaWYgKHZhbC5jb3B5KSAvLyBCdWZmZXIgdmFsdWVzXG4gICAgICAgICAgICB2YWwuY29weShidWYsIHBvcywgMCwgdmFsLmxlbmd0aCk7XG4gICAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7KSAvLyBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSB2YWxbaSsrXTtcbiAgICAgICAgfTtcbn07XG5cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzX2J1ZmZlcih2YWx1ZSkge1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgdmFsdWUgPSB1dGlsLl9CdWZmZXJfZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIik7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2goQnVmZmVyV3JpdGVyLndyaXRlQnl0ZXNCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVTdHJpbmdCdWZmZXIodmFsLCBidWYsIHBvcykge1xuICAgIGlmICh2YWwubGVuZ3RoIDwgNDApIC8vIHBsYWluIGpzIGlzIGZhc3RlciBmb3Igc2hvcnQgc3RyaW5ncyAocHJvYmFibHkgZHVlIHRvIHJlZHVuZGFudCBhc3NlcnRpb25zKVxuICAgICAgICB1dGlsLnV0Zjgud3JpdGUodmFsLCBidWYsIHBvcyk7XG4gICAgZWxzZSBpZiAoYnVmLnV0ZjhXcml0ZSlcbiAgICAgICAgYnVmLnV0ZjhXcml0ZSh2YWwsIHBvcyk7XG4gICAgZWxzZVxuICAgICAgICBidWYud3JpdGUodmFsLCBwb3MpO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlX3N0cmluZ19idWZmZXIodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRpbC5CdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gICAgdGhpcy51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKVxuICAgICAgICB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBsZW4sIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQG5hbWUgQnVmZmVyV3JpdGVyI2ZpbmlzaFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuXG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRlcjtcblxudmFyIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIEJ1ZmZlclJlYWRlcjsgLy8gY3ljbGljXG5cbnZhciBMb25nQml0cyAgPSB1dGlsLkxvbmdCaXRzLFxuICAgIHV0ZjggICAgICA9IHV0aWwudXRmODtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShyZWFkZXIsIHdyaXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2U6IFwiICsgcmVhZGVyLnBvcyArIFwiICsgXCIgKyAod3JpdGVMZW5ndGggfHwgMSkgKyBcIiA+IFwiICsgcmVhZGVyLmxlbik7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByZWFkZXIgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHJlYWRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBSZWFkZXIoYnVmZmVyKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAdHlwZSB7VWludDhBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZiA9IGJ1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIHBvc2l0aW9uLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wb3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBidWZmZXIubGVuZ3RoO1xufVxuXG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IGZ1bmN0aW9uIGNyZWF0ZV90eXBlZF9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfTtcblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKGJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFkZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5CdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBCdWZmZXJSZWFkZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZV9hcnJheShidWZmZXIpO1xuICAgICAgICAgICAgfSkoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGNyZWF0ZV9hcnJheTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7VWludDhBcnJheXxCdWZmZXJ9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKiBAcmV0dXJucyB7UmVhZGVyfEJ1ZmZlclJlYWRlcn0gQSB7QGxpbmsgQnVmZmVyUmVhZGVyfSBpZiBgYnVmZmVyYCBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGEge0BsaW5rIFJlYWRlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgYnVmZmVyYCBpcyBub3QgYSB2YWxpZCBidWZmZXJcbiAqL1xuUmVhZGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG5SZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnVpbnQzMiA9IChmdW5jdGlvbiByZWFkX3VpbnQzMl9zZXR1cCgpIHtcbiAgICB2YXIgdmFsdWUgPSA0Mjk0OTY3Mjk1OyAvLyBvcHRpbWl6ZXIgdHlwZS1oaW50LCB0ZW5kcyB0byBkZW9wdCBvdGhlcndpc2UgKD8hKVxuICAgIHJldHVybiBmdW5jdGlvbiByZWFkX3VpbnQzMigpIHtcbiAgICAgICAgdmFsdWUgPSAoICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3NdICYgMTI3ICAgICAgICkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8ICA3KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyMSkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAgMTUpIDw8IDI4KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodGhpcy5wb3MgKz0gNSkgPiB0aGlzLmxlbikge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLmxlbjtcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIHJlYWRfaW50MzIoKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ludDMyKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudWludDMyKCk7XG4gICAgcmV0dXJuIHZhbHVlID4+PiAxIF4gLSh2YWx1ZSAmIDEpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkTG9uZ1ZhcmludCgpIHtcbiAgICAvLyB0ZW5kcyB0byBkZW9wdCB3aXRoIGxvY2FsIHZhcnMgZm9yIG9jdGV0IGV0Yy5cbiAgICB2YXIgYml0cyA9IG5ldyBMb25nQml0cygwLCAwKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGxvKVxuICAgICAgICBmb3IgKDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgLy8gMXN0Li40dGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA1dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjgpID4+PiAwO1xuICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA+PiAgNCkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDM7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gMXN0Li4zdGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA0dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAoaGkpXG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIHZhcmludCBlbmNvZGluZ1wiKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciN1aW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjc2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiByZWFkX2Jvb2woKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgIT09IDA7XG59O1xuXG5mdW5jdGlvbiByZWFkRml4ZWQzMl9lbmQoYnVmLCBlbmQpIHsgLy8gbm90ZSB0aGF0IHRoaXMgdXNlcyBgZW5kYCwgbm90IGBwb3NgXG4gICAgcmV0dXJuIChidWZbZW5kIC0gNF1cbiAgICAgICAgICB8IGJ1ZltlbmQgLSAzXSA8PCA4XG4gICAgICAgICAgfCBidWZbZW5kIC0gMl0gPDwgMTZcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gcmVhZF9maXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KTtcbn07XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgvKiB0aGlzOiBSZWFkZXIgKi8pIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDgpO1xuXG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIHppZy16YWcgZW5jb2RlZCBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI3NmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIGZsb2F0ICgzMiBiaXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZmxvYXQgPSBmdW5jdGlvbiByZWFkX2Zsb2F0KCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gNDtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gcmVhZF9kb3VibGUoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZERvdWJsZUxFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gODtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gcmVhZF9ieXRlcygpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy51aW50MzIoKSxcbiAgICAgICAgc3RhcnQgID0gdGhpcy5wb3MsXG4gICAgICAgIGVuZCAgICA9IHRoaXMucG9zICsgbGVuZ3RoO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVuZCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcblxuICAgIHRoaXMucG9zICs9IGxlbmd0aDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpIC8vIHBsYWluIGFycmF5XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zbGljZShzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gc3RhcnQgPT09IGVuZCAvLyBmaXggZm9yIElFIDEwL1dpbjggYW5kIG90aGVycycgc3ViYXJyYXkgcmV0dXJuaW5nIGFycmF5IG9mIHNpemUgMVxuICAgICAgICA/IG5ldyB0aGlzLmJ1Zi5jb25zdHJ1Y3RvcigwKVxuICAgICAgICA6IHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIHN0YXJ0LCBlbmQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHN0cmluZyBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge3N0cmluZ30gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nKCkge1xuICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXMoKTtcbiAgICByZXR1cm4gdXRmOC5yZWFkKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBza2lwcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggaWYga25vd24sIG90aGVyd2lzZSBhIHZhcmludCBpcyBhc3N1bWVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMucG9zICsgbGVuZ3RoID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgfSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHdpcmUgdHlwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3aXJlVHlwZSBXaXJlIHR5cGUgcmVjZWl2ZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXBUeXBlID0gZnVuY3Rpb24od2lyZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgd2hpbGUgKCh3aXJlVHlwZSA9IHRoaXMudWludDMyKCkgJiA3KSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFR5cGUod2lyZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUgKyBcIiBhdCBvZmZzZXQgXCIgKyB0aGlzLnBvcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJSZWFkZXJfKSB7XG4gICAgQnVmZmVyUmVhZGVyID0gQnVmZmVyUmVhZGVyXztcbiAgICBSZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcblxuICAgIHZhciBmbiA9IHV0aWwuTG9uZyA/IFwidG9Mb25nXCIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcInRvTnVtYmVyXCI7XG4gICAgdXRpbC5tZXJnZShSZWFkZXIucHJvdG90eXBlLCB7XG5cbiAgICAgICAgaW50NjQ6IGZ1bmN0aW9uIHJlYWRfaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpbnQ2NDogZnVuY3Rpb24gcmVhZF91aW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ludDY0OiBmdW5jdGlvbiByZWFkX3NpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaXhlZDY0OiBmdW5jdGlvbiByZWFkX2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyUmVhZGVyO1xuXG4vLyBleHRlbmRzIFJlYWRlclxudmFyIFJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbihCdWZmZXJSZWFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWFkZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJSZWFkZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHJlYWRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFJlYWRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGJ1ZmZlcikge1xuICAgIFJlYWRlci5jYWxsKHRoaXMsIGJ1ZmZlcik7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnVmXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbn1cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodXRpbC5CdWZmZXIpXG4gICAgICAgIEJ1ZmZlclJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5CdWZmZXIucHJvdG90eXBlLnNsaWNlO1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nX2J1ZmZlcigpIHtcbiAgICB2YXIgbGVuID0gdGhpcy51aW50MzIoKTsgLy8gbW9kaWZpZXMgcG9zXG4gICAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZVxuICAgICAgICA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKVxuICAgICAgICA6IHRoaXMuYnVmLnRvU3RyaW5nKFwidXRmLThcIiwgdGhpcy5wb3MsIHRoaXMucG9zID0gTWF0aC5taW4odGhpcy5wb3MgKyBsZW4sIHRoaXMubGVuKSk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnl0ZXNcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcn0gVmFsdWUgcmVhZFxuICovXG5cbkJ1ZmZlclJlYWRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gU2VydmljZTtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vLyBFeHRlbmRzIEV2ZW50RW1pdHRlclxuKFNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh1dGlsLkV2ZW50RW1pdHRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IFNlcnZpY2U7XG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBycGMuU2VydmljZU1ldGhvZHxTZXJ2aWNlTWV0aG9kfS5cbiAqXG4gKiBEaWZmZXJzIGZyb20ge0BsaW5rIFJQQ0ltcGxDYWxsYmFja30gaW4gdGhhdCBpdCBpcyBhbiBhY3R1YWwgY2FsbGJhY2sgb2YgYSBzZXJ2aWNlIG1ldGhvZCB3aGljaCBtYXkgbm90IHJldHVybiBgcmVzcG9uc2UgPSBudWxsYC5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2tcbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gKiBAcGFyYW0ge1RSZXN9IFtyZXNwb25zZV0gUmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgcGFydCBvZiBhIHtAbGluayBycGMuU2VydmljZX0gYXMgY3JlYXRlZCBieSB7QGxpbmsgU2VydmljZS5jcmVhdGV9LlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RcbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IFtjYWxsYmFja10gTm9kZS1zdHlsZSBjYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgZXJyb3IsIGlmIGFueSwgYW5kIHRoZSByZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPFRSZXM+Pn0gUHJvbWlzZSBpZiBgY2FsbGJhY2tgIGhhcyBiZWVuIG9taXR0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBSUEMgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQW4gUlBDIHNlcnZpY2UgYXMgcmV0dXJuZWQgYnkge0BsaW5rIFNlcnZpY2UjY3JlYXRlfS5cbiAqIEBleHBvcnRzIHJwYy5TZXJ2aWNlXG4gKiBAZXh0ZW5kcyB1dGlsLkV2ZW50RW1pdHRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1JQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuXG4gICAgaWYgKHR5cGVvZiBycGNJbXBsICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXG4gICAgdXRpbC5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFJQQyBpbXBsZW1lbnRhdGlvbi4gQmVjb21lcyBgbnVsbGAgb25jZSB0aGUgc2VydmljZSBpcyBlbmRlZC5cbiAgICAgKiBAdHlwZSB7UlBDSW1wbHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucnBjSW1wbCA9IHJwY0ltcGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWVzdERlbGltaXRlZCA9IEJvb2xlYW4ocmVxdWVzdERlbGltaXRlZCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlRGVsaW1pdGVkID0gQm9vbGVhbihyZXNwb25zZURlbGltaXRlZCk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBzZXJ2aWNlIG1ldGhvZCB0aHJvdWdoIHtAbGluayBycGMuU2VydmljZSNycGNJbXBsfHJwY0ltcGx9LlxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8VFJlcSxUUmVzPn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXE+fSByZXF1ZXN0Q3RvciBSZXF1ZXN0IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXM+fSByZXNwb25zZUN0b3IgUmVzcG9uc2UgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gY2FsbGJhY2sgU2VydmljZSBjYWxsYmFja1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJwY0NhbGwgPSBmdW5jdGlvbiBycGNDYWxsKG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCwgY2FsbGJhY2spIHtcblxuICAgIGlmICghcmVxdWVzdClcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicmVxdWVzdCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIWNhbGxiYWNrKVxuICAgICAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UocnBjQ2FsbCwgc2VsZiwgbWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0KTtcblxuICAgIGlmICghc2VsZi5ycGNJbXBsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKEVycm9yKFwiYWxyZWFkeSBlbmRlZFwiKSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLnJwY0ltcGwoXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0Q3RvcltzZWxmLnJlcXVlc3REZWxpbWl0ZWQgPyBcImVuY29kZURlbGltaXRlZFwiIDogXCJlbmNvZGVcIl0ocmVxdWVzdCkuZmluaXNoKCksXG4gICAgICAgICAgICBmdW5jdGlvbiBycGNDYWxsYmFjayhlcnIsIHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kKC8qIGVuZGVkQnlSUEMgKi8gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgaW5zdGFuY2VvZiByZXNwb25zZUN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlQ3RvcltzZWxmLnJlc3BvbnNlRGVsaW1pdGVkID8gXCJkZWNvZGVEZWxpbWl0ZWRcIiA6IFwiZGVjb2RlXCJdKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImRhdGFcIiwgcmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlcnIpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIEVuZHMgdGhpcyBzZXJ2aWNlIGFuZCBlbWl0cyB0aGUgYGVuZGAgZXZlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtlbmRlZEJ5UlBDPWZhbHNlXSBXaGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGVuZGVkIGJ5IHRoZSBSUEMgaW1wbGVtZW50YXRpb24uXG4gKiBAcmV0dXJucyB7cnBjLlNlcnZpY2V9IGB0aGlzYFxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiBlbmQoZW5kZWRCeVJQQykge1xuICAgIGlmICh0aGlzLnJwY0ltcGwpIHtcbiAgICAgICAgaWYgKCFlbmRlZEJ5UlBDKSAvLyBzaWduYWwgZW5kIHRvIHJwY0ltcGxcbiAgICAgICAgICAgIHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgdGhpcy5ycGNJbXBsID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBTdHJlYW1pbmcgUlBDIGhlbHBlcnMuXG4gKiBAbmFtZXNwYWNlXG4gKi9cbnZhciBycGMgPSBleHBvcnRzO1xuXG4vKipcbiAqIFJQQyBpbXBsZW1lbnRhdGlvbiBwYXNzZWQgdG8ge0BsaW5rIFNlcnZpY2UjY3JlYXRlfSBwZXJmb3JtaW5nIGEgc2VydmljZSByZXF1ZXN0IG9uIG5ldHdvcmsgbGV2ZWwsIGkuZS4gYnkgdXRpbGl6aW5nIGh0dHAgcmVxdWVzdHMgb3Igd2Vic29ja2V0cy5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPE1lc3NhZ2U8e30+LE1lc3NhZ2U8e30+Pn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHtVaW50OEFycmF5fSByZXF1ZXN0RGF0YSBSZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7UlBDSW1wbENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBycGNJbXBsKG1ldGhvZCwgcmVxdWVzdERhdGEsIGNhbGxiYWNrKSB7XG4gKiAgICAgaWYgKHByb3RvYnVmLnV0aWwubGNGaXJzdChtZXRob2QubmFtZSkgIT09IFwibXlNZXRob2RcIikgLy8gY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBjb2RlXG4gKiAgICAgICAgIHRocm93IEVycm9yKFwibm8gc3VjaCBtZXRob2RcIik7XG4gKiAgICAgYXN5bmNocm9ub3VzbHlPYnRhaW5BUmVzcG9uc2UocmVxdWVzdERhdGEsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2VEYXRhKSB7XG4gKiAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2VEYXRhKTtcbiAqICAgICB9KTtcbiAqIH1cbiAqL1xuXG4vKipcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgUlBDSW1wbH0uXG4gKiBAdHlwZWRlZiBSUENJbXBsQ2FsbGJhY2tcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxuICogQHBhcmFtIHtVaW50OEFycmF5fG51bGx9IFtyZXNwb25zZV0gUmVzcG9uc2UgZGF0YSBvciBgbnVsbGAgdG8gc2lnbmFsIGVuZCBvZiBzdHJlYW0sIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbnJwYy5TZXJ2aWNlID0gcmVxdWlyZShcIi4vcnBjL3NlcnZpY2VcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKlxuICogTmFtZWQgcm9vdHMuXG4gKiBUaGlzIGlzIHdoZXJlIHBianMgc3RvcmVzIGdlbmVyYXRlZCBzdHJ1Y3R1cmVzICh0aGUgb3B0aW9uIGAtciwgLS1yb290YCBzcGVjaWZpZXMgYSBuYW1lKS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgbWFudWFsbHkgdG8gbWFrZSByb290cyBhdmFpbGFibGUgYWNjcm9zcyBtb2R1bGVzLlxuICogQG5hbWUgcm9vdHNcbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxSb290Pn1cbiAqIEBleGFtcGxlXG4gKiAvLyBwYmpzIC1yIG15cm9vdCAtbyBjb21waWxlZC5qcyAuLi5cbiAqXG4gKiAvLyBpbiBhbm90aGVyIG1vZHVsZTpcbiAqIHJlcXVpcmUoXCIuL2NvbXBpbGVkLmpzXCIpO1xuICpcbiAqIC8vIGluIGFueSBzdWJzZXF1ZW50IG1vZHVsZTpcbiAqIHZhciByb290ID0gcHJvdG9idWYucm9vdHNbXCJteXJvb3RcIl07XG4gKi9cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHByb3RvYnVmID0gZXhwb3J0cztcblxuLyoqXG4gKiBCdWlsZCB0eXBlLCBvbmUgb2YgYFwiZnVsbFwiYCwgYFwibGlnaHRcImAgb3IgYFwibWluaW1hbFwiYC5cbiAqIEBuYW1lIGJ1aWxkXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGNvbnN0XG4gKi9cbnByb3RvYnVmLmJ1aWxkID0gXCJtaW5pbWFsXCI7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLldyaXRlciAgICAgICA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlcldyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlcl9idWZmZXJcIik7XG5wcm90b2J1Zi5SZWFkZXIgICAgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJfYnVmZmVyXCIpO1xuXG4vLyBVdGlsaXR5XG5wcm90b2J1Zi51dGlsICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5wcm90b2J1Zi5ycGMgICAgICAgICAgPSByZXF1aXJlKFwiLi9ycGNcIik7XG5wcm90b2J1Zi5yb290cyAgICAgICAgPSByZXF1aXJlKFwiLi9yb290c1wiKTtcbnByb3RvYnVmLmNvbmZpZ3VyZSAgICA9IGNvbmZpZ3VyZTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qKlxuICogUmVjb25maWd1cmVzIHRoZSBsaWJyYXJ5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmUoKSB7XG4gICAgcHJvdG9idWYudXRpbC5fY29uZmlndXJlKCk7XG4gICAgcHJvdG9idWYuV3JpdGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyV3JpdGVyKTtcbiAgICBwcm90b2J1Zi5SZWFkZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJSZWFkZXIpO1xufVxuXG4vLyBTZXQgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudFxuY29uZmlndXJlKCk7XG4iLCIvLyBtaW5pbWFsIGxpYnJhcnkgZW50cnkgcG9pbnQuXG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9zcmMvaW5kZXgtbWluaW1hbFwiKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQXVkaW9Tb3VyY2Uge1xuICBwbGF5aW5nOiBib29sZWFuXG4gIHZvbHVtZTogbnVtYmVyXG4gIGxvb3A6IGJvb2xlYW5cbiAgcGl0Y2g6IG51bWJlclxuICBwbGF5ZWRBdFRpbWVzdGFtcDogbnVtYmVyXG4gIGF1ZGlvQ2xpcFVybDogc3RyaW5nXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF1ZGlvU291cmNlKCk6IFBCQXVkaW9Tb3VyY2Uge1xuICByZXR1cm4geyBwbGF5aW5nOiBmYWxzZSwgdm9sdW1lOiAwLCBsb29wOiBmYWxzZSwgcGl0Y2g6IDAsIHBsYXllZEF0VGltZXN0YW1wOiAwLCBhdWRpb0NsaXBVcmw6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdWRpb1NvdXJjZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXVkaW9Tb3VyY2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5wbGF5aW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52b2x1bWUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2Uudm9sdW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sb29wID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UubG9vcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGl0Y2ggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2UucGl0Y2gpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBsYXllZEF0VGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnBsYXllZEF0VGltZXN0YW1wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hdWRpb0NsaXBVcmwgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUwKS5zdHJpbmcobWVzc2FnZS5hdWRpb0NsaXBVcmwpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF1ZGlvU291cmNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF1ZGlvU291cmNlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5wbGF5aW5nID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZvbHVtZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubG9vcCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5waXRjaCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UucGxheWVkQXRUaW1lc3RhbXAgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLmF1ZGlvQ2xpcFVybCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uLy4uL2J1aWx0LWluLXR5cGVzL0Vjc1R5cGUnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdWRpb1NvdXJjZSB9IGZyb20gJy4vcGIvQXVkaW9Tb3VyY2UuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAyMFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXVkaW9Tb3VyY2U6IEVjc1R5cGU8UEJBdWRpb1NvdXJjZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdWRpb1NvdXJjZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXVkaW9Tb3VyY2UuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXVkaW9Tb3VyY2Uge1xuICAgIHJldHVybiBQQkF1ZGlvU291cmNlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQXVkaW9TdHJlYW0ge1xuICBwbGF5aW5nOiBib29sZWFuXG4gIHZvbHVtZTogbnVtYmVyXG4gIHVybDogc3RyaW5nXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF1ZGlvU3RyZWFtKCk6IFBCQXVkaW9TdHJlYW0ge1xuICByZXR1cm4geyBwbGF5aW5nOiBmYWxzZSwgdm9sdW1lOiAwLCB1cmw6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdWRpb1N0cmVhbSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXVkaW9TdHJlYW0sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5wbGF5aW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52b2x1bWUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2Uudm9sdW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS51cmwgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS51cmwpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF1ZGlvU3RyZWFtIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF1ZGlvU3RyZWFtKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5wbGF5aW5nID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZvbHVtZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudXJsID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF1ZGlvU3RyZWFtIH0gZnJvbSAnLi9wYi9BdWRpb1N0cmVhbS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDIxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb1N0cmVhbTogRWNzVHlwZTxQQkF1ZGlvU3RyZWFtPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF1ZGlvU3RyZWFtLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdWRpb1N0cmVhbS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdWRpb1N0cmVhbSB7XG4gICAgcmV0dXJuIFBCQXVkaW9TdHJlYW0uZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF1ZGlvU3RyZWFtIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdWRpb1N0cmVhbS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCAqIGFzIF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJCb3hTaGFwZSB7XG4gIHdpdGhDb2xsaXNpb25zOiBib29sZWFuXG4gIGlzUG9pbnRlckJsb2NrZXI6IGJvb2xlYW5cbiAgLyoqIFRPRE86IHNob3VsZCB2aXNpYmxlIGJlIGFub3RoZXIgY29tcG9uZW50PyB0aGF0IG1heWJlIGFmZmVjdHMgYWxsIHRoZSBlbnRpdGllcyAqL1xuICB2aXNpYmxlOiBib29sZWFuXG4gIHV2czogbnVtYmVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQm94U2hhcGUoKTogUEJCb3hTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiBmYWxzZSwgaXNQb2ludGVyQmxvY2tlcjogZmFsc2UsIHZpc2libGU6IGZhbHNlLCB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJCb3hTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQm94U2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQm94U2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQm94U2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQm94U2hhcGUgfSBmcm9tICcuL3BiL0JveFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlOiBFY3NUeXBlPFBCQm94U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQm94U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkJveFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkJveFNoYXBlIHtcbiAgICByZXR1cm4gUEJCb3hTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQm94U2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkN5bGluZGVyU2hhcGUge1xuICB3aXRoQ29sbGlzaW9uczogYm9vbGVhblxuICBpc1BvaW50ZXJCbG9ja2VyOiBib29sZWFuXG4gIC8qKiBUT0RPOiBzaG91bGQgdmlzaWJsZSBiZSBhbm90aGVyIGNvbXBvbmVudD8gdGhhdCBtYXliZSBhZmZlY3RzIGFsbCB0aGUgZW50aXRpZXMgKi9cbiAgdmlzaWJsZTogYm9vbGVhblxuICByYWRpdXNUb3A6IG51bWJlclxuICByYWRpdXNCb3R0b206IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDeWxpbmRlclNoYXBlKCk6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiBmYWxzZSwgaXNQb2ludGVyQmxvY2tlcjogZmFsc2UsIHZpc2libGU6IGZhbHNlLCByYWRpdXNUb3A6IDAsIHJhZGl1c0JvdHRvbTogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQ3lsaW5kZXJTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQ3lsaW5kZXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNUb3AgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UucmFkaXVzQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkN5bGluZGVyU2hhcGUgfSBmcm9tICcuL3BiL0N5bGluZGVyU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ3lsaW5kZXJTaGFwZTogRWNzVHlwZTxQQkN5bGluZGVyU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ3lsaW5kZXJTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQ3lsaW5kZXJTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICByZXR1cm4gUEJDeWxpbmRlclNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJDeWxpbmRlclNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkdMVEZTaGFwZSB7XG4gIHdpdGhDb2xsaXNpb25zOiBib29sZWFuXG4gIGlzUG9pbnRlckJsb2NrZXI6IGJvb2xlYW5cbiAgdmlzaWJsZTogYm9vbGVhblxuICBzcmM6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJHTFRGU2hhcGUoKTogUEJHTFRGU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogZmFsc2UsIGlzUG9pbnRlckJsb2NrZXI6IGZhbHNlLCB2aXNpYmxlOiBmYWxzZSwgc3JjOiAnJyB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCR0xURlNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJHTFRGU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJHTFRGU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCR0xURlNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkdMVEZTaGFwZSB9IGZyb20gJy4vcGIvR0xURlNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEdMVEZTaGFwZTogRWNzVHlwZTxQQkdMVEZTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJHTFRGU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkdMVEZTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJHTFRGU2hhcGUge1xuICAgIHJldHVybiBQQkdMVEZTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCR0xURlNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJHTFRGU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yMyB7XG4gIHI6IG51bWJlclxuICBnOiBudW1iZXJcbiAgYjogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2xvcjMoKTogQ29sb3IzIHtcbiAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENvbG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5iICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLmIpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2xvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvbG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuYiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCAqIGFzIF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJORlRTaGFwZSB7XG4gIHdpdGhDb2xsaXNpb25zOiBib29sZWFuXG4gIGlzUG9pbnRlckJsb2NrZXI6IGJvb2xlYW5cbiAgLyoqIFRPRE86IHNob3VsZCB2aXNpYmxlIGJlIGFub3RoZXIgY29tcG9uZW50PyB0aGF0IG1heWJlIGFmZmVjdHMgYWxsIHRoZSBlbnRpdGllcyAqL1xuICB2aXNpYmxlOiBib29sZWFuXG4gIHNyYzogc3RyaW5nXG4gIGFzc2V0SWQ6IHN0cmluZ1xuICBzdHlsZTogbnVtYmVyXG4gIGNvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTkZUU2hhcGUoKTogUEJORlRTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IGZhbHNlLFxuICAgIGlzUG9pbnRlckJsb2NrZXI6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIHNyYzogJycsXG4gICAgYXNzZXRJZDogJycsXG4gICAgc3R5bGU6IDAsXG4gICAgY29sb3I6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTkZUU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk5GVFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNyYyAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQpLnN0cmluZyhtZXNzYWdlLnNyYylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXNzZXRJZCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyhtZXNzYWdlLmFzc2V0SWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0eWxlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLnN0eWxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuY29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTkZUU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTkZUU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5hc3NldElkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2Uuc3R5bGUgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTkZUU2hhcGUgfSBmcm9tICcuL3BiL05GVFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE5GVFNoYXBlOiBFY3NUeXBlPFBCTkZUU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTkZUU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk5GVFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk5GVFNoYXBlIHtcbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTkZUU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlBsYW5lU2hhcGUge1xuICB3aXRoQ29sbGlzaW9uczogYm9vbGVhblxuICBpc1BvaW50ZXJCbG9ja2VyOiBib29sZWFuXG4gIC8qKiBUT0RPOiBzaG91bGQgdmlzaWJsZSBiZSBhbm90aGVyIGNvbXBvbmVudD8gdGhhdCBtYXliZSBhZmZlY3RzIGFsbCB0aGUgZW50aXRpZXMgKi9cbiAgdmlzaWJsZTogYm9vbGVhblxuICAvKiogVE9ETzogdGhpcyBjb3VsZCBiZSBiZXR0ZXIgc2VyaWFsaXplZCBhcyB1MDAgdjAwIHUwMSB2MDEgdTEwIHYxMCB1MTEgdjExIGZvciBzcGVlZCAqL1xuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKTogUEJQbGFuZVNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IGZhbHNlLCBpc1BvaW50ZXJCbG9ja2VyOiBmYWxzZSwgdmlzaWJsZTogZmFsc2UsIHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBsYW5lU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBsYW5lU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQbGFuZVNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBsYW5lU2hhcGUgfSBmcm9tICcuL3BiL1BsYW5lU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUGxhbmVTaGFwZTogRWNzVHlwZTxQQlBsYW5lU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUGxhbmVTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUGxhbmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICByZXR1cm4gUEJQbGFuZVNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJQbGFuZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQbGFuZVNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlNwaGVyZVNoYXBlIHtcbiAgd2l0aENvbGxpc2lvbnM6IGJvb2xlYW5cbiAgaXNQb2ludGVyQmxvY2tlcjogYm9vbGVhblxuICB2aXNpYmxlOiBib29sZWFuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlNwaGVyZVNoYXBlKCk6IFBCU3BoZXJlU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogZmFsc2UsIGlzUG9pbnRlckJsb2NrZXI6IGZhbHNlLCB2aXNpYmxlOiBmYWxzZSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCU3BoZXJlU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlNwaGVyZVNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlNwaGVyZVNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlNwaGVyZVNoYXBlIH0gZnJvbSAnLi9wYi9TcGhlcmVTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE1XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZTogRWNzVHlwZTxQQlNwaGVyZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlNwaGVyZVNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJTcGhlcmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJTcGhlcmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgKiBhcyBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVGV4dFNoYXBlIHtcbiAgdGV4dDogc3RyaW5nXG4gIC8qKiB0aGlzIHNob3VsZCBiZSByZW1vdmVkICovXG4gIHZpc2libGU6IGJvb2xlYW5cbiAgZm9udDogc3RyaW5nXG4gIG9wYWNpdHk6IG51bWJlclxuICBmb250U2l6ZTogbnVtYmVyXG4gIGZvbnRBdXRvU2l6ZTogYm9vbGVhblxuICBoVGV4dEFsaWduOiBzdHJpbmdcbiAgdlRleHRBbGlnbjogc3RyaW5nXG4gIHdpZHRoOiBudW1iZXJcbiAgaGVpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdSaWdodDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBwYWRkaW5nTGVmdDogbnVtYmVyXG4gIGxpbmVTcGFjaW5nOiBudW1iZXJcbiAgbGluZUNvdW50OiBudW1iZXJcbiAgdGV4dFdyYXBwaW5nOiBib29sZWFuXG4gIHNoYWRvd0JsdXI6IG51bWJlclxuICBzaGFkb3dPZmZzZXRYOiBudW1iZXJcbiAgc2hhZG93T2Zmc2V0WTogbnVtYmVyXG4gIG91dGxpbmVXaWR0aDogbnVtYmVyXG4gIHNoYWRvd0NvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgb3V0bGluZUNvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgdGV4dENvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVGV4dFNoYXBlKCk6IFBCVGV4dFNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiAnJyxcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBmb250OiAnJyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIGZvbnRTaXplOiAwLFxuICAgIGZvbnRBdXRvU2l6ZTogZmFsc2UsXG4gICAgaFRleHRBbGlnbjogJycsXG4gICAgdlRleHRBbGlnbjogJycsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgcGFkZGluZ1JpZ2h0OiAwLFxuICAgIHBhZGRpbmdCb3R0b206IDAsXG4gICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgbGluZVNwYWNpbmc6IDAsXG4gICAgbGluZUNvdW50OiAwLFxuICAgIHRleHRXcmFwcGluZzogZmFsc2UsXG4gICAgc2hhZG93Qmx1cjogMCxcbiAgICBzaGFkb3dPZmZzZXRYOiAwLFxuICAgIHNoYWRvd09mZnNldFk6IDAsXG4gICAgb3V0bGluZVdpZHRoOiAwLFxuICAgIHNoYWRvd0NvbG9yOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgdGV4dENvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlRleHRTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVGV4dFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGV4dCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuZm9udClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3BhY2l0eSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5vcGFjaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250U2l6ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5mb250U2l6ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udEF1dG9TaXplID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5ib29sKG1lc3NhZ2UuZm9udEF1dG9TaXplKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oVGV4dEFsaWduICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuaFRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudlRleHRBbGlnbiAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLnZUZXh0QWxpZ24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLndpZHRoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDc3KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoODUpLmZsb2F0KG1lc3NhZ2UuaGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDkzKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdSaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDEpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1JpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwOSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nTGVmdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ0xlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxpbmVTcGFjaW5nICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyNSkuZmxvYXQobWVzc2FnZS5saW5lU3BhY2luZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZUNvdW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuaW50MzIobWVzc2FnZS5saW5lQ291bnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRleHRXcmFwcGluZyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzYpLmJvb2wobWVzc2FnZS50ZXh0V3JhcHBpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd0JsdXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLnNoYWRvd0JsdXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTU3KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFkgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY1KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVXaWR0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNzMpLmZsb2F0KG1lc3NhZ2Uub3V0bGluZVdpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uuc2hhZG93Q29sb3IsIHdyaXRlci51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uub3V0bGluZUNvbG9yLCB3cml0ZXIudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVGV4dFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuZm9udCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9wYWNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmZvbnRTaXplID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5mb250QXV0b1NpemUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuaFRleHRBbGlnbiA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLnZUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS53aWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLmhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5saW5lU3BhY2luZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmxpbmVDb3VudCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBtZXNzYWdlLnRleHRXcmFwcGluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Qmx1ciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd09mZnNldFggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRZID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZVdpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5vdXRsaW5lQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uLy4uL2J1aWx0LWluLXR5cGVzL0Vjc1R5cGUnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJUZXh0U2hhcGUgfSBmcm9tICcuL3BiL1RleHRTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDMwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0U2hhcGU6IEVjc1R5cGU8UEJUZXh0U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVGV4dFNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJUZXh0U2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVGV4dFNoYXBlIHtcbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlRleHRTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVGV4dFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGVudW0gWUdQb3NpdGlvblR5cGUge1xuICBZR1Bvc2l0aW9uVHlwZVN0YXRpYyA9IDAsXG4gIFlHUG9zaXRpb25UeXBlUmVsYXRpdmUgPSAxLFxuICBZR1Bvc2l0aW9uVHlwZUFic29sdXRlID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGVudW0gWUdBbGlnbiB7XG4gIFlHQWxpZ25BdXRvID0gMCxcbiAgWUdBbGlnbkZsZXhTdGFydCA9IDEsXG4gIFlHQWxpZ25DZW50ZXIgPSAyLFxuICBZR0FsaWduRmxleEVuZCA9IDMsXG4gIFlHQWxpZ25TdHJldGNoID0gNCxcbiAgWUdBbGlnbkJhc2VsaW5lID0gNSxcbiAgWUdBbGlnblNwYWNlQmV0d2VlbiA9IDYsXG4gIFlHQWxpZ25TcGFjZUFyb3VuZCA9IDcsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHVW5pdCB7XG4gIFlHVW5pdFVuZGVmaW5lZCA9IDAsXG4gIFlHVW5pdFBvaW50ID0gMSxcbiAgWUdVbml0UGVyY2VudCA9IDIsXG4gIFlHVW5pdEF1dG8gPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgZW51bSBZR0RpcmVjdGlvbiB7XG4gIFlHRGlyZWN0aW9uSW5oZXJpdCA9IDAsXG4gIFlHRGlyZWN0aW9uTFRSID0gMSxcbiAgWUdEaXJlY3Rpb25SVEwgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgZW51bSBZR0ZsZXhEaXJlY3Rpb24ge1xuICBZR0ZsZXhEaXJlY3Rpb25Db2x1bW4gPSAwLFxuICBZR0ZsZXhEaXJlY3Rpb25Db2x1bW5SZXZlcnNlID0gMSxcbiAgWUdGbGV4RGlyZWN0aW9uUm93ID0gMixcbiAgWUdGbGV4RGlyZWN0aW9uUm93UmV2ZXJzZSA9IDMsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHV3JhcCB7XG4gIFlHV3JhcE5vV3JhcCA9IDAsXG4gIFlHV3JhcFdyYXAgPSAxLFxuICBZR1dyYXBXcmFwUmV2ZXJzZSA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHSnVzdGlmeSB7XG4gIFlHSnVzdGlmeUZsZXhTdGFydCA9IDAsXG4gIFlHSnVzdGlmeUNlbnRlciA9IDEsXG4gIFlHSnVzdGlmeUZsZXhFbmQgPSAyLFxuICBZR0p1c3RpZnlTcGFjZUJldHdlZW4gPSAzLFxuICBZR0p1c3RpZnlTcGFjZUFyb3VuZCA9IDQsXG4gIFlHSnVzdGlmeVNwYWNlRXZlbmx5ID0gNSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGVudW0gWUdPdmVyZmxvdyB7XG4gIFlHT3ZlcmZsb3dWaXNpYmxlID0gMCxcbiAgWUdPdmVyZmxvd0hpZGRlbiA9IDEsXG4gIFlHT3ZlcmZsb3dTY3JvbGwgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgZW51bSBZR0Rpc3BsYXkge1xuICBZR0Rpc3BsYXlGbGV4ID0gMCxcbiAgWUdEaXNwbGF5Tm9uZSA9IDEsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBlbnVtIFlHRWRnZSB7XG4gIFlHRWRnZUxlZnQgPSAwLFxuICBZR0VkZ2VUb3AgPSAxLFxuICBZR0VkZ2VSaWdodCA9IDIsXG4gIFlHRWRnZUJvdHRvbSA9IDMsXG4gIFlHRWRnZVN0YXJ0ID0gNCxcbiAgWUdFZGdlRW5kID0gNSxcbiAgWUdFZGdlSG9yaXpvbnRhbCA9IDYsXG4gIFlHRWRnZVZlcnRpY2FsID0gNyxcbiAgWUdFZGdlQWxsID0gOCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQlVpVHJhbnNmb3JtIHtcbiAgcG9zaXRpb25UeXBlOiBZR1Bvc2l0aW9uVHlwZVxuICBhbGlnbkNvbnRlbnQ6IFlHQWxpZ25cbiAgYWxpZ25JdGVtczogWUdBbGlnblxuICBhbGlnblNlbGY6IFlHQWxpZ25cbiAgZmxleERpcmVjdGlvbjogWUdGbGV4RGlyZWN0aW9uXG4gIGZsZXhXcmFwOiBZR1dyYXBcbiAganVzdGlmeUNvbnRlbnQ6IFlHSnVzdGlmeVxuICBvdmVyZmxvdzogWUdPdmVyZmxvd1xuICBkaXNwbGF5OiBZR0Rpc3BsYXlcbiAgZGlyZWN0aW9uOiBZR0RpcmVjdGlvblxuICBmbGV4OiBudW1iZXJcbiAgZmxleEJhc2lzVW5pdDogWUdVbml0XG4gIGZsZXhCYXNpczogbnVtYmVyXG4gIGZsZXhHcm93OiBudW1iZXJcbiAgZmxleFNocmluazogbnVtYmVyXG4gIHdpZHRoVW5pdDogWUdVbml0XG4gIHdpZHRoOiBudW1iZXJcbiAgaGVpZ2h0VW5pdDogWUdVbml0XG4gIGhlaWdodDogbnVtYmVyXG4gIG1pbldpZHRoVW5pdDogWUdVbml0XG4gIG1pbldpZHRoOiBudW1iZXJcbiAgbWluSGVpZ2h0VW5pdDogWUdVbml0XG4gIG1pbkhlaWdodDogbnVtYmVyXG4gIG1heFdpZHRoVW5pdDogWUdVbml0XG4gIG1heFdpZHRoOiBudW1iZXJcbiAgbWF4SGVpZ2h0VW5pdDogWUdVbml0XG4gIG1heEhlaWdodDogbnVtYmVyXG4gIHBvc2l0aW9uTGVmdFVuaXQ6IFlHVW5pdFxuICBwb3NpdGlvbkxlZnQ6IG51bWJlclxuICBwb3NpdGlvblRvcFVuaXQ6IFlHVW5pdFxuICBwb3NpdGlvblRvcDogbnVtYmVyXG4gIHBvc2l0aW9uUmlnaHRVbml0OiBZR1VuaXRcbiAgcG9zaXRpb25SaWdodDogbnVtYmVyXG4gIHBvc2l0aW9uQm90dG9tVW5pdDogWUdVbml0XG4gIHBvc2l0aW9uQm90dG9tOiBudW1iZXJcbiAgLyoqIG1hcmdpbiAqL1xuICBtYXJnaW5MZWZ0VW5pdDogWUdVbml0XG4gIG1hcmdpbkxlZnQ6IG51bWJlclxuICBtYXJnaW5Ub3BVbml0OiBZR1VuaXRcbiAgbWFyZ2luVG9wOiBudW1iZXJcbiAgbWFyZ2luUmlnaHRVbml0OiBZR1VuaXRcbiAgbWFyZ2luUmlnaHQ6IG51bWJlclxuICBtYXJnaW5Cb3R0b21Vbml0OiBZR1VuaXRcbiAgbWFyZ2luQm90dG9tOiBudW1iZXJcbiAgcGFkZGluZ0xlZnRVbml0OiBZR1VuaXRcbiAgcGFkZGluZ0xlZnQ6IG51bWJlclxuICBwYWRkaW5nVG9wVW5pdDogWUdVbml0XG4gIHBhZGRpbmdUb3A6IG51bWJlclxuICBwYWRkaW5nUmlnaHRVbml0OiBZR1VuaXRcbiAgcGFkZGluZ1JpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ0JvdHRvbVVuaXQ6IFlHVW5pdFxuICBwYWRkaW5nQm90dG9tOiBudW1iZXJcbiAgYm9yZGVyTGVmdDogbnVtYmVyXG4gIGJvcmRlclRvcDogbnVtYmVyXG4gIGJvcmRlclJpZ2h0OiBudW1iZXJcbiAgYm9yZGVyQm90dG9tOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVWlUcmFuc2Zvcm0oKTogUEJVaVRyYW5zZm9ybSB7XG4gIHJldHVybiB7XG4gICAgcG9zaXRpb25UeXBlOiAwLFxuICAgIGFsaWduQ29udGVudDogMCxcbiAgICBhbGlnbkl0ZW1zOiAwLFxuICAgIGFsaWduU2VsZjogMCxcbiAgICBmbGV4RGlyZWN0aW9uOiAwLFxuICAgIGZsZXhXcmFwOiAwLFxuICAgIGp1c3RpZnlDb250ZW50OiAwLFxuICAgIG92ZXJmbG93OiAwLFxuICAgIGRpc3BsYXk6IDAsXG4gICAgZGlyZWN0aW9uOiAwLFxuICAgIGZsZXg6IDAsXG4gICAgZmxleEJhc2lzVW5pdDogMCxcbiAgICBmbGV4QmFzaXM6IDAsXG4gICAgZmxleEdyb3c6IDAsXG4gICAgZmxleFNocmluazogMCxcbiAgICB3aWR0aFVuaXQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0VW5pdDogMCxcbiAgICBoZWlnaHQ6IDAsXG4gICAgbWluV2lkdGhVbml0OiAwLFxuICAgIG1pbldpZHRoOiAwLFxuICAgIG1pbkhlaWdodFVuaXQ6IDAsXG4gICAgbWluSGVpZ2h0OiAwLFxuICAgIG1heFdpZHRoVW5pdDogMCxcbiAgICBtYXhXaWR0aDogMCxcbiAgICBtYXhIZWlnaHRVbml0OiAwLFxuICAgIG1heEhlaWdodDogMCxcbiAgICBwb3NpdGlvbkxlZnRVbml0OiAwLFxuICAgIHBvc2l0aW9uTGVmdDogMCxcbiAgICBwb3NpdGlvblRvcFVuaXQ6IDAsXG4gICAgcG9zaXRpb25Ub3A6IDAsXG4gICAgcG9zaXRpb25SaWdodFVuaXQ6IDAsXG4gICAgcG9zaXRpb25SaWdodDogMCxcbiAgICBwb3NpdGlvbkJvdHRvbVVuaXQ6IDAsXG4gICAgcG9zaXRpb25Cb3R0b206IDAsXG4gICAgbWFyZ2luTGVmdFVuaXQ6IDAsXG4gICAgbWFyZ2luTGVmdDogMCxcbiAgICBtYXJnaW5Ub3BVbml0OiAwLFxuICAgIG1hcmdpblRvcDogMCxcbiAgICBtYXJnaW5SaWdodFVuaXQ6IDAsXG4gICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgbWFyZ2luQm90dG9tVW5pdDogMCxcbiAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgcGFkZGluZ0xlZnRVbml0OiAwLFxuICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgIHBhZGRpbmdUb3BVbml0OiAwLFxuICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgcGFkZGluZ1JpZ2h0VW5pdDogMCxcbiAgICBwYWRkaW5nUmlnaHQ6IDAsXG4gICAgcGFkZGluZ0JvdHRvbVVuaXQ6IDAsXG4gICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICBib3JkZXJMZWZ0OiAwLFxuICAgIGJvcmRlclRvcDogMCxcbiAgICBib3JkZXJSaWdodDogMCxcbiAgICBib3JkZXJCb3R0b206IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlVpVHJhbnNmb3JtID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJVaVRyYW5zZm9ybSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uVHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uVHlwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxpZ25Db250ZW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmFsaWduQ29udGVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxpZ25JdGVtcyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS5hbGlnbkl0ZW1zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGlnblNlbGYgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UuYWxpZ25TZWxmKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4RGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLmZsZXhEaXJlY3Rpb24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhXcmFwICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLmZsZXhXcmFwKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qdXN0aWZ5Q29udGVudCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1NikuaW50MzIobWVzc2FnZS5qdXN0aWZ5Q29udGVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3ZlcmZsb3cgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjQpLmludDMyKG1lc3NhZ2Uub3ZlcmZsb3cpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3BsYXkgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UuZGlzcGxheSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLmRpcmVjdGlvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5mbGV4KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4QmFzaXNVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwNCkuaW50MzIobWVzc2FnZS5mbGV4QmFzaXNVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4QmFzaXMgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLmZsZXhCYXNpcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleEdyb3cgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmZsZXhHcm93KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4U2hyaW5rICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzMykuZmxvYXQobWVzc2FnZS5mbGV4U2hyaW5rKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5pbnQzMihtZXNzYWdlLndpZHRoVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2lkdGggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE1MikuaW50MzIobWVzc2FnZS5oZWlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY1KS5mbG9hdChtZXNzYWdlLmhlaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluV2lkdGhVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2OCkuaW50MzIobWVzc2FnZS5taW5XaWR0aFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1pbldpZHRoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4MSkuZmxvYXQobWVzc2FnZS5taW5XaWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluSGVpZ2h0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxODQpLmludDMyKG1lc3NhZ2UubWluSGVpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluSGVpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE5NykuZmxvYXQobWVzc2FnZS5taW5IZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heFdpZHRoVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNDgpLmludDMyKG1lc3NhZ2UubWF4V2lkdGhVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhXaWR0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNjEpLmZsb2F0KG1lc3NhZ2UubWF4V2lkdGgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heEhlaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjY0KS5pbnQzMihtZXNzYWdlLm1heEhlaWdodFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heEhlaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNzcpLmZsb2F0KG1lc3NhZ2UubWF4SGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkxlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyOCkuaW50MzIobWVzc2FnZS5wb3NpdGlvbkxlZnRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQxKS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Ub3BVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0NCkuaW50MzIobWVzc2FnZS5wb3NpdGlvblRvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM1NykuZmxvYXQobWVzc2FnZS5wb3NpdGlvblRvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25SaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzYwKS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvblJpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3MykuZmxvYXQobWVzc2FnZS5wb3NpdGlvblJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkJvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzc2KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uQm90dG9tVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Cb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzg5KS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5MZWZ0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MDgpLmludDMyKG1lc3NhZ2UubWFyZ2luTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpbkxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIxKS5mbG9hdChtZXNzYWdlLm1hcmdpbkxlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblRvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDI0KS5pbnQzMihtZXNzYWdlLm1hcmdpblRvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblRvcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MzcpLmZsb2F0KG1lc3NhZ2UubWFyZ2luVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5SaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDQwKS5pbnQzMihtZXNzYWdlLm1hcmdpblJpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFyZ2luUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUzKS5mbG9hdChtZXNzYWdlLm1hcmdpblJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5Cb3R0b21Vbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1NikuaW50MzIobWVzc2FnZS5tYXJnaW5Cb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5Cb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDY5KS5mbG9hdChtZXNzYWdlLm1hcmdpbkJvdHRvbSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0xlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4OCkuaW50MzIobWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdMZWZ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUwMSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ1RvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTA0KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdUb3BVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUxNykuZmxvYXQobWVzc2FnZS5wYWRkaW5nVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUyMCkuaW50MzIobWVzc2FnZS5wYWRkaW5nUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTMzKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdSaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0JvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTM2KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdCb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU0OSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJMZWZ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU4MSkuZmxvYXQobWVzc2FnZS5ib3JkZXJMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJUb3AgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTk3KS5mbG9hdChtZXNzYWdlLmJvcmRlclRvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9yZGVyUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjEzKS5mbG9hdChtZXNzYWdlLmJvcmRlclJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJCb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjI5KS5mbG9hdChtZXNzYWdlLmJvcmRlckJvdHRvbSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVWlUcmFuc2Zvcm0oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uVHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmFsaWduQ29udGVudCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmFsaWduSXRlbXMgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbGlnblNlbGYgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4RGlyZWN0aW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleFdyYXAgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5qdXN0aWZ5Q29udGVudCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLm92ZXJmbG93ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzcGxheSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UuZmxleCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBtZXNzYWdlLmZsZXhCYXNpc1VuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleEJhc2lzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleEdyb3cgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4U2hyaW5rID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIG1lc3NhZ2Uud2lkdGhVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBtZXNzYWdlLndpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIG1lc3NhZ2UuaGVpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5oZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgbWVzc2FnZS5taW5XaWR0aFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2UubWluV2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5taW5IZWlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBtZXNzYWdlLm1pbkhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICBtZXNzYWdlLm1heFdpZHRoVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgbWVzc2FnZS5tYXhXaWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICBtZXNzYWdlLm1heEhlaWdodFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIG1lc3NhZ2UubWF4SGVpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25MZWZ0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvbkxlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblRvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Ub3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblJpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Cb3R0b21Vbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblRvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luUmlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgbWVzc2FnZS5tYXJnaW5Cb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1JpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIG1lc3NhZ2UuYm9yZGVyTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlclRvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlclJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgIG1lc3NhZ2UuYm9yZGVyQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi8uLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVWlUcmFuc2Zvcm0gfSBmcm9tICcuL3BiL1VpVHJhbnNmb3JtLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNTBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFVpVHJhbnNmb3JtOiBFY3NUeXBlPFBCVWlUcmFuc2Zvcm0+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVWlUcmFuc2Zvcm0sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlVpVHJhbnNmb3JtLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlVpVHJhbnNmb3JtIHtcbiAgICByZXR1cm4gUEJVaVRyYW5zZm9ybS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlVpVHJhbnNmb3JtLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBBdWRpb1NvdXJjZSBmcm9tICcuL0F1ZGlvU291cmNlLmdlbidcbmltcG9ydCAqIGFzIEF1ZGlvU3RyZWFtIGZyb20gJy4vQXVkaW9TdHJlYW0uZ2VuJ1xuaW1wb3J0ICogYXMgQm94U2hhcGUgZnJvbSAnLi9Cb3hTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBDeWxpbmRlclNoYXBlIGZyb20gJy4vQ3lsaW5kZXJTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBHTFRGU2hhcGUgZnJvbSAnLi9HTFRGU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgTkZUU2hhcGUgZnJvbSAnLi9ORlRTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBQbGFuZVNoYXBlIGZyb20gJy4vUGxhbmVTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBTcGhlcmVTaGFwZSBmcm9tICcuL1NwaGVyZVNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFRleHRTaGFwZSBmcm9tICcuL1RleHRTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBVaVRyYW5zZm9ybSBmcm9tICcuL1VpVHJhbnNmb3JtLmdlbidcbmltcG9ydCB0eXBlIHsgSUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZS90eXBlcydcblxuZXhwb3J0IGVudW0gQ29tcG9uZW50SWRzIHtcbiAgQXVkaW9Tb3VyY2UgPSAxMDIwLFxuQXVkaW9TdHJlYW0gPSAxMDIxLFxuQm94U2hhcGUgPSAxMDEzLFxuQ3lsaW5kZXJTaGFwZSA9IDEwMTYsXG5HTFRGU2hhcGUgPSAxMDQxLFxuTkZUU2hhcGUgPSAxMDQwLFxuUGxhbmVTaGFwZSA9IDEwMTQsXG5TcGhlcmVTaGFwZSA9IDEwMTUsXG5UZXh0U2hhcGUgPSAxMDMwLFxuVWlUcmFuc2Zvcm0gPSAxMDUwLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUHJvdG9jb2xCdWZmZXJDb21wb25lbnRzKHtcbiAgZGVmaW5lQ29tcG9uZW50XG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnQnPikge1xuXG4gIHJldHVybiB7XG5BdWRpb1NvdXJjZTogZGVmaW5lQ29tcG9uZW50KEF1ZGlvU291cmNlLkNPTVBPTkVOVF9JRCwgQXVkaW9Tb3VyY2UuQXVkaW9Tb3VyY2UpLFxuQXVkaW9TdHJlYW06IGRlZmluZUNvbXBvbmVudChBdWRpb1N0cmVhbS5DT01QT05FTlRfSUQsIEF1ZGlvU3RyZWFtLkF1ZGlvU3RyZWFtKSxcbkJveFNoYXBlOiBkZWZpbmVDb21wb25lbnQoQm94U2hhcGUuQ09NUE9ORU5UX0lELCBCb3hTaGFwZS5Cb3hTaGFwZSksXG5DeWxpbmRlclNoYXBlOiBkZWZpbmVDb21wb25lbnQoQ3lsaW5kZXJTaGFwZS5DT01QT05FTlRfSUQsIEN5bGluZGVyU2hhcGUuQ3lsaW5kZXJTaGFwZSksXG5HTFRGU2hhcGU6IGRlZmluZUNvbXBvbmVudChHTFRGU2hhcGUuQ09NUE9ORU5UX0lELCBHTFRGU2hhcGUuR0xURlNoYXBlKSxcbk5GVFNoYXBlOiBkZWZpbmVDb21wb25lbnQoTkZUU2hhcGUuQ09NUE9ORU5UX0lELCBORlRTaGFwZS5ORlRTaGFwZSksXG5QbGFuZVNoYXBlOiBkZWZpbmVDb21wb25lbnQoUGxhbmVTaGFwZS5DT01QT05FTlRfSUQsIFBsYW5lU2hhcGUuUGxhbmVTaGFwZSksXG5TcGhlcmVTaGFwZTogZGVmaW5lQ29tcG9uZW50KFNwaGVyZVNoYXBlLkNPTVBPTkVOVF9JRCwgU3BoZXJlU2hhcGUuU3BoZXJlU2hhcGUpLFxuVGV4dFNoYXBlOiBkZWZpbmVDb21wb25lbnQoVGV4dFNoYXBlLkNPTVBPTkVOVF9JRCwgVGV4dFNoYXBlLlRleHRTaGFwZSksXG5VaVRyYW5zZm9ybTogZGVmaW5lQ29tcG9uZW50KFVpVHJhbnNmb3JtLkNPTVBPTkVOVF9JRCwgVWlUcmFuc2Zvcm0uVWlUcmFuc2Zvcm0pXG4gIH1cbn1cbiIsImltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICcuLi8uLi9NYXRoJ1xuaW1wb3J0IHR5cGUgeyBFY3NUeXBlIH0gZnJvbSAnLi4vLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmb3JtID0ge1xuICBwb3NpdGlvbjogVmVjdG9yMy5NdXRhYmxlVmVjdG9yM1xuICByb3RhdGlvbjogUXVhdGVybmlvbi5NdXRhYmxlUXVhdGVybmlvblxuICBzY2FsZTogVmVjdG9yMy5NdXRhYmxlVmVjdG9yM1xuICBwYXJlbnQ/OiBFbnRpdHlcbn1cblxuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9MRU5HVEggPSA0NFxuXG4vLyBUaGlzIHRyYW5zZm9ybSBjYW4gYmUgb3B0aW1pemVkIHdpdGggRmxvYXQzMkFycmF5IGZvciBleGFtcGxlXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtOiBFY3NUeXBlPFRyYW5zZm9ybT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogVHJhbnNmb3JtLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHRyID0gYnVpbGRlci5pbmNyZW1lbnRXcml0ZU9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIsIHZhbHVlLnBvc2l0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDQsIHZhbHVlLnBvc2l0aW9uLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDgsIHZhbHVlLnBvc2l0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDEyLCB2YWx1ZS5yb3RhdGlvbi54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAxNiwgdmFsdWUucm90YXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjAsIHZhbHVlLnJvdGF0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI0LCB2YWx1ZS5yb3RhdGlvbi53KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyOCwgdmFsdWUuc2NhbGUueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzIsIHZhbHVlLnNjYWxlLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDM2LCB2YWx1ZS5zY2FsZS56KVxuICAgIGJ1aWxkZXIuc2V0VWludDMyKHB0ciArIDQwLCB2YWx1ZS5wYXJlbnQgfHwgMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVHJhbnNmb3JtIHtcbiAgICBjb25zdCBwdHIgPSByZWFkZXIuaW5jcmVtZW50UmVhZE9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogVmVjdG9yMy5jcmVhdGUoXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciksXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDQpLFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyA4KVxuICAgICAgKSxcbiAgICAgIHJvdGF0aW9uOiBRdWF0ZXJuaW9uLmNyZWF0ZShcbiAgICAgICAgcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMTIpLFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxNiksXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDIwKSxcbiAgICAgICAgcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjQpXG4gICAgICApLFxuICAgICAgc2NhbGU6IFZlY3RvcjMuY3JlYXRlKFxuICAgICAgICByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyOCksXG4gICAgICAgIHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDMyKSxcbiAgICAgICAgcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMzYpXG4gICAgICApLFxuICAgICAgcGFyZW50OiByZWFkZXIuZ2V0VWludDMyKHB0ciArIDQwKSBhcyBFbnRpdHlcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgICAgc2NhbGU6IHsgeDogMSwgeTogMSwgejogMSB9LFxuICAgICAgcm90YXRpb246IHsgeDogMCwgeTogMCwgejogMCwgdzogMSB9LFxuICAgICAgcGFyZW50OiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZW51bSBMRUdBQ1lfQ09NUE9ORU5UX0lEIHtcbiAgVFJBTlNGT1JNID0gMSxcbiAgVVVJRF9DQUxMQkFDSyA9IDgsXG4gIEJPWF9TSEFQRSA9IDE2LFxuICBTUEhFUkVfU0hBUEUgPSAxNyxcbiAgUExBTkVfU0hBUEUgPSAxOCxcbiAgQ09ORV9TSEFQRSA9IDE5LFxuICBDWUxJTkRFUl9TSEFQRSA9IDIwLFxuICBURVhUX1NIQVBFID0gMjEsXG5cbiAgTkZUX1NIQVBFID0gMjIsXG4gIFVJX1dPUkxEX1NQQUNFX1NIQVBFID0gMjMsXG4gIFVJX1NDUkVFTl9TUEFDRV9TSEFQRSA9IDI0LFxuICBVSV9DT05UQUlORVJfUkVDVCA9IDI1LFxuICBVSV9DT05UQUlORVJfU1RBQ0sgPSAyNixcbiAgVUlfVEVYVF9TSEFQRSA9IDI3LFxuICBVSV9JTlBVVF9URVhUX1NIQVBFID0gMjgsXG4gIFVJX0lNQUdFX1NIQVBFID0gMjksXG4gIFVJX1NMSURFUl9TSEFQRSA9IDMwLFxuICBDSVJDTEVfU0hBUEUgPSAzMSxcbiAgQklMTEJPQVJEID0gMzIsXG5cbiAgQU5JTUFUSU9OID0gMzMsXG4gIEZPTlQgPSAzNCxcblxuICBVSV9GVUxMU0NSRUVOX1NIQVBFID0gNDAsIC8vIGludGVybmFsIGZ1bGxzY3JlZW4gc2NlbmVzXG4gIFVJX0JVVFRPTl9TSEFQRSA9IDQxLFxuXG4gIEdMVEZfU0hBUEUgPSA1NCxcbiAgT0JKX1NIQVBFID0gNTUsXG4gIEFWQVRBUl9TSEFQRSA9IDU2LFxuXG4gIEJBU0lDX01BVEVSSUFMID0gNjQsXG4gIFBCUl9NQVRFUklBTCA9IDY1LFxuXG4gIEhJR0hMSUdIVF9FTlRJVFkgPSA2NixcblxuICAvKiogQGRlcHJlY2F0ZWQgU291bmQgaGFzIGJlZW4gZGVwcmVjYXRhZWQgKi9cbiAgU09VTkQgPSA2NyxcbiAgVEVYVFVSRSA9IDY4LFxuXG4gIFZJREVPX0NMSVAgPSA3MCxcbiAgVklERU9fVEVYVFVSRSA9IDcxLFxuXG4gIEFWQVRBUl9URVhUVVJFID0gNzIsXG5cbiAgQVVESU9fQ0xJUCA9IDIwMCxcbiAgQVVESU9fU09VUkNFID0gMjAxLFxuICBBVURJT19TVFJFQU0gPSAyMDIsXG4gIEdJWk1PUyA9IDIwMyxcbiAgU01BUlRfSVRFTSA9IDIwNCxcbiAgQVZBVEFSX01PRElGSUVSX0FSRUEgPSAyMDUsXG4gIEFWQVRBUl9BVFRBQ0ggPSAyMDYsXG4gIENBTUVSQV9NT0RFX0FSRUEgPSAyMDcsXG5cbiAgLy8gRm9yIHN0YXRlIHN5bmMgb25seVxuICBOQU1FID0gMzAwLFxuICBMT0NLRURfT05fRURJVCA9IDMwMSxcbiAgVklTSUJMRV9PTl9FRElUID0gMzAyXG59XG4iLCJpbXBvcnQgdHlwZSB7IElFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnXG5pbXBvcnQgeyBkZWZpbmVQcm90b2NvbEJ1ZmZlckNvbXBvbmVudHMgfSBmcm9tICcuLi9nZW5lcmF0ZWQvaW5kZXguZ2VuJ1xuaW1wb3J0IHsgVHJhbnNmb3JtIGFzIExlZ2FjeVRyYW5zZm9ybSB9IGZyb20gJy4vVHJhbnNmb3JtJ1xuaW1wb3J0IHsgTEVHQUNZX0NPTVBPTkVOVF9JRCBhcyBJRCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVMZWdhY3lDb21wb25lbnRzKHtcbiAgZGVmaW5lQ29tcG9uZW50XG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnQnPikge1xuICByZXR1cm4ge1xuICAgIFRyYW5zZm9ybTogZGVmaW5lQ29tcG9uZW50KElELlRSQU5TRk9STSwgTGVnYWN5VHJhbnNmb3JtKSxcbiAgICAuLi5kZWZpbmVQcm90b2NvbEJ1ZmZlckNvbXBvbmVudHMoeyBkZWZpbmVDb21wb25lbnQgfSlcbiAgfVxufVxuIiwiZXhwb3J0IGVudW0gQ09NUE9ORU5UX0lEIHtcbiAgU1lOQyA9IDEwMDBcbn1cbiIsImltcG9ydCB7IGRlZmluZUxlZ2FjeUNvbXBvbmVudHMgfSBmcm9tICcuL2xlZ2FjeSdcbmltcG9ydCB0eXBlIHsgSUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcydcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVNka0NvbXBvbmVudHMoZW5naW5lOiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnQnPikge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmluZUxlZ2FjeUNvbXBvbmVudHMoZW5naW5lKVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBTZGtDb21wb25lbnRzID0gUmV0dXJuVHlwZTx0eXBlb2YgZGVmaW5lU2RrQ29tcG9uZW50cz5cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JkdFByb3RvY29sID0gZXhwb3J0cy5zYW1lRGF0YSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG4vKipcbiAqIENvbXBhcmUgcmF3IGRhdGEuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2FtZURhdGEoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlciAmJiBiIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBhLmVxdWFscyhiKTtcbiAgICB9XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIGlmIChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYSA9PT0gYjtcbn1cbmV4cG9ydHMuc2FtZURhdGEgPSBzYW1lRGF0YTtcbi8qKlxuICogQHB1YmxpY1xuICogQ1JEVCBwcm90b2NvbC5cbiAqIFN0b3JlcyB0aGUgbGF0ZXN0IHN0YXRlLCBhbmQgZGVjaWRlcyB3aGVuZXZlciB3ZSBoYXZlXG4gKiB0byBwcm9jZXNzIGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgaW4gY2FzZSBpdHMgYW4gdXBkYXRlLCBvclxuICogdG8gZGlzY2FyZCBhbmQgc2VuZCBvdXIgbG9jYWwgdmFsdWUgY2F1c2UgcmVtb3RlIGl0J3Mgb3V0ZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZHRQcm90b2NvbCgpIHtcbiAgICAvKipcbiAgICAgKiBMb2NhbCBzdGF0ZSB3aGVyZSB3ZSBzdG9yZSB0aGUgbGF0ZXN0IGxhbXBvcnQgdGltZXN0YW1wXG4gICAgICogYW5kIHRoZSByYXcgZGF0YSB2YWx1ZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0IHN0YXRlID0ge307XG4gICAgLyoqXG4gICAgICogV2Ugc2hvdWxkIGNhbGwgdGhpcyBmbiBpbiBvcmRlciB0byB1cGRhdGUgdGhlIHN0YXRlXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlU3RhdGUoa2V5LCBkYXRhLCByZW1vdGVUaW1lc3RhbXApIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gTWF0aC5tYXgocmVtb3RlVGltZXN0YW1wLCBzdGF0ZVtrZXldPy50aW1lc3RhbXAgfHwgMCk7XG4gICAgICAgIHJldHVybiAoc3RhdGVba2V5XSA9IHsgdGltZXN0YW1wLCBkYXRhIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gZXZlbnQgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgYW5kXG4gICAgICogbGFtcG9ydCB0aW1lc3RtYXAgaW5jcmVtZW50ZWQgYnkgb25lIGluIHRoZSBzdGF0ZS5cbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQoa2V5LCBkYXRhKSB7XG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXN0YW1wXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IChzdGF0ZVtrZXldPy50aW1lc3RhbXAgfHwgMCkgKyAxO1xuICAgICAgICB1cGRhdGVTdGF0ZShrZXksIGRhdGEsIHRpbWVzdGFtcCk7XG4gICAgICAgIHJldHVybiB7IGtleSwgZGF0YSwgdGltZXN0YW1wIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugb25seSBpZiB0aGUgbGFtcG9ydCBudW1iZXIgcmVjaWV2ZWQgaXMgaGlnaGVyXG4gICAgICogdGhhbiB0aGUgc3RvcmVkIG9uZS4gSWYgaXRzIGxvd2VyLCB3ZSBzcHJlYWQgaXQgdG8gdGhlIG5ldHdvcmsgdG8gY29ycmVjdCB0aGUgcGVlci5cbiAgICAgKiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIGJpZ2dlciByYXcgZGF0YSB3aW5zLlxuICBcbiAgICAgKiBSZXR1cm5zIHRoZSByZWNpZXZlZCBkYXRhIGlmIHRoZSBsYW1wb3J0IG51bWJlciB3YXMgYmlnZ2VyIHRoYW4gb3Vycy5cbiAgICAgKiBJZiBpdCB3YXMgYW4gb3V0ZGF0ZWQgbWVzc2FnZSwgdGhlbiB3ZSByZXR1cm4gdm9pZFxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZVtrZXldO1xuICAgICAgICAvLyBUaGUgcmVjZWl2ZWQgbWVzc2FnZSBpcyA+IHRoYW4gb3VyIGN1cnJlbnQgdmFsdWUsIHVwZGF0ZSBvdXIgc3RhdGUuXG4gICAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50LnRpbWVzdGFtcCA8IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhdGUoa2V5LCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3V0ZGF0ZWQgTWVzc2FnZS4gUmVzZW5kIG91ciBzdGF0ZSBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmUuXG4gICAgICAgIGlmIChjdXJyZW50LnRpbWVzdGFtcCA+IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2FtZSBkYXRhLCBzYW1lIHRpbWVzdGFtcC4gV2VpcmRvIGVjaG8gbWVzc2FnZS5cbiAgICAgICAgaWYgKHNhbWVEYXRhKGN1cnJlbnQuZGF0YSwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhY2UgY29uZGl0aW9uLCBzYW1lIHRpbWVzdGFtcCBkaWZmIGRhdGEuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRhKGN1cnJlbnQsIGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZURhdGEoY3VycmVudC5kYXRhLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5LCBkYXRhLCB0aW1lc3RhbXApLmRhdGE7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVFdmVudCxcbiAgICAgICAgcHJvY2Vzc01lc3NhZ2UsXG4gICAgICAgIGdldFN0YXRlXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JkdFByb3RvY29sID0gY3JkdFByb3RvY29sO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5cbmV4cG9ydCBuYW1lc3BhY2UgRW50aXR5VXRpbHMge1xuICBleHBvcnQgY29uc3QgTUFYX0VOVElUSUVTID0gMTAwMDBcblxuICBsZXQgb2Zmc2V0OiBudW1iZXIgPSBNQVhfRU5USVRJRVNcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCBvZmYgPSBvZmZzZXQgKyAxXG4gICAgb2Zmc2V0ICs9IE1BWF9FTlRJVElFU1xuICAgIHJldHVybiBvZmZcbiAgfVxuXG4gIGNvbnN0IFNUQVRJQ19FTlRJVElFUyA9IFswLCBNQVhfRU5USVRJRVNdXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1N0YXRpY0VudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIGNvbnN0IFttaW4sIG1heF0gPSBTVEFUSUNfRU5USVRJRVNcbiAgICByZXR1cm4gZW50aXR5ID49IG1pbiAmJiBlbnRpdHkgPD0gbWF4XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRW50aXR5VXRpbHNcbiIsIi8qKlxuICogVGFrZSB0aGUgbWF4IGJldHdlZW4gY3VycmVudFNpemUgYW5kIGludGVuZGVkU2l6ZSBhbmQgdGhlbiBwbHVzIDEwMjQuIFRoZW4sXG4gKiAgZmluZCB0aGUgbmV4dCBuZWFyZXIgbXVsdGlwbGUgb2YgMTAyNC5cbiAqIEBwYXJhbSBjdXJyZW50U2l6ZSAtIG51bWJlclxuICogQHBhcmFtIGludGVuZGVkU2l6ZSAtIG51bWJlclxuICogQHJldHVybnMgdGhlIGNhbGN1bGF0ZWQgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIGdldE5leHRTaXplKGN1cnJlbnRTaXplOiBudW1iZXIsIGludGVuZGVkU2l6ZTogbnVtYmVyKSB7XG4gIGNvbnN0IG1pbk5ld1NpemUgPSBNYXRoLm1heChjdXJyZW50U2l6ZSwgaW50ZW5kZWRTaXplKSArIDEwMjRcbiAgcmV0dXJuIE1hdGguY2VpbChtaW5OZXdTaXplIC8gMTAyNCkgKiAxMDI0XG59XG5cbi8qKlxuICogQHBhcmFtIHdyaXRpbmcgLSB3cml0aW5nIG9wdGlvbiwgc2VlIG9iamVjdCBzcGVjcy5cbiAqIEBwYXJhbSByZWFkaW5nIC0gcmVhZGluZyBvcHRpb24sIHNlZSBvYmplY3Qgc3BlY3MuXG4gKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5IC0gSW5pdGlhbCBjYXBhY2l0eSBvZiBidWZmZXIgdG8gYWxsb2NhdGUsIGlnbm9yZWQgaWYgeW91IHVzZSB3cml0aW5nIG9yIHJlYWRpbmcgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUJ5dGVCdWZmZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBhIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCB0byByZWFkIGZyb20gdGhlcmUuXG4gICAqIEBwYXJhbSBjdXJyZW50T2Zmc2V0IC0gc2V0IHRoZSBjdXJzb3Igd2hlcmUgYmVnaW5zIHRvIHJlYWQuIERlZmF1bHQgMFxuICAgKiBAcGFyYW0gbGVuZ3RoIC0gZGVsaW1pdGUgd2hlcmUgdGhlIHZhbGlkIGRhdGEgZW5kcy4gRGVmYXVsdDogYnVmZmVyLmxlbmd0aFxuICAgKi9cbiAgcmVhZGluZz86IHtcbiAgICBidWZmZXI6IFVpbnQ4QXJyYXlcbiAgICBsZW5ndGg/OiBudW1iZXJcbiAgICBjdXJyZW50T2Zmc2V0OiBudW1iZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQgdG8gd3JpdGUgdGhlcmUuXG4gICAqIEBwYXJhbSBjdXJyZW50T2Zmc2V0IC0gc2V0IHRoZSBjdXJzb3IgdG8gbm90IHN0YXJ0IHdyaXRpbmcgZnJvbSB0aGUgYmVnaW4gb2YgaXQuIERlZmF1bHQgMFxuICAgKi9cbiAgd3JpdGluZz86IHtcbiAgICBidWZmZXI6IFVpbnQ4QXJyYXlcbiAgICBjdXJyZW50T2Zmc2V0PzogbnVtYmVyXG4gIH1cblxuICBpbml0aWFsQ2FwYWNpdHk/OiBudW1iZXJcbn1cblxuY29uc3QgZGVmYXVsdEluaXRpYWxDYXBhY2l0eSA9IDEwMjQwXG5cbi8qKlxuICogQnl0ZUJ1ZmZlciBpcyBhIHdyYXBwZXIgb2YgRGF0YVZpZXcgd2hpY2ggYWxzbyBhZGRzIGEgcmVhZCBhbmQgd3JpdGUgb2Zmc2V0LlxuICogIEFsc28gaW4gYSB3cml0ZSBvcGVyYXRpb24gaXQgcmVzaXplcyB0aGUgYnVmZmVyIGlzIGJlaW5nIHVzZWQgaWYgaXQgbmVlZHMuXG4gKlxuICogLSBVc2UgcmVhZCBhbmQgd3JpdGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgb3IgY29uc3VtZSBkYXRhLlxuICogLSBVc2Ugc2V0IGFuZCBnZXQgb25seSBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3UncmUgZG9pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCeXRlQnVmZmVyKG9wdGlvbnM6IENyZWF0ZUJ5dGVCdWZmZXJPcHRpb25zID0ge30pIHtcbiAgY29uc3QgaW5pdGlhbFJPZmZzZXQ6IG51bWJlciA9IG9wdGlvbnMucmVhZGluZz8uY3VycmVudE9mZnNldCB8fCAwXG4gIGxldCBpbml0aWFsQnVmZmVyOiBVaW50OEFycmF5IHwgbnVsbCA9IG51bGxcbiAgbGV0IGluaXRpYWxXT2Zmc2V0OiBudW1iZXIgPSAwXG5cbiAgaWYgKG9wdGlvbnMud3JpdGluZykge1xuICAgIGluaXRpYWxCdWZmZXIgPSBvcHRpb25zLndyaXRpbmcuYnVmZmVyXG4gICAgaWYgKG9wdGlvbnMud3JpdGluZy5jdXJyZW50T2Zmc2V0KSB7XG4gICAgICBpbml0aWFsV09mZnNldCA9IG9wdGlvbnMud3JpdGluZy5jdXJyZW50T2Zmc2V0XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMucmVhZGluZykge1xuICAgIGluaXRpYWxCdWZmZXIgPSBvcHRpb25zLnJlYWRpbmcuYnVmZmVyXG4gICAgaW5pdGlhbFdPZmZzZXQgPSBvcHRpb25zLnJlYWRpbmcubGVuZ3RoIHx8IG9wdGlvbnMucmVhZGluZy5idWZmZXIubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgb3B0aW9ucy5pbml0aWFsQ2FwYWNpdHkgfHwgZGVmYXVsdEluaXRpYWxDYXBhY2l0eVxuICAgIClcbiAgfVxuXG4gIGxldCBidWZmZXI6IFVpbnQ4QXJyYXkgPSBpbml0aWFsQnVmZmVyIVxuICBsZXQgdmlldzogRGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQpXG4gIGxldCB3b2Zmc2V0OiBudW1iZXIgPSBpbml0aWFsV09mZnNldFxuICBsZXQgcm9mZnNldDogbnVtYmVyID0gaW5pdGlhbFJPZmZzZXRcblxuICAvKipcbiAgICogSW5jcmVlbWVudCB0aGUgd3JpdGUgb2Zmc2V0IGFuZCByZXNpemUgdGhlIGJ1ZmZlciBpZiBpdCBuZWVkcy5cbiAgICovXG4gIGNvbnN0IHdvQWRkID0gKGFtb3VudDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHdvZmZzZXQgKyBhbW91bnQgPiBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgY29uc3QgbmV3c2l6ZSA9IGdldE5leHRTaXplKGJ1ZmZlci5ieXRlTGVuZ3RoLCB3b2Zmc2V0ICsgYW1vdW50KVxuICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3c2l6ZSlcbiAgICAgIG5ld0J1ZmZlci5zZXQoYnVmZmVyKVxuICAgICAgYnVmZmVyID0gbmV3QnVmZmVyXG4gICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIpXG4gICAgfVxuXG4gICAgd29mZnNldCArPSBhbW91bnRcbiAgICByZXR1cm4gd29mZnNldCAtIGFtb3VudFxuICB9XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgcmVhZCBvZmZzZXQgYW5kIHRocm93IGFuIGVycm9yIGlmIGl0J3MgdHJ5aW5nIHRvIHJlYWRcbiAgICogIG91dHNpZGUgdGhlIGJvdW5kcy5cbiAgICovXG4gIGNvbnN0IHJvQWRkID0gKGFtb3VudDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHJvZmZzZXQgKyBhbW91bnQgPiB3b2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ091dHNpZGUgb2YgdGhlIGJvdW5kcyBvZiB3cml0ZW4gZGF0YS4nKVxuICAgIH1cblxuICAgIHJvZmZzZXQgKz0gYW1vdW50XG4gICAgcmV0dXJuIHJvZmZzZXQgLSBhbW91bnRcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGVudGlyZSBjdXJyZW50IFVpbnQ4QXJyYXkuXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBpZiB0aGUgYnVmZmVyIGdyb3dzLCB0aGUgdmlldyBoYWQgY2hhbmdlZCBpdHNlbGYsXG4gICAgICogIGFuZCB0aGUgcmVmZXJlbmNlIHdpbGwgYmUgYSBpbnZhbGlkIG9uZS5cbiAgICAgKi9cbiAgICBidWZmZXIoKTogVWludDhBcnJheSB7XG4gICAgICByZXR1cm4gYnVmZmVyXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY2FwYWNpdHkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICovXG4gICAgYnVmZmVyTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gYnVmZmVyLmxlbmd0aFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVzZXRzIGJ5dGVCdWZmZXIgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgb25lXG4gICAgICovXG4gICAgcmVzZXRCdWZmZXIoKTogdm9pZCB7XG4gICAgICByb2Zmc2V0ID0gMFxuICAgICAgd29mZnNldCA9IDBcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHJlYWQgb2Zmc2V0XG4gICAgICovXG4gICAgY3VycmVudFJlYWRPZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByb2Zmc2V0XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB3cml0ZSBvZmZzZXRcbiAgICAgKi9cbiAgICBjdXJyZW50V3JpdGVPZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZWFkaW5nIHB1cnBvc2VcbiAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aXVvcyBvZmZzc2V0IHNpemUgYmVmb3JlIGluY3JlbWVudGluZ1xuICAgICAqL1xuICAgIGluY3JlbWVudFJlYWRPZmZzZXQoYW1vdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHJvQWRkKGFtb3VudClcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEhvdyBtYW55IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gcmVhZC5cbiAgICAgKi9cbiAgICByZW1haW5pbmdCeXRlcygpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvZmZzZXQgLSByb2Zmc2V0XG4gICAgfSxcbiAgICByZWFkRmxvYXQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRGbG9hdDY0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZEludDgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDgocm9BZGQoMSkpXG4gICAgfSxcbiAgICByZWFkSW50MTYoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDE2KHJvQWRkKDIpKVxuICAgIH0sXG4gICAgcmVhZEludDMyKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRJbnQ2NCgpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnSW50NjQocm9BZGQoOCkpXG4gICAgfSxcbiAgICByZWFkVWludDgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KHJvQWRkKDEpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQxNigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KHJvQWRkKDIpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKHJvQWRkKDQpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQ2NCgpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnVWludDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZEJ1ZmZlcigpIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHZpZXcuZ2V0VWludDMyKHJvQWRkKDQpKVxuICAgICAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheShyb0FkZChsZW5ndGgpLCByb0FkZCgwKSlcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFdyaXRpbmcgcHVycG9zZVxuICAgICAqL1xuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCBvZmZzZXRcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gaG93IG1hbnkgYnl0ZXNcbiAgICAgKiBAcmV0dXJucyBUaGUgb2Zmc2V0IHdoZW4gdGhpcyByZXNlcnZpbmcgc3RhcnRzLlxuICAgICAqL1xuICAgIGluY3JlbWVudFdyaXRlT2Zmc2V0KGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b0FkZChhbW91bnQpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXRlbiBpbiB0aGUgYnVmZmVyLlxuICAgICAqL1xuICAgIHNpemUoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViYXJyYXkgZnJvbSAwIHRvIG9mZnNldC5cbiAgICAgKi9cbiAgICB0b0JpbmFyeSgpIHtcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkoMCwgd29mZnNldClcbiAgICB9LFxuICAgIHdyaXRlQnVmZmVyKHZhbHVlOiBVaW50OEFycmF5LCB3cml0ZUxlbmd0aDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgIGlmICh3cml0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLndyaXRlVWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IGxlYW5cbiAgICAgIGNvbnN0IG8gPSB3b0FkZCh2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgYnVmZmVyLnNldCh2YWx1ZSwgbylcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0RmxvYXQzMihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQ2NCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50OCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMSlcbiAgICAgIHZpZXcuc2V0SW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldEludDE2KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0SW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDY0KHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg4KVxuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldFVpbnQ4KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldFVpbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDMyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg0KVxuICAgICAgdmlldy5zZXRVaW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnVWludDY0KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgLy8gRGF0YXZpZXcgUHJveHlcbiAgICBnZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQxNihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQzMihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdJbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50OChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDY0KG9mZnNldDogbnVtYmVyKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBzZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MzIob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ0ludDY0KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDE2KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQnl0ZUJ1ZmZlciA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUJ5dGVCdWZmZXI+XG4iLCIvKipcbiAqIFRoZSB3aXJlIG1lc3NhZ2UgaXMgdGhlIHRvcC1sZXZlbCBtZXNzYWdlIHRoYXQgY2FuIGJlIHBhY2tlZFxuICogIGluc2lkZSBpdCBjYW4gY29udGFpbiBhIGRhdGEgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSBvciBwcm90b2NvbFxuICpcbiAqIEVhY2ggd2lyZSBtZXNzYWdlIGhhcyB0aHJlZSBwcmltaXRpdmUgcHJvcGVydHkgdGhhdCBpdCdsbCBuZXZlciBjaGFuZ2VcbiAqICAgLS0tPiBsZW5ndGggICAgICAgIHVpbnQzMiAobWVzc2FnZSBzaXplIHVwIHRvIDQsMjk0LDk2NywyOTUpXG4gKiAgIC0tLT4gdmVyc2lvbiAgICAgICB1aW50MzIgKGZvciBub3cganVzdCBhIG51bWJlciB3aGljaCBpcyB6ZXJvKVxuICogICAtLS0+IG1lc3NhZ2UgdHlwZSAgdWludDMyXG4gKiBUaGUgbGVuZ3RoIGluZGljYXRlcyBob3cgbWFueSBieXRlcyBhcmUgYWJvdmUgc2VsZiwgdGhlIHZlcnNpb24gaW5cbiAqIGNvbWJpbmF0aW9uIHdpdGggbWVzc2FnZSB0eXBlIGRlZmluZXMgdGhlIHNldCBvZiBoYW5kbGVycyB0aGF0IHdpbGwgYmVcbiAqIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoZSBtZXNzYWdlXG4gKlxuICovXG5cbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuL0J5dGVCdWZmZXInXG5cbnR5cGUgVWludDMyID0gbnVtYmVyXG5cbmV4cG9ydCBuYW1lc3BhY2UgV2lyZU1lc3NhZ2Uge1xuICBleHBvcnQgZW51bSBFbnVtIHtcbiAgICBSRVNFUlZFRCA9IDAsXG5cbiAgICAvLyBDb21wb25lbnQgT3BlcmF0aW9uXG4gICAgUFVUX0NPTVBPTkVOVCA9IDEsXG4gICAgREVMRVRFX0NPTVBPTkVOVCA9IDIsXG5cbiAgICAvLyBUT0RPOiA/XG4gICAgTUFYX01FU1NBR0VfVFlQRVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBsZW5ndGggLSBVaW50MzIgdGhlIGxlbmd0aCBvZiBhbGwgbWVzc2FnZSAoaW5jbHVkaW5nIHRoZSBoZWFkZXIpXG4gICAqIEBwYXJhbSB0eXBlIC0gZGVmaW5lIHRoZSBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIHRoZSBkYXRhXG4gICAqL1xuICBleHBvcnQgdHlwZSBIZWFkZXIgPSB7XG4gICAgbGVuZ3RoOiBVaW50MzJcbiAgICB0eXBlOiBVaW50MzJcbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBIRUFERVJfTEVOR1RIID0gOFxuICAvKipcbiAgICogVmFsaWRhdGUgaWYgdGhlIG1lc3NhZ2UgaW5jb21pbmcgaXMgY29tcGxldGVkXG4gICAqIEBwYXJhbSBidWZcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZShidWY6IEJ5dGVCdWZmZXIpIHtcbiAgICBjb25zdCByZW0gPSBidWYucmVtYWluaW5nQnl0ZXMoKVxuICAgIGlmIChyZW0gPCBIRUFERVJfTEVOR1RIKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gYnVmLmdldFVpbnQzMihidWYuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICBpZiAocmVtIDwgbWVzc2FnZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkSGVhZGVyKGJ1ZjogQnl0ZUJ1ZmZlcik6IEhlYWRlciB8IG51bGwge1xuICAgIGlmICghdmFsaWRhdGUoYnVmKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVuZ3RoOiBidWYucmVhZFVpbnQzMigpLFxuICAgICAgdHlwZTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnVtXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdpcmVNZXNzYWdlXG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZW5naW5lL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vQnl0ZUJ1ZmZlcidcbmltcG9ydCBXaXJlTWVzc2FnZSBmcm9tICcuLi93aXJlTWVzc2FnZSdcblxuZXhwb3J0IG5hbWVzcGFjZSBQdXRDb21wb25lbnRPcGVyYXRpb24ge1xuICAvKipcbiAgICogQHBhcmFtIGVudGl0eSAtIFVpbnQzMiBudW1iZXIgb2YgdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gY29tcG9uZW50SWQgLSBVaW50MzIgbnVtYmVyIG9mIGlkXG4gICAqIEBwYXJhbSB0aW1lc3RhbXAgLSBVaW50NjQgTGFtcG9ydCB0aW1lc3RhbXBcbiAgICogQHBhcmFtIGRhdGEgLSBVaW50OFtdIGRhdGEgb2YgY29tcG9uZW50XG4gICAqL1xuICBleHBvcnQgdHlwZSBUeXBlID0ge1xuICAgIGVudGl0eTogRW50aXR5XG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICAgIHRpbWVzdGFtcDogbnVtYmVyXG4gICAgZGF0YTogVWludDhBcnJheVxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IE1FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDIwXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGFuIG9wdGltYWwgd3JpdGluZyBkYXRhIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXJcbiAgICogIGFscmVhZHkgYWxsb2NhdGVkXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gd3JpdGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgY29tcG9uZW50RGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBidWY6IEJ5dGVCdWZmZXJcbiAgKSB7XG4gICAgLy8gcmVzZXJ2ZSB0aGUgYmVnaW5uaW5nXG4gICAgY29uc3Qgc3RhcnRNZXNzYWdlT2Zmc2V0ID0gYnVmLmluY3JlbWVudFdyaXRlT2Zmc2V0KFxuICAgICAgV2lyZU1lc3NhZ2UuSEVBREVSX0xFTkdUSCArIE1FU1NBR0VfSEVBREVSX0xFTkdUSFxuICAgIClcblxuICAgIC8vIHdyaXRlIGJvZHlcbiAgICBjb21wb25lbnREZWZpbml0aW9uLndyaXRlVG9CeXRlQnVmZmVyKGVudGl0eSwgYnVmKVxuICAgIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSBidWYuc2l6ZSgpIC0gc3RhcnRNZXNzYWdlT2Zmc2V0XG5cbiAgICAvLyBXcml0ZSBXaXJlTWVzc2FnZSBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCwgbWVzc2FnZUxlbmd0aClcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDQsIFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVClcblxuICAgIC8vIFdyaXRlIENvbXBvbmVudE9wZXJhdGlvbiBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDgsIGVudGl0eSlcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDEyLCBjb21wb25lbnREZWZpbml0aW9uLl9pZClcbiAgICBidWYuc2V0VWludDY0KHN0YXJ0TWVzc2FnZU9mZnNldCArIDE2LCBCaWdJbnQodGltZXN0YW1wKSlcbiAgICBidWYuc2V0VWludDMyKFxuICAgICAgc3RhcnRNZXNzYWdlT2Zmc2V0ICsgMjQsXG4gICAgICBtZXNzYWdlTGVuZ3RoIC0gTUVTU0FHRV9IRUFERVJfTEVOR1RIIC0gV2lyZU1lc3NhZ2UuSEVBREVSX0xFTkdUSFxuICAgIClcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkKGJ1ZjogQnl0ZUJ1ZmZlcik6IChXaXJlTWVzc2FnZS5IZWFkZXIgJiBUeXBlKSB8IG51bGwge1xuICAgIGNvbnN0IGhlYWRlciA9IFdpcmVNZXNzYWdlLnJlYWRIZWFkZXIoYnVmKVxuXG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmhlYWRlcixcbiAgICAgIGVudGl0eTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnRpdHksXG4gICAgICBjb21wb25lbnRJZDogYnVmLnJlYWRJbnQzMigpLFxuICAgICAgdGltZXN0YW1wOiBOdW1iZXIoYnVmLnJlYWRVaW50NjQoKSksXG4gICAgICBkYXRhOiBidWYucmVhZEJ1ZmZlcigpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZW5naW5lL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5cbmV4cG9ydCBuYW1lc3BhY2UgQ3JkdFV0aWxzIHtcbiAgZXhwb3J0IHR5cGUgQ29tcG9uZW50SUQgPSBDb21wb25lbnREZWZpbml0aW9uWydfaWQnXVxuXG4gIC8vIFRPRE86IHVzZSB0aGlzIGFnYWluXG4gIC8vIGV4cG9ydCBmdW5jdGlvbiBwYXJzZUtleShrZXk6IHN0cmluZyk6IFtFbnRpdHksIENvbXBvbmVudElEXSB7XG4gIC8vICAgY29uc3QgW2VudGl0eSwgY29tcG9uZW50SWRdID0ga2V5LnNwbGl0KCcuJykubWFwKE51bWJlcikgYXMgW1xuICAvLyAgICAgRW50aXR5LFxuICAvLyAgICAgQ29tcG9uZW50SURcbiAgLy8gICBdXG4gIC8vICAgcmV0dXJuIFtlbnRpdHksIGNvbXBvbmVudElkXVxuICAvLyB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEtleShlbnRpdHk6IEVudGl0eSwgY29tcG9uZW50SWQ6IENvbXBvbmVudElEKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZW50aXR5fS4ke2NvbXBvbmVudElkfWBcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFN5bmNocm9uaXplZEVudGl0eVR5cGUge1xuICAgIC8vIHN5bmNocm9uaXplcyBlbnRpdGllcyB3aXRoIHRoZSBOZXR3b3JrU3luY2hyb25pemVkIGNvbXBvbmVudCBvbmx5LCB1c2VkIGZvciBuZXR3b3JrZWQgZ2FtZXNcbiAgICBORVRXT1JLRUQsXG4gICAgLy8gc3luY2hyb25pemVzIGVudGl0aWVzIG5lZWRlZCBieSB0aGUgcmVuZGVyZXJcbiAgICBSRU5ERVJFUlxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENyZHRVdGlsc1xuXG4vLyBUT0RPOiBuZXh0IHZlcnNpb24gc3BsaXQgYmV0d2VlbiBkaWZmIHR5cGVzIG9mIHRyYW5zcG9ydHMvY3JkdHMuXG4vLyAxLiBlbmdpbmUucmVjZWl2ZU1lc3NhZ2UocmF3TWVzc2FnZSBcImRpZmZcIilcbi8vIDIuIGVuZ2luZSBjaGVja3MgQ1JEVCBcImZpbHRlclwiXG4vLyAgIDIuMS4gSWYgcGFzcywgdGhlbiBhcHBseSBDUkRUIG1lc3NhZ2UgdG8gaW50ZXJuYWwgY2FjaGVcbi8vICAgMi4yLiBVcGRhdGUgcmVnaXN0ZXJlZCBjb21wb25lbnRzIFwicGF0Y2hcIiAodXNpbmcgcmF3TWVzc2FnZSBkYXRhICYgY3JlYXRlZCBjb21wb25lbnRzKVxuLy8gICAyLjMuIEV4ZWN1dGUgb25VcGRhdGUgY2FsbGJhY2tzIFwiZW1pdFwiXG5cbi8vIGVuZ2luZS5vblVwZGF0ZSgocmF3TWVzc2FnZSkgPT4ge1xuLy8gICByYXdNZXNzYWdlIC8vIHsgZW50aXR5X2lkLCBkYXRhLCBjb20sIHRpbWV9XG4vLyAgIGlmIChjb21wb25lbnQubWV0YS5zeW5jRmxhZ3MgJiBTeW5jaHJvbml6ZWRFbnRpdHlUeXBlLkFMTCB8fCBjb21wb25lbnQubWV0YS5zeW5jRmxhZ3MgJiBTeW5jaHJvbml6ZWRFbnRpdHlUeXBlLlJFTkRFUkVSKSB7XG4vLyAgICAgU0VORFRPUkVOREVSRVIoKVxuLy8gICB9XG4vLyB9KVxuXG4vLyBhc3luYyBmdW5jdGlvbiBzZW5kVXBkYXRlcyhtZXNzYWdlOiBjcmR0Lk1lc3NhZ2UpIHtcbi8vICAgcmV0dXJuXG4vLyB9XG5cbi8vIGZ1bmN0aW9uIHJlbmRlcmVyU3RyZWFtKCkge1xuLy8gICBjb25zdCBjb21wb25lbnRJZHMgPSBnZXRDb21wb25lbnRJZHMoKVxuXG4vLyAgIGZ1bmN0aW9uIGZpbHRlcihjb21wb25lbnRJZDogbnVtYmVyKSB7XG4vLyAgICAgcmV0dXJuIGNvbXBvbmVudElkcy5pbmNsdWRlcyhjb21wb25lbnRJZClcbi8vICAgfVxuXG4vLyAgIGZ1bmN0aW9uIHNlbmQoKSB7XG4vLyAgICAgY29uc29sZS5sb2coJ3NlbmQnKVxuLy8gICB9XG5cbi8vICAgcmV0dXJuIHsgZmlsdGVyLCBzZW5kIH1cbi8vIH1cblxuLy8gZnVuY3Rpb24gc2NlbmVTdHJlYW0oKSB7XG4vLyAgIGZ1bmN0aW9uIGZpbHRlcihjb21wb25lbnRJZDogbnVtYmVyKSB7fVxuLy8gfVxuIiwiaW1wb3J0IHsgY3JkdFByb3RvY29sLCBNZXNzYWdlIGFzIENyZHRNZXNzYWdlIH0gZnJvbSAnQGRjbC9jcmR0J1xuXG5pbXBvcnQgdHlwZSB7IFByZUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgRW50aXR5VXRpbHMgZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eS11dGlscydcbmltcG9ydCB7IGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQdXRDb21wb25lbnRPcGVyYXRpb24gYXMgTWVzc2FnZSB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24nXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi93aXJlTWVzc2FnZSdcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0cy90eXBlcydcbmltcG9ydCB7IFJlY2VpdmVNZXNzYWdlLCBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBDcmR0VXRpbHMgZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZHRTY2VuZVN5c3RlbSh7XG4gIGVuZ2luZSxcbiAgdHJhbnNwb3J0c1xufToge1xuICBlbmdpbmU6IFByZUVuZ2luZVxuICB0cmFuc3BvcnRzOiBUcmFuc3BvcnRbXVxufSkge1xuICAvLyBDUkRUIENsaWVudFxuICBjb25zdCBjcmR0Q2xpZW50ID0gY3JkdFByb3RvY29sPFVpbnQ4QXJyYXk+KClcbiAgLy8gTWVzc2FnZXMgdGhhdCB3ZSByZWNlaXZlZCBhdCB0cmFuc3BvcnQub25NZXNzYWdlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkXG4gIGNvbnN0IHJlY2VpdmVkTWVzc2FnZXM6IFJlY2VpdmVNZXNzYWdlW10gPSBbXVxuICAvLyBNZXNzYWdlcyBhbHJlYWR5IHByb2Nlc3NlZCBieSB0aGUgZW5naW5lIGJ1dCB0aGF0IHdlIG5lZWQgdG8gYnJvYWRjYXN0IHRvIG90aGVyIHRyYW5zcG9ydHMuXG4gIGNvbnN0IHRyYW5zcG9ydE1lc3NhZ2VzOiBUcmFuc3BvcnRNZXNzYWdlW10gPSBbXVxuICAvLyBNYXAgb2YgZW50aXRpZXMgYWxyZWFkeSBwcm9jZXNzZWQgYXQgbGVhc3Qgb25jZVxuICBjb25zdCBjcmR0RW50aXRpZXMgPSBuZXcgTWFwPEVudGl0eSwgYm9vbGVhbj4oKVxuXG4gIHRyYW5zcG9ydHMuZm9yRWFjaChcbiAgICAodHJhbnNwb3J0KSA9PiAodHJhbnNwb3J0Lm9ubWVzc2FnZSA9IHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydC50eXBlKSlcbiAgKVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0VHlwZSB0cmFucG9ydCBpZCB0byBpZGVudGl5IG1lc3NhZ2VzXG4gICAqIEByZXR1cm5zIGEgZnVuY3Rpb24gdG8gcHJvY2VzcyByZWNlaXZlZCBtZXNzYWdlc1xuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UodHJhbnNwb3J0VHlwZTogc3RyaW5nKSB7XG4gICAgLyoqXG4gICAgICogUmVjZWl2ZXMgYSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXMgYW5kIHN0b3JlcyBhbGwgdGhlIHZhbGlkXG4gICAgICogQ29tcG9uZW50IE9wZXJhdGlvbiBNZXNzYWdlcyBhdCBtZXNzYWdlcyBxdWV1ZVxuICAgICAqIEBwYXJhbSBjaHVua01lc3NhZ2UgQSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UoY2h1bmtNZXNzYWdlOiBVaW50OEFycmF5KSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKHtcbiAgICAgICAgcmVhZGluZzogeyBidWZmZXI6IGNodW5rTWVzc2FnZSwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICB9KVxuXG4gICAgICB3aGlsZSAoV2lyZU1lc3NhZ2UudmFsaWRhdGUoYnVmZmVyKSkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5yZWFkKGJ1ZmZlcikhXG5cbiAgICAgICAgY29uc3QgeyBlbnRpdHksIGNvbXBvbmVudElkLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2VcbiAgICAgICAgcmVjZWl2ZWRNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgdHJhbnNwb3J0VHlwZSxcbiAgICAgICAgICBtZXNzYWdlQnVmZmVyOiBidWZmZXJcbiAgICAgICAgICAgIC5idWZmZXIoKVxuICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRSZWFkT2Zmc2V0KCkpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbmQgY2xlYXIgdGhlIG1lc3NhZXMgcXVldWVcbiAgICogQHJldHVybnMgbWVzc2FnZXMgcmVjaWV2ZWQgYnkgdGhlIHRyYW5zcG9ydCB0byBwcm9jZXNzIG9uIHRoZSBuZXh0IHRpY2tcbiAgICovXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2VzPFQgPSB1bmtub3duPih2YWx1ZTogVFtdKSB7XG4gICAgY29uc3QgbWVzc2FnZXNUb1Byb2Nlc3MgPSBBcnJheS5mcm9tKHZhbHVlKVxuICAgIHZhbHVlLmxlbmd0aCA9IDBcbiAgICByZXR1cm4gbWVzc2FnZXNUb1Byb2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZuIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHRpY2suXG4gICAqIFByb2Nlc3MgYWxsIHRoZSBtZXNzYWdlcyBxdWV1ZSByZWNlaXZlZCBieSB0aGUgdHJhbnNwb3J0XG4gICAqL1xuICBmdW5jdGlvbiByZWNlaXZlTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgbWVzc2FnZXNUb1Byb2Nlc3MgPSBnZXRNZXNzYWdlcyhyZWNlaXZlZE1lc3NhZ2VzKVxuICAgIGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzVG9Qcm9jZXNzKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgdGltZXN0YW1wLCBjb21wb25lbnRJZCwgZW50aXR5IH0gPSBtZXNzYWdlXG4gICAgICAgIGNvbnN0IGNyZHRNZXNzYWdlOiBDcmR0TWVzc2FnZTxVaW50OEFycmF5PiA9IHtcbiAgICAgICAgICBrZXk6IENyZHRVdGlscy5nZXRLZXkoZW50aXR5LCBjb21wb25lbnRJZCksXG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGVuZ2luZS5nZXRDb21wb25lbnQoY29tcG9uZW50SWQpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlID0gY3JkdENsaWVudC5wcm9jZXNzTWVzc2FnZShjcmR0TWVzc2FnZSlcblxuICAgICAgICAvLyBDUkRUIG91dGRhdGVkIG1lc3NhZ2UuIFJlc2VuZCB0aGlzIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZVxuICAgICAgICAvLyBUT0RPOiBwZXJmIHRyYW5zYWN0b3JcbiAgICAgICAgaWYgKGNyZHRNZXNzYWdlICE9PSBjdXJyZW50TWVzc2FnZSkge1xuICAgICAgICAgIC8vIENSRFQgb3V0ZGF0ZWQgbWVzc2FnZS4gUmVzZW5kIHRoaXMgbWVzc2FnZSB0aHJvdWdoIHRoZSB3aXJlXG4gICAgICAgICAgTWVzc2FnZS53cml0ZShlbnRpdHksIGN1cnJlbnRNZXNzYWdlLnRpbWVzdGFtcCwgY29tcG9uZW50LCBidWZmZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3B0cyA9IHsgcmVhZGluZzogeyBidWZmZXI6IG1lc3NhZ2UuZGF0YSwgY3VycmVudE9mZnNldDogMCB9IH1cbiAgICAgICAgICBjb25zdCBiYiA9IGNyZWF0ZUJ5dGVCdWZmZXIob3B0cylcblxuICAgICAgICAgIC8vIFVwZGF0ZSBlbmdpbmUgY29tcG9uZW50XG4gICAgICAgICAgY29tcG9uZW50LnVwc2VydEZyb21CaW5hcnkobWVzc2FnZS5lbnRpdHksIGJiKVxuICAgICAgICAgIGNvbXBvbmVudC5jbGVhckRpcnR5KClcblxuICAgICAgICAgIC8vIEFkZCBtZXNzYWdlIHRvIHRyYW5zcG9ydCBxdWV1ZSB0byBiZSBwcm9jZXNzZWQgYnkgb3RoZXJzIHRyYW5zcG9ydHNcbiAgICAgICAgICB0cmFuc3BvcnRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlci5zaXplKCkpIHtcbiAgICAgICAgdHJhbnNwb3J0LnNlbmQoYnVmZmVyLnRvQmluYXJ5KCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIHRoZSBkaXJ0eSBtYXAgYW5kIGdlbmVyYXRlcyBjcmR0IG1lc3NhZ2VzIHRvIGJlIHNlbmRcbiAgICogQHBhcmFtIGRpcnR5TWFwIGEgbWFwIG9mIHsgZW50aXRpZXM6IFtjb21wb25lbnRJZF0gfVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlTWVzc2FnZXMoZGlydHlNYXA6IE1hcDxFbnRpdHksIFNldDxudW1iZXI+Pikge1xuICAgIC8vIENSRFQgTWVzc2FnZXMgd2lsbCBiZSB0aGUgbWVyZ2UgYmV0d2VlbiB0aGUgcmVjaWV2ZWQgdHJhbnNwb3J0IG1lc3NhZ2VzIGFuZCB0aGUgbmV3IGNyZHQgbWVzc2FnZXNcbiAgICBjb25zdCBjcmR0TWVzc2FnZXMgPSBnZXRNZXNzYWdlcyh0cmFuc3BvcnRNZXNzYWdlcylcbiAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcblxuICAgIGZvciAoY29uc3QgW2VudGl0eSwgY29tcG9uZW50c0lkXSBvZiBkaXJ0eU1hcCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnRJZCBvZiBjb21wb25lbnRzSWQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZW5naW5lLmdldENvbXBvbmVudChjb21wb25lbnRJZClcbiAgICAgICAgY29uc3QgZXZlbnQgPSBjcmR0Q2xpZW50LmNyZWF0ZUV2ZW50KFxuICAgICAgICAgIENyZHRVdGlscy5nZXRLZXkoZW50aXR5LCBjb21wb25lbnRJZCksXG4gICAgICAgICAgY29tcG9uZW50LnRvQmluYXJ5KGVudGl0eSkudG9CaW5hcnkoKVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGJ1ZmZlci5jdXJyZW50V3JpdGVPZmZzZXQoKVxuXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIG1lc3NhZ2VzIGZvciB0aGUgc3RhdGljIGVudGl0aWVzIHRoZSBmaXJzdCB0aW1lIHRoZXkgYXJlIGNyZWF0ZWRcbiAgICAgICAgLy8gVGhleSBhcmUgcGFydCBvZiB0aGUgc2NlbmUgbG9hZGluZy4gU2VuZCBvbmx5IHVwZGF0ZXMuXG4gICAgICAgIGlmICghRW50aXR5VXRpbHMuaXNTdGF0aWNFbnRpdHkoZW50aXR5KSB8fCBjcmR0RW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgICBNZXNzYWdlLndyaXRlKGVudGl0eSwgZXZlbnQudGltZXN0YW1wLCBjb21wb25lbnQsIGJ1ZmZlcilcbiAgICAgICAgICBjcmR0TWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgbWVzc2FnZUJ1ZmZlcjogYnVmZmVyXG4gICAgICAgICAgICAgIC5idWZmZXIoKVxuICAgICAgICAgICAgICAuc3ViYXJyYXkob2Zmc2V0LCBidWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KCkpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3JkdEVudGl0aWVzLnNldChlbnRpdHksIHRydWUpXG4gICAgfVxuXG4gICAgLy8gU2VuZCBtZXNzYWdlcyB0byB0cmFuc3BvcnRzXG4gICAgY29uc3QgdHJhbnNwb3J0QnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgZm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykge1xuICAgICAgdHJhbnNwb3J0QnVmZmVyLnJlc2V0QnVmZmVyKClcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBjcmR0TWVzc2FnZXMpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydC5maWx0ZXIobWVzc2FnZSkpIHtcbiAgICAgICAgICB0cmFuc3BvcnRCdWZmZXIud3JpdGVCdWZmZXIobWVzc2FnZS5tZXNzYWdlQnVmZmVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydEJ1ZmZlci5zaXplKCkpIHtcbiAgICAgICAgdHJhbnNwb3J0LnNlbmQodHJhbnNwb3J0QnVmZmVyLnRvQmluYXJ5KCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNZXNzYWdlcyxcbiAgICByZWNlaXZlTWVzc2FnZXNcbiAgfVxufVxuIiwiaW1wb3J0IHsgRW50aXR5VXRpbHMgfSBmcm9tICcuL2VudGl0eS11dGlscydcblxuZGVjbGFyZSBjb25zdCBlbnRpdHlTeW1ib2w6IHVuaXF1ZSBzeW1ib2xcbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFbnRpdHkgPSBudW1iZXIgJiB7IFtlbnRpdHlTeW1ib2xdOiB0cnVlIH1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGl0eUNvbnRhaW5lcigpIHtcbiAgY29uc3Qgc3RhdGljRW50aXR5ID0gRW50aXR5KClcbiAgY29uc3QgZHluYW1pY0VudGl0eSA9IEVudGl0eSh0cnVlKVxuICByZXR1cm4ge1xuICAgIGdlbmVyYXRlRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSk6IEVudGl0eSB7XG4gICAgICBpZiAoZHluYW1pYykgcmV0dXJuIGR5bmFtaWNFbnRpdHkuZ2VuZXJhdGVFbnRpdHkoKVxuICAgICAgcmV0dXJuIHN0YXRpY0VudGl0eS5nZW5lcmF0ZUVudGl0eSgpXG4gICAgfSxcbiAgICByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpOiB2b2lkIHtcbiAgICAgIHN0YXRpY0VudGl0eS5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICAgICAgZHluYW1pY0VudGl0eS5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICAgIH0sXG4gICAgZ2V0VW51c2VkRW50aXRpZXMoKTogU2V0PEVudGl0eT4ge1xuICAgICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgICAuLi5zdGF0aWNFbnRpdHkuZ2V0VW51c2VkRW50aXRpZXMoKSxcbiAgICAgICAgLi4uZHluYW1pY0VudGl0eS5nZXRVbnVzZWRFbnRpdGllcygpXG4gICAgICBdKVxuICAgIH0sXG4gICAgZ2V0VXNlZEVudGl0aWVzKCk6IFNldDxFbnRpdHk+IHtcbiAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgLi4uc3RhdGljRW50aXR5LmdldFVzZWRFbnRpdGllcygpLFxuICAgICAgICAuLi5keW5hbWljRW50aXR5LmdldFVzZWRFbnRpdGllcygpXG4gICAgICBdKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHkod2l0aE9mZnNldDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShlbnRpdHk6IG51bWJlcik6IEVudGl0eSB7XG4gICAgcmV0dXJuIGVudGl0eSBhcyBFbnRpdHlcbiAgfVxuXG4gIC8vIFRPRE86IGdldG9mZnNldCBmcm9tIGEgc2VydmVyP1xuICBjb25zdCBvZmZzZXQgPSB3aXRoT2Zmc2V0ID8gRW50aXR5VXRpbHMuZ2V0T2Zmc2V0KCkgOiAwXG4gIGNvbnN0IHVzZWRFbnRpdGllczogU2V0PEVudGl0eT4gPSBuZXcgU2V0KClcbiAgY29uc3QgdW51c2VkRW50aXRpZXM6IFNldDxFbnRpdHk+ID0gbmV3IFNldCgpXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVFbnRpdHkoKTogRW50aXR5IHtcbiAgICBpZiAoIXVudXNlZEVudGl0aWVzLnNpemUgJiYgIXVzZWRFbnRpdGllcy5zaXplKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBjcmVhdGVFbnRpdHkob2Zmc2V0KVxuICAgICAgdXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gZW50aXR5XG4gICAgfVxuXG4gICAgLy8gVE9ETzogd2hhdCBoYXBwZW5zIGlmIHdlIGRlbGV0ZSBhbiBlbnRpdHlcbiAgICAvLyBhbmQgY3JlYXRlcyBhIG5ldyBvbmUgaW4gdGhlIHNhbWUgdGlja1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gdW51c2VkRW50aXRpZXNbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKVxuICAgIGlmIChpdGVyYXRvci5kb25lKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBjcmVhdGVFbnRpdHkoTWF0aC5tYXgoLi4udXNlZEVudGl0aWVzLnZhbHVlcygpKSArIDEpXG4gICAgICBpZiAoZW50aXR5ID49IEVudGl0eVV0aWxzLk1BWF9FTlRJVElFUyArIG9mZnNldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudGl0eSByYXRlIGxpbWl0IGV4Y2VlZCcpXG4gICAgICB9XG4gICAgICB1c2VkRW50aXRpZXMuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBlbnRpdHlcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHkgPSBpdGVyYXRvci52YWx1ZVxuICAgIHVudXNlZEVudGl0aWVzLmRlbGV0ZShlbnRpdHkpXG4gICAgdXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG5cbiAgICByZXR1cm4gZW50aXR5XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIXVzZWRFbnRpdGllcy5oYXMoZW50aXR5KSkgcmV0dXJuXG4gICAgdXNlZEVudGl0aWVzLmRlbGV0ZShlbnRpdHkpXG4gICAgdW51c2VkRW50aXRpZXMuYWRkKGVudGl0eSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2V0VW51c2VkRW50aXRpZXMoKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh1bnVzZWRFbnRpdGllcylcbiAgICB9LFxuICAgIGdldFVzZWRFbnRpdGllcygpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHVzZWRFbnRpdGllcylcbiAgICB9LFxuICAgIGdlbmVyYXRlRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IERlZXBSZWFkb25seSB9IGZyb20gJy4uL01hdGgnXG5leHBvcnQgdHlwZSB7IERlZXBSZWFkb25seSB9XG5cbi8vIFRPRE86IHByb2Nlc3MgZG9lcyBub3QgZXhpc3QgaW4gc2NlbmUgZW52XG4vLyBjb25zdCBpc1Byb2QgPSAoKSA9PiBmYWxzZVxuLy8gY29uc3QgaXNQcm9kID0gKCkgPT4gISFwcm9jZXNzLmVudi5QUk9EVUNUSU9OIHx8IGZhbHNlXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwUmVhZG9ubHk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdmFsOiBUXG4pOiBEZWVwUmVhZG9ubHk8VD4ge1xuICAvLyBGYWlsIG9ubHkgb24gZGV2ZWxvcG1lbnQgZHVlIHRvIHBlcmYgaXNzdWVzXG4gIC8vIGlmIChpc1Byb2QoKSkge1xuICAvLyAgIHJldHVybiB2YWxcbiAgLy8gfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4udmFsIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdFVuZGVmaW5lZDxUPih2YWw6IFQgfCB1bmRlZmluZWQpOiB2YWwgaXMgVCB7XG4gIHJldHVybiAhIXZhbFxufVxuIiwiaW1wb3J0IHR5cGUgeyBFY3NUeXBlIH0gZnJvbSAnLi4vYnVpbHQtaW4tdHlwZXMvRWNzVHlwZSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIsIGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IGRlZXBSZWFkb25seSwgRGVlcFJlYWRvbmx5IH0gZnJvbSAnLi91dGlscydcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVjc1Jlc3VsdDxUIGV4dGVuZHMgRWNzVHlwZT4gPSBUIGV4dGVuZHMgRWNzVHlwZVxuICA/IFJldHVyblR5cGU8VFsnZGVzZXJpYWxpemUnXT5cbiAgOiBuZXZlclxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50VHlwZTxUIGV4dGVuZHMgRWNzVHlwZT4gPSBFY3NSZXN1bHQ8VD5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudERlZmluaXRpb248VCBleHRlbmRzIEVjc1R5cGUgPSBFY3NUeXBlPGFueT4+ID0ge1xuICBfaWQ6IG51bWJlclxuICBoYXMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuXG4gIGdldEZyb20oZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj5cblxuICBnZXRPck51bGwoZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4gfCBudWxsXG5cbiAgLy8gYWRkcyB0aGlzIGNvbXBvbmVudCB0byB0aGUgbGlzdCBcInRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcIlxuICBjcmVhdGUoZW50aXR5OiBFbnRpdHksIHZhbD86IENvbXBvbmVudFR5cGU8VD4pOiBDb21wb25lbnRUeXBlPFQ+XG5cbiAgLy8gYWRkcyB0aGlzIGNvbXBvbmVudCB0byB0aGUgbGlzdCBcInRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcIlxuICBtdXRhYmxlKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPlxuICBjcmVhdGVPclJlcGxhY2UoZW50aXR5OiBFbnRpdHksIHZhbD86IENvbXBvbmVudFR5cGU8VD4pOiBDb21wb25lbnRUeXBlPFQ+XG4gIGRlbGV0ZUZyb20oZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIHVwc2VydEZyb21CaW5hcnkoZW50aXR5OiBFbnRpdHksIGRhdGE6IEJ5dGVCdWZmZXIpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuICB1cGRhdGVGcm9tQmluYXJ5KGVudGl0eTogRW50aXR5LCBkYXRhOiBCeXRlQnVmZmVyKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcbiAgLy8gYWxsb2NhdGVzIGEgYnVmZmVyIGFuZCByZXR1cm5zIG5ldyBidWZmZXJcbiAgdG9CaW5hcnkoZW50aXR5OiBFbnRpdHkpOiBCeXRlQnVmZmVyXG4gIC8vIHdyaXRlcyB0byBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyXG4gIHdyaXRlVG9CeXRlQnVmZmVyKGVudGl0eTogRW50aXR5LCBidWZmZXI6IEJ5dGVCdWZmZXIpOiB2b2lkXG5cbiAgaXRlcmF0b3IoKTogSXRlcmFibGU8W0VudGl0eSwgQ29tcG9uZW50VHlwZTxUPl0+XG5cbiAgLy8gRGlydHlcbiAgZGlydHlJdGVyYXRvcigpOiBJdGVyYWJsZTxFbnRpdHk+XG4gIGNsZWFyRGlydHkoKTogdm9pZFxuICBpc0RpcnR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFQgZXh0ZW5kcyBFY3NUeXBlPihcbiAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgc3BlYzogVFxuICAvLyBtZXRhOiB7IHN5bmNGbGFncyB9XG4pOiBDb21wb25lbnREZWZpbml0aW9uPFQ+IHtcbiAgY29uc3QgZGF0YSA9IG5ldyBNYXA8RW50aXR5LCBDb21wb25lbnRUeXBlPFQ+PigpXG4gIGNvbnN0IGRpcnR5SXRlcmF0b3IgPSBuZXcgU2V0PEVudGl0eT4oKVxuXG4gIHJldHVybiB7XG4gICAgX2lkOiBjb21wb25lbnRJZCxcbiAgICBpc0RpcnR5OiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkaXJ0eUl0ZXJhdG9yLmhhcyhlbnRpdHkpXG4gICAgfSxcbiAgICBoYXM6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGRhdGEuaGFzKGVudGl0eSlcbiAgICB9LFxuICAgIGRlbGV0ZUZyb206IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGRhdGEuZGVsZXRlKGVudGl0eSlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnQgfHwgbnVsbFxuICAgIH0sXG4gICAgZ2V0T3JOdWxsOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eVxuICAgICk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudCA/IGRlZXBSZWFkb25seShjb21wb25lbnQpIDogbnVsbFxuICAgIH0sXG4gICAgZ2V0RnJvbTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2dldEZyb21dIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZXBSZWFkb25seShjb21wb25lbnQpXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb21wb25lbnRUeXBlPFQ+XG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2NyZWF0ZV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gYWxyZWFkeSBleGlzdHNgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBzcGVjLmNyZWF0ZSgpIDogdmFsdWVcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIHVzZWRWYWx1ZVxuICAgIH0sXG4gICAgY3JlYXRlT3JSZXBsYWNlOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIHZhbHVlPzogQ29tcG9uZW50VHlwZTxUPlxuICAgICk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgdXNlZFZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHNwZWMuY3JlYXRlKCkgOiB2YWx1ZVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCB1c2VkVmFsdWUhKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIHVzZWRWYWx1ZSFcbiAgICB9LFxuICAgIG11dGFibGU6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbbXV0YWJsZV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgfSxcbiAgICBpdGVyYXRvcjogZnVuY3Rpb24qICgpOiBJdGVyYWJsZTxbRW50aXR5LCBDb21wb25lbnRUeXBlPFQ+XT4ge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5LCBjb21wb25lbnRdIG9mIGRhdGEpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgY29tcG9uZW50XVxuICAgICAgfVxuICAgIH0sXG4gICAgZGlydHlJdGVyYXRvcjogZnVuY3Rpb24qICgpOiBJdGVyYWJsZTxFbnRpdHk+IHtcbiAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGRpcnR5SXRlcmF0b3IpIHtcbiAgICAgICAgeWllbGQgZW50aXR5XG4gICAgICB9XG4gICAgfSxcbiAgICB0b0JpbmFyeShlbnRpdHk6IEVudGl0eSk6IEJ5dGVCdWZmZXIge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3cml0ZUJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgICAgc3BlYy5zZXJpYWxpemUoY29tcG9uZW50LCB3cml0ZUJ1ZmZlcilcbiAgICAgIHJldHVybiB3cml0ZUJ1ZmZlclxuICAgIH0sXG4gICAgd3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5OiBFbnRpdHksIGJ1ZmZlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbdG9CaW5hcnldIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBzcGVjLnNlcmlhbGl6ZShjb21wb25lbnQsIGJ1ZmZlcilcbiAgICB9LFxuICAgIHVwZGF0ZUZyb21CaW5hcnkoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGJ1ZmZlcjogQnl0ZUJ1ZmZlclxuICAgICk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3VwZGF0ZUZyb21CaW5hcnldIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudXBzZXJ0RnJvbUJpbmFyeShlbnRpdHksIGJ1ZmZlcilcbiAgICB9LFxuICAgIHVwc2VydEZyb21CaW5hcnkoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGJ1ZmZlcjogQnl0ZUJ1ZmZlclxuICAgICk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3BlYy5kZXNlcmlhbGl6ZShidWZmZXIpXG4gICAgICBkYXRhLnNldChlbnRpdHksIG5ld1ZhbHVlKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjbGVhckRpcnR5OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkaXJ0eUl0ZXJhdG9yLmNsZWFyKClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGRlZmluZVNka0NvbXBvbmVudHMsIFNka0NvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgY3JkdFNjZW5lU3lzdGVtIH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0J1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlDb250YWluZXIgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7XG4gIENvbXBvbmVudFR5cGUsXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIGRlZmluZUNvbXBvbmVudCBhcyBkZWZDb21wb25lbnRcbn0gZnJvbSAnLi9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudEVjc1R5cGUsIElFbmdpbmVQYXJhbXMsIFVwZGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERlZXBSZWFkb25seSB9IGZyb20gJy4uL01hdGgnXG5pbXBvcnQgdHlwZSB7IEVjc1R5cGUgfSBmcm9tICcuLi9idWlsdC1pbi10eXBlcy9FY3NUeXBlJ1xuaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuXG5leHBvcnQge1xuICBDb21wb25lbnRUeXBlLFxuICBFbnRpdHksXG4gIEJ5dGVCdWZmZXIsXG4gIFNka0NvbXBvbmVudHMgYXMgU2RrQ29tcG9uZXRucyxcbiAgQ29tcG9uZW50RGVmaW5pdGlvblxufVxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcblxuZnVuY3Rpb24gcHJlRW5naW5lKCkge1xuICBjb25zdCBlbnRpdHlDb250YWluZXIgPSBFbnRpdHlDb250YWluZXIoKVxuICBjb25zdCBjb21wb25lbnRzRGVmaW5pdGlvbiA9IG5ldyBNYXA8bnVtYmVyLCBDb21wb25lbnREZWZpbml0aW9uPGFueT4+KClcbiAgLy8gVE9ETzogZmluZCBhIHdheSB0byBtYWtlIHRoaXMgd29yay5cbiAgLy8gTWF5YmUgYSBwcm94eS9jYWxsYmFjayB0byBiZSB1cC10by1kYXRlXG4gIGNvbnN0IGVudGl0aWVzQ29tcG9uZW50ID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgU2V0PENvbXBvbmVudERlZmluaXRpb248YW55PlsnX2lkJ10+XG4gID4oKVxuICBjb25zdCBzeXN0ZW1zID0gbmV3IFNldDxVcGRhdGU+KClcblxuICBmdW5jdGlvbiBhZGRTeXN0ZW0oZm46IFVwZGF0ZSkge1xuICAgIGlmIChzeXN0ZW1zLmhhcyhmbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3lzdGVtIGFscmVhZHkgYWRkZWQnKVxuICAgIH1cbiAgICBzeXN0ZW1zLmFkZChmbilcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVudGl0eShkeW5hbWljOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAvLyBlbnRpdGllc0NvbXBub25lbnQuc2V0KGVudGl0eSwgbmV3IFNldCgpKVxuICAgIGNvbnN0IGVudGl0eSA9IGVudGl0eUNvbnRhaW5lci5nZW5lcmF0ZUVudGl0eShkeW5hbWljKVxuICAgIHJldHVybiBlbnRpdHlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZER5bmFtaWNFbnRpdHkoKSB7XG4gICAgcmV0dXJuIGFkZEVudGl0eSh0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIGFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGF0IGVudGl0eVxuICAgIGZvciAoY29uc3QgWywgY29tcG9uZW50XSBvZiBjb21wb25lbnRzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKGNvbXBvbmVudC5oYXMoZW50aXR5KSkge1xuICAgICAgICBjb21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGVudGl0aWVzQ29tcG9uZW50LmRlbGV0ZShlbnRpdHkpXG4gICAgcmV0dXJuIGVudGl0eUNvbnRhaW5lci5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFQgZXh0ZW5kcyBFY3NUeXBlPihcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIHNwZWM6IFRcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiB7XG4gICAgaWYgKGNvbXBvbmVudHNEZWZpbml0aW9uLmdldChjb21wb25lbnRJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGFscmVhZHkgZGVjbGFyZWRgKVxuICAgIH1cbiAgICBjb25zdCBuZXdDb21wb25lbnQgPSBkZWZDb21wb25lbnQ8VD4oY29tcG9uZW50SWQsIHNwZWMpXG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uc2V0KGNvbXBvbmVudElkLCBuZXdDb21wb25lbnQpXG4gICAgcmV0dXJuIG5ld0NvbXBvbmVudFxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50PFQgZXh0ZW5kcyBFY3NUeXBlPihcbiAgICBjb21wb25lbnRJZDogbnVtYmVyXG4gICk6IENvbXBvbmVudERlZmluaXRpb248VD4ge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNEZWZpbml0aW9uLmdldChjb21wb25lbnRJZClcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29tcG9uZW50IG5vdCBmb3VuZC4gWW91IG5lZWQgdG8gZGVjbGFyZSB0aGUgY29tcG9uZW50cyBhdCB0aGUgYmVnaW5uaWcgb2YgdGhlIGVuZ2luZSBkZWNsYXJhdGlvbidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG5cbiAgZnVuY3Rpb24qIG11dGFibGVHcm91cE9mPFxuICAgIFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXVxuICA+KC4uLmNvbXBvbmVudHM6IFQpOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5Db21wb25lbnRFY3NUeXBlPFQ+XT4ge1xuICAgIGZvciAoY29uc3QgW2VudGl0eSwgLi4uZ3JvdXBDb21wXSBvZiBnZXRDb21wb25lbnREZWZHcm91cCguLi5jb21wb25lbnRzKSkge1xuICAgICAgeWllbGQgW2VudGl0eSwgLi4uZ3JvdXBDb21wLm1hcCgoYykgPT4gYy5tdXRhYmxlKGVudGl0eSkpXSBhcyBbXG4gICAgICAgIEVudGl0eSxcbiAgICAgICAgLi4uQ29tcG9uZW50RWNzVHlwZTxUPlxuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uKiBncm91cE9mPFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXT4oXG4gICAgLi4uY29tcG9uZW50czogVFxuICApOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5EZWVwUmVhZG9ubHk8Q29tcG9uZW50RWNzVHlwZTxUPj5dPiB7XG4gICAgZm9yIChjb25zdCBbZW50aXR5LCAuLi5ncm91cENvbXBdIG9mIGdldENvbXBvbmVudERlZkdyb3VwKC4uLmNvbXBvbmVudHMpKSB7XG4gICAgICB5aWVsZCBbZW50aXR5LCAuLi5ncm91cENvbXAubWFwKChjKSA9PiBjLmdldEZyb20oZW50aXR5KSldIGFzIFtcbiAgICAgICAgRW50aXR5LFxuICAgICAgICAuLi5EZWVwUmVhZG9ubHk8Q29tcG9uZW50RWNzVHlwZTxUPj5cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0Q29tcG9uZW50RGVmR3JvdXA8VCBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25bXT4oXG4gICAgLi4uYXJnczogVFxuICApOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5UXT4ge1xuICAgIGNvbnN0IFtmaXJzdENvbXBvbmVudERlZiwgLi4uY29tcG9uZW50RGVmaW5pdGlvbnNdID0gYXJnc1xuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZmlyc3RDb21wb25lbnREZWYuaXRlcmF0b3IoKSkge1xuICAgICAgbGV0IG1hdGNoZXMgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiBjb21wb25lbnREZWZpbml0aW9ucykge1xuICAgICAgICBpZiAoIWNvbXBvbmVudERlZi5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgLi4uYXJnc11cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVudGl0aWVzQ29tcG9uZW50LFxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLFxuICAgIHN5c3RlbXMsXG4gICAgYWRkRW50aXR5LFxuICAgIGFkZER5bmFtaWNFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5LFxuICAgIGFkZFN5c3RlbSxcbiAgICBkZWZpbmVDb21wb25lbnQsXG4gICAgbXV0YWJsZUdyb3VwT2YsXG4gICAgZ3JvdXBPZixcbiAgICBnZXRDb21wb25lbnRcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBQcmVFbmdpbmUgPSBSZXR1cm5UeXBlPHR5cGVvZiBwcmVFbmdpbmU+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gRW5naW5lKHsgdHJhbnNwb3J0cyB9OiBJRW5naW5lUGFyYW1zID0ge30pOiBJRW5naW5lIHtcbiAgY29uc3QgZW5naW5lID0gcHJlRW5naW5lKClcbiAgY29uc3QgY3JkdFN5c3RlbSA9IGNyZHRTY2VuZVN5c3RlbSh7IGVuZ2luZSwgdHJhbnNwb3J0czogdHJhbnNwb3J0cyB8fCBbXSB9KVxuICBjb25zdCBiYXNlQ29tcG9uZW50cyA9IGRlZmluZVNka0NvbXBvbmVudHMoZW5naW5lKVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZShkdDogbnVtYmVyKSB7XG4gICAgY3JkdFN5c3RlbS5yZWNlaXZlTWVzc2FnZXMoKVxuXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgZW5naW5lLnN5c3RlbXMpIHtcbiAgICAgIHN5c3RlbShkdClcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBQZXJmIHRpcFxuICAgIC8vIFNob3VsZCB3ZSBhZGQgc29tZSBkaXJ0eUl0ZXJhdG9yU2V0IGF0IGVuZ2luZSBsZXZlbCBzbyB3ZSBkb250IGhhdmVcbiAgICAvLyB0byBpdGVyYXRlIGFsbCB0aGUgY29tcG9uZW50IGRlZmluaXRpb25zIHRvIGdldCB0aGUgZGlydHkgb25lcyA/XG4gICAgY29uc3QgZGlydHlTZXQgPSBuZXcgTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KClcbiAgICBmb3IgKGNvbnN0IFtjb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBkZWZpbml0aW9uLmRpcnR5SXRlcmF0b3IoKSkge1xuICAgICAgICBpZiAoIWRpcnR5U2V0LmhhcyhlbnRpdHkpKSB7XG4gICAgICAgICAgZGlydHlTZXQuc2V0KGVudGl0eSwgbmV3IFNldCgpKVxuICAgICAgICB9XG4gICAgICAgIGRpcnR5U2V0LmdldChlbnRpdHkpIS5hZGQoY29tcG9uZW50SWQpXG4gICAgICB9XG4gICAgfVxuICAgIGNyZHRTeXN0ZW0uY3JlYXRlTWVzc2FnZXMoZGlydHlTZXQpXG5cbiAgICBmb3IgKGNvbnN0IFtfY29tcG9uZW50SWQsIGRlZmluaXRpb25dIG9mIGVuZ2luZS5jb21wb25lbnRzRGVmaW5pdGlvbikge1xuICAgICAgZGVmaW5pdGlvbi5jbGVhckRpcnR5KClcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFkZEVudGl0eTogZW5naW5lLmFkZEVudGl0eSxcbiAgICBhZGREeW5hbWljRW50aXR5OiBlbmdpbmUuYWRkRHluYW1pY0VudGl0eSxcbiAgICByZW1vdmVFbnRpdHk6IGVuZ2luZS5yZW1vdmVFbnRpdHksXG4gICAgYWRkU3lzdGVtOiBlbmdpbmUuYWRkU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudDogZW5naW5lLmRlZmluZUNvbXBvbmVudCxcbiAgICBtdXRhYmxlR3JvdXBPZjogZW5naW5lLm11dGFibGVHcm91cE9mLFxuICAgIGdyb3VwT2Y6IGVuZ2luZS5ncm91cE9mLFxuICAgIGdldENvbXBvbmVudDogZW5naW5lLmdldENvbXBvbmVudCxcbiAgICB1cGRhdGUsXG4gICAgYmFzZUNvbXBvbmVudHNcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuL0Vjc1R5cGUnXG5pbXBvcnQgeyBUb09wdGlvbmFsIH0gZnJvbSAnLi90eXBpbmcnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMge1xuICBba2V5OiBzdHJpbmddOiBFY3NUeXBlXG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCBleHRlbmRzIFNwZWM+ID0gVG9PcHRpb25hbDx7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRWNzVHlwZVxuICAgID8gUmV0dXJuVHlwZTxUW0tdWydkZXNlcmlhbGl6ZSddPlxuICAgIDogVFtLXSBleHRlbmRzIFNwZWNcbiAgICA/IFJlc3VsdDxUW0tdPlxuICAgIDogbmV2ZXJcbn0+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gTWFwVHlwZTxUIGV4dGVuZHMgU3BlYz4oc3BlYzogVCk6IEVjc1R5cGU8UmVzdWx0PFQ+PiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBSZXN1bHQ8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIHNwZWNba2V5XS5zZXJpYWxpemUoKHZhbHVlIGFzIGFueSlba2V5XSwgYnVpbGRlcilcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFJlc3VsdDxUPiB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBSZXN1bHQ8VD4gPSB7fSBhcyBhbnlcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIDsobmV3VmFsdWUgYXMgYW55KVtrZXldID0gc3BlY1trZXldLmNyZWF0ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi9FY3NUeXBlJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFycmF5VHlwZTxUPih0eXBlOiBFY3NUeXBlPFQ+KTogRWNzVHlwZTxBcnJheTxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogQXJyYXk8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGJ1aWxkZXIud3JpdGVVaW50MzIodmFsdWUubGVuZ3RoKVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHR5cGUuc2VyaWFsaXplKGl0ZW0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBBcnJheTxUPiB7XG4gICAgICBjb25zdCBuZXdBcnJheTogQXJyYXk8VD4gPSBbXVxuICAgICAgY29uc3QgbGVuZ3RoID0gcmVhZGVyLnJlYWRVaW50MzIoKVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBuZXdBcnJheS5wdXNoKHR5cGUuZGVzZXJpYWxpemUocmVhZGVyKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdBcnJheVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4vRWNzVHlwZSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPcHRpb25hbDxUPihzcGVjOiBFY3NUeXBlPFQ+KTogRWNzVHlwZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMSlcbiAgICAgICAgc3BlYy5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZGVyLndyaXRlSW50OCgwKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBleGlzdHMgPSByZWFkZXIucmVhZEludDgoKVxuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gc3BlYy5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRWNzVHlwZSB9IGZyb20gJy4uL0Vjc1R5cGUnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50NjQ6IEVjc1R5cGU8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50NjQoQmlnSW50KHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKHJlYWRlci5yZWFkSW50NjQoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQzMjogRWNzVHlwZTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQzMigpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MTY6IEVjc1R5cGU8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MTYodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MTYoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDg6IEVjc1R5cGU8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50OCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQ4KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vRWNzVHlwZSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBGbG9hdDMyOiBFY3NUeXBlPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUZsb2F0MzIodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkRmxvYXQzMigpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBGbG9hdDY0OiBFY3NUeXBlPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUZsb2F0NjQodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkRmxvYXQ2NCgpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMC4wXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vRWNzVHlwZSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBGbGF0U3RyaW5nOiBFY3NUeXBlPHN0cmluZz4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogc3RyaW5nLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocmVhZGVyLnJlYWRCdWZmZXIoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRWNzU3RyaW5nID0gRmxhdFN0cmluZ1xuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IEVjc1R5cGUgfSBmcm9tICcuLi9FY3NUeXBlJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVudW08VD4odHlwZTogRWNzVHlwZTxhbnk+KTogRWNzVHlwZTxUPiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBULCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICB0eXBlLnNlcmlhbGl6ZSh2YWx1ZSwgYnVpbGRlcilcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFQge1xuICAgICAgcmV0dXJuIHR5cGUuZGVzZXJpYWxpemUocmVhZGVyKVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIHR5cGUuY3JlYXRlKClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFY3NUeXBlIH0gZnJvbSAnLi4vRWNzVHlwZSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFY3NCb29sZWFuOiBFY3NUeXBlPGJvb2xlYW4+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IGJvb2xlYW4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50OCh2YWx1ZSA/IDEgOiAwKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQ4KCkgPT09IDFcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgQ29tcG9uZW50SWRzIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvaW5kZXguZ2VuJ1xuaW1wb3J0IHsgTEVHQUNZX0NPTVBPTkVOVF9JRCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvbGVnYWN5L3R5cGVzJ1xuXG5jb25zdCBjb21wb25lbnRJZHMgPSBPYmplY3QudmFsdWVzKENvbXBvbmVudElkcylcbiAgLmZpbHRlcigoYSkgPT4gdHlwZW9mIGEgPT09ICdudW1iZXInKVxuICAubWFwKE51bWJlcilcbmNvbnN0IHJlbmRlcmVyQ29tcG9uZW50SWRzID0gY29tcG9uZW50SWRzLmNvbmNhdChMRUdBQ1lfQ09NUE9ORU5UX0lELlRSQU5TRk9STSlcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIGNvbnN0IHR5cGUgPSAncmVuZGVyZXInXG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICBzZW5kKG1lc3NhZ2U6IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBuZXcgcnBjXG4gICAgICBkY2xcbiAgICAgICAgLmNhbGxScGMoJ0BkZWNlbnRyYWxhbmQvRXhwZXJpbWVudGFsQVBJJywgJ3NlbmRUb1JlbmRlcmVyJywgW1xuICAgICAgICAgIHsgZGF0YTogbWVzc2FnZSB9XG4gICAgICAgIF0pXG4gICAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgfSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSk6IGJvb2xlYW4ge1xuICAgICAgLy8gRWNobyBtZXNzYWdlLCBpZ25vcmUgdGhlbVxuICAgICAgaWYgKG1lc3NhZ2UudHJhbnNwb3J0VHlwZSA9PT0gdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzZW5kIHJlbmRlcmVyIGNvbXBvbmVudHMgKFByb3RvIEdlbmVyYXRlZClcbiAgICAgIGlmICghcmVuZGVyZXJDb21wb25lbnRJZHMuaW5jbHVkZXMobWVzc2FnZS5jb21wb25lbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1lc3NhZ2VcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIC8vIGNvbnN0IHJwYyA9IG5ldyBScGNUcmFuc3BvcnQoKVxuICBmdW5jdGlvbiBzZW5kKC4uLl9hcmdzOiBhbnlbXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdOZXR3b3JrTWVzc2FnZSBTZW50OiAnLCAuLi5hcmdzKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICduZXR3b3JrLXRyYW5zcG9ydCdcbiAgcmV0dXJuIHtcbiAgICBzZW5kLFxuICAgIHR5cGUsXG4gICAgZmlsdGVyKG1lc3NhZ2U6IFRyYW5zcG9ydE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgICAgIC8vIEVjaG8gbWVzc2FnZSwgaWdub3JlIHRoZW1cbiAgICAgIGlmIChtZXNzYWdlLnRyYW5zcG9ydFR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1lc3NhZ2UgLy8gdmFsaWRDb21wb25lbnRzLmluY2x1ZGVzKGNvbXBvbmVudElkKVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBAYWxwaGEgKiBUaGlzIGZpbGUgaW5pdGlhbGl6YXRpb24gaXMgYW4gYWxwaGEgb25lLiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBvbGQtZWNzXG4gKiBpbml0IGFuZCBpdCdsbCBiZSBjaGFuZ2luZy5cbiAqL1xuXG5pbXBvcnQgeyBFbmdpbmUgfSBmcm9tICcuL2VuZ2luZSdcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IH0gZnJvbSAnLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydCdcbmltcG9ydCB7IGNyZWF0ZU5ldHdvcmtUcmFuc3BvcnQgfSBmcm9tICcuL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL25ldHdvcmtUcmFuc3BvcnQnXG5cbmV4cG9ydCBjb25zdCBlbmdpbmUgPSBFbmdpbmUoe1xuICB0cmFuc3BvcnRzOiBbY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQoKSwgY3JlYXRlTmV0d29ya1RyYW5zcG9ydCgpXVxufSlcblxuaWYgKGRjbCkge1xuICBkY2wubG9hZE1vZHVsZSgnQGRlY2VudHJhbGFuZC9FeHBlcmltZW50YWxBUEknLCB7fSkuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgZGNsLmVycm9yKFxuICAgICAgYEV4cGVyaW1lbnRhbEFQSSBjb3VsZG4ndCBiZSBsb2FkZWQsIHRoZSBtZXNzYWdlIHRvIHJlbmRlcmVyIGNhbid0IGJlIHNlbnQgd2l0aG91dCB0aGlzIEFQSS5gLFxuICAgICAgZXJyXG4gICAgKVxuICB9KVxuXG4gIGRjbC5vblVwZGF0ZSgoZHQ6IG51bWJlcikgPT4ge1xuICAgIGVuZ2luZS51cGRhdGUoZHQpXG4gIH0pXG59XG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwidGhpcyIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwiZ2xvYmFsIiwiX20wLldyaXRlciIsIl9tMC5SZWFkZXIiLCJDT01QT05FTlRfSUQiLCJBdWRpb1NvdXJjZS5DT01QT05FTlRfSUQiLCJBdWRpb1NvdXJjZS5BdWRpb1NvdXJjZSIsIkF1ZGlvU3RyZWFtLkNPTVBPTkVOVF9JRCIsIkF1ZGlvU3RyZWFtLkF1ZGlvU3RyZWFtIiwiQm94U2hhcGUuQ09NUE9ORU5UX0lEIiwiQm94U2hhcGUuQm94U2hhcGUiLCJDeWxpbmRlclNoYXBlLkNPTVBPTkVOVF9JRCIsIkN5bGluZGVyU2hhcGUuQ3lsaW5kZXJTaGFwZSIsIkdMVEZTaGFwZS5DT01QT05FTlRfSUQiLCJHTFRGU2hhcGUuR0xURlNoYXBlIiwiTkZUU2hhcGUuQ09NUE9ORU5UX0lEIiwiTkZUU2hhcGUuTkZUU2hhcGUiLCJQbGFuZVNoYXBlLkNPTVBPTkVOVF9JRCIsIlBsYW5lU2hhcGUuUGxhbmVTaGFwZSIsIlNwaGVyZVNoYXBlLkNPTVBPTkVOVF9JRCIsIlNwaGVyZVNoYXBlLlNwaGVyZVNoYXBlIiwiVGV4dFNoYXBlLkNPTVBPTkVOVF9JRCIsIlRleHRTaGFwZS5UZXh0U2hhcGUiLCJVaVRyYW5zZm9ybS5DT01QT05FTlRfSUQiLCJVaVRyYW5zZm9ybS5VaVRyYW5zZm9ybSIsIlZlY3RvcjMiLCJRdWF0ZXJuaW9uIiwiSUQiLCJMZWdhY3lUcmFuc2Zvcm0iLCJXaXJlTWVzc2FnZSIsImNyZHRQcm90b2NvbCIsIk1lc3NhZ2UiLCJDcmR0VXRpbHMiLCJFbnRpdHlVdGlscyIsImRlZmluZUNvbXBvbmVudCIsImRlZkNvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FDQSxNQUFNLENBQUMsY0FBYyxDQUFBLE9BQUEsRUFBVSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztHQUM5RCxPQUFrQixDQUFBLE9BQUEsR0FBQSxLQUFLLENBQUMsQ0FBQztHQUt6QixDQUFDLFVBQVUsT0FBTyxFQUFFO0NBQ3BCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxNQUFNO0NBQ25CO0NBQ0E7Q0FDQTtPQUNJLENBQUMsR0FBRyxDQUFDO0NBQ1Q7Q0FDQTtDQUNBO09BQ0ksQ0FBQyxHQUFHLENBQUM7Q0FDVDtDQUNBO0NBQ0E7T0FDSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1dBQ0gsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdEI7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxHQUFHLENBQUMsT0FBTyxF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QUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakU7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtXQUN2QixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7V0FDM0IsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDakQ7Q0FDQSxVQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVDLFVBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsVUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QyxVQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDN0M7Q0FDQSxVQUFRLE9BQU87Q0FDZixjQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtDQUN2RCxjQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxD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U0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtDQUNwRDtDQUNBLFVBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztDQUN0QyxVQUFRLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDbEMsVUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1dBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQzlCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQzlCLE9BQU8sTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckk7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztDQUMzRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVB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RyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDOUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDdEMsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFDO0NBQ0wsTUFBSSxVQUFVLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7Q0FDckU7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0NBQ3JELFVBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMvQjtXQUNRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMs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QUMsR0FBRyxHQUFHLENBQUM7Y0FDYixHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCO0FBQ1Q7Q0FDQTtVQUNRLE9BQU8sQ0FBQyxhQUFhLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0NBQy9FO1VBQ1EsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFDL0U7Q0FDQSxTQUFRLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLGFBQVksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDakI7QUFDVDtDQUNBLFNBQVEsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO2NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsYUFBWSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNqQjtBQUNUO0NBQ0E7VUFDUSxPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztDQUM1RTtVQUNRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQzVFO0NBQ0E7Q0FDQSxNQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVztBQUMzQjtDQUNBLFNBQVEsU0FBUyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUMvRCxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkMsYUFBWSxJQUFJLElBQUk7Q0FDcEIsaUJBQWdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztDQUMzQixhQUFZLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtrQkFDWCxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDOUMsaUJBQWdCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3pHLGNBQWEsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtrQkFDbkIsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO2tCQUM5QixTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDdkQsY0FBYSxNQUFNLElBQUksR0FBRyxHQUFHLHVCQUF1QixFQUFFO2tCQUN0QyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDOUMsaUJBQWdCLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsVUFBVSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQzVFLGNBQWEsTUFBTTtrQkFDSCxJQUFJLFFBQVEsQ0FBQztDQUM3QixpQkFBZ0IsSUFBSSxHQUFHLEdBQUcsdUJBQXVCLEVBQUU7Q0FDbkQscUJBQW9CLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0NBQzVDLHFCQUFvQixTQUFTLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQy9ELHFCQUFvQixTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLFFBQVEsR0FBRyxVQUFVLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDM0Ysa0JBQWlCLE1BQU07Q0FDdkIscUJBQW9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7c0JBQ3BELElBQUksUUFBUSxLQUFLLElBQUk7MEJBQ2pCLFFBQVEsR0FBRyxJQUFJLENBQUM7Q0FDeEMscUJBQW9CLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUM1RCxxQkFBb0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztzQkFDOUQsU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQzttQkFDekc7ZUFDSjtXQUNKO0FBQ1Q7Q0FDQSxTQUFRLE9BQU8sQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xGLFNBQVEsT0FBTyxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEY7Q0FDQSxTQUFRLFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUN4RCxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUM7a0JBQzlCLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztjQUNuQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDekMsaUJBQWdCLFFBQVEsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUk7a0JBQzNCLFFBQVEsR0FBRyxVQUFVLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztjQUNoRCxPQUFPLFFBQVEsS0FBSyxJQUFJO0NBQ3BDLG1CQUFrQixRQUFRO0NBQzFCLG1CQUFrQixHQUFHO29CQUNILElBQUksR0FBRyxRQUFRO29CQUNmLFFBQVEsS0FBSyxDQUFDO0NBQ2hDLG1CQUFrQixJQUFJLEdBQUcsTUFBTSxHQUFHLFFBQVE7Q0FDMUMsbUJBQWtCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxHQUFHLGdCQUFnQixDQUFDLENBQUM7V0FDN0U7QUFDVDtDQUNBLFNBQVEsT0FBTyxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0UsU0FBUSxPQUFPLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRTtDQUNBLE1BQUssR0FBRyxDQUFDO0FBQ1Q7TUFDSSxPQUFPLE9BQU8sQ0FBQztHQUNsQjtBQUNEO0NBQ0E7QUFDQTtDQUNBLENBQUEsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDaEMsR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUM7Q0FDckMsS0FBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO0NBQ3JDLEtBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQztNQUNqQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7R0FDOUI7QUFDRDtDQUNBLENBQUEsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDaEMsR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Q0FDL0IsS0FBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ3JDLEtBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQztNQUNqQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUM7R0FDcEM7QUFDRDtDQUNBLENBQUEsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUM5QixLQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLO0NBQ3hCLGFBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQzdCLGFBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO2NBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztHQUNyQztBQUNEO0NBQ0EsQ0FBQSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQzlCLEtBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO0NBQzlCLGFBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQzlCLGFBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2NBQ2pCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ2hDLEVBQUE7Ozs7Ozs7Ozs7Q0M3VUEsQ0FBYyxTQUFBLEdBQUcsT0FBTyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsU0FBUyxPQUFPLENBQUMsVUFBVSxFQUFFO0NBQzdCLEtBQUksSUFBSTtDQUNSLFNBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7Q0FDOUQsU0FBUSxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO2NBQzlDLE9BQU8sR0FBRyxDQUFDO0NBQ3ZCLE1BQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO01BQ2QsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQTs7Ozs7Ozs7Ozs7O0FDZkE7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUU7T0FDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQztXQUNQLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZCxNQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1dBQ3BDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUc7ZUFDUCxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxHQUFHLElBQUk7ZUFDYixHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sTUFBTSxNQUFNLEVBQUU7ZUFDaEYsRUFBRSxDQUFDLENBQUM7ZUFDSixHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ1o7ZUFDRyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2hCO09BQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZixHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtDQUNuRCxNQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7T0FDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQztXQUNQLE9BQU8sRUFBRSxDQUFDO09BQ2QsSUFBSSxLQUFLLEdBQUcsSUFBSTtXQUNaLEtBQUssR0FBRyxFQUFFO1dBQ1YsQ0FBQyxHQUFHLENBQUM7Q0FDYixVQUFRLENBQUMsQ0FBQztDQUNWLE1BQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxFQUFFO0NBQ3hCLFVBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1dBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUc7Q0FDbkIsY0FBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0IsZUFBYSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUc7ZUFDdkIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO0NBQ3JDLGNBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxPQUFPLENBQUM7Q0FDOUgsY0FBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQzVDLGNBQVksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwQztDQUNULGNBQVksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQzdGLFVBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFO2VBQ1YsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztlQUN2RSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1Q7UUFDSjtPQUNELElBQUksS0FBSyxFQUFFO0NBQ2YsVUFBUSxJQUFJLENBQUM7ZUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0UsVUFBUSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekI7Q0FDTCxNQUFJLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEUsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7T0FDckQsSUFBSSxLQUFLLEdBQUcsTUFBTTtDQUN0QixVQUFRLEVBQUU7Q0FDVixVQUFRLEVBQUUsQ0FBQztDQUNYLE1BQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7V0FDcEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsVUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUU7Q0FDdEIsY0FBWSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbEMsV0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtlQUNsQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQztlQUN2QyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUU7Q0FDdEcsY0FBWSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7ZUFDckQsRUFBRSxDQUFDLENBQUM7ZUFDSixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQztDQUNuRCxjQUFZLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztDQUNuRCxjQUFZLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztlQUN2QyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FB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Q0FBQztZQUN4QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDL0MsTUFBSyxDQUFDO0NBQ04sRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLEdBQUc7TUFDMUMsT0FBTyxNQUFNLENBQUMsWUFBWTtDQUM5QixTQUFRLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO0NBQ3RCLFNBQVEsSUFBSSxDQUFDLEVBQUUsVUFBVSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Q0FDdEIsTUFBSyxDQUFDO0NBQ04sRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7TUFDOUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7TUFDM0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFF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LElBQUksTUFBTSxFQUFFLENBQUM7Q0FDaEMsVUFBUyxDQUFDO0NBQ1YsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUU7TUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDaEMsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSztNQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3JELEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELEtBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7TUFDaEIsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQSxDQUFBLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0dBQ3hCO0FBQ0Q7Q0FDQSxDQUFBLFNB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LEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDL0c7Q0FDQTtVQUNRLElBQUksQ0FBQyxJQUFJ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U0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtDQUMxQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtDQUMxQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO0NBQ2pDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUU7Q0FDN0IsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRTtDQUM3QixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Q0FDeEIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDeEMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtDQUM1QixZQUFBLE1BQU0sQ0FBQyxNQUFNLENB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Q0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1NBQzFELE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDekMsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUM3QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzdDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDOUMsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUM5QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzlDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDOUMsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUMzQyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzNDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDM0MsUUFBQSxPQUFPLENBQUMsU0FBUyxDQUFDLEdB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QUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUNsQixZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQzVCOztDQUVELFFBQUEsVUFBVSxDQUFDLE1BQWMsRUFBQTtDQUN2QixZQUFBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUMvQjtDQUNELFFBQUEsVUFBVSxDQUFDLE1BQWMsRUFBQTtDQUN2QixZQUFBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUMvQjtDQUNELFFBQUEsT0FBTyxDQUFDLE1BQWMsRUFBQTtDQUNwQixZQUFBLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUM1QjtDQUNELFFBQUEsUUFBUSxDQUFDLE1BQWMsRUFBQTtDQUNyQixZQUFBLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUM3QjtDQUNELFFBQUEsUUFBUSxDQUFDLE1BQWMsRUFBQTtDQUNyQixZQUFBLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUM3QjtDQUNELFFBQUEsUUFBUSxDQUFDLE1BQWMsRUFBQTtDQUNyQixZQUFBLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUNoQztDQUNELFFBQUEsUUFBUSxDQUFDLE1BQWMsRUFBQTtDQUNyQixZQUFBLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUM3QjtDQUNELFFBQUEsU0FBUyxDQUFDLE1BQWMsRUFBQTtDQUN0QixZQUFBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUM5QjtDQUNELFFBQUEsU0FBUyxDQUFDLE1BQWMsRUFBQTtDQUN0QixZQUFBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtVQUM5QjtDQUNELFFBQUEs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