Subversion Repository Public Repository

Nextrek

Diff Revisions 1085 vs 1086 for /s2s/development/Component_GameSceneBehavior_FA7A4820K975AA4196S8E5DEEFF71858030C.js

Diff revisions: vs.
  @@ -45,7 +45,7 @@
45 45 Component_GameSceneBehavior.prototype.initialize = function() {
46 46 var ref, saveGame, sceneUid, sprite;
47 47 if (SceneManager.previousScenes.length === 0) {
48 - gs.GlobalEventManager.clear();
48 + gs.GlobalEventManager.clearExcept(this.object.commonEventContainer.subObjects);
49 49 }
50 50 this.resourceContext = ResourceManager.createContext();
51 51 ResourceManager.context = this.resourceContext;
  @@ -142,6 +142,10 @@
142 142
143 143 Component_GameSceneBehavior.prototype.show = function(visible) {
144 144 var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7;
145 + if (visible) {
146 + this.object.viewport = GameManager.sceneViewport;
147 + }
148 + window.$dataFields = this.dataFields;
145 149 this.object.visible = visible;
146 150 if ((ref = this.object.layout) != null) {
147 151 ref.update();
  @@ -456,7 +460,7 @@
456 460 */
457 461
458 462 Component_GameSceneBehavior.prototype.setupLayout = function() {
459 - var advVisible, ref;
463 + var advVisible, ref, ref1;
460 464 this.dataFields = ui.UIManager.dataSources[ui.UiFactory.layouts.gameLayout.dataSource || "default"]();
461 465 this.dataFields.scene = this.object;
462 466 window.$dataFields = this.dataFields;
  @@ -465,8 +469,9 @@
465 469 this.object.layout.visible = advVisible;
466 470 $gameMessage_message.visible = advVisible;
467 471 this.object.layout.ui.prepare();
468 - if (((ref = $tempFields.choices) != null ? ref.length : void 0) > 0) {
469 - this.showChoices(GameManager.tempFields.choices, gs.CallBack("onChoiceAccept", this.object.interpreter, {
472 + this.object.choices = ((ref = this.object.sceneData) != null ? ref.choices : void 0) || this.object.choices;
473 + if (((ref1 = this.object.choices) != null ? ref1.length : void 0) > 0) {
474 + this.showChoices(gs.CallBack("onChoiceAccept", this.object.interpreter, {
470 475 pointer: this.object.interpreter.pointer,
471 476 params: this.params
472 477 }));
  @@ -499,8 +504,7 @@
499 504 GameManager.sceneViewport = this.object.sceneData.viewport;
500 505 this.object.viewport = this.object.sceneData.viewport;
501 506 this.viewport = this.object.viewport.visual.viewport;
502 - this.viewport.viewport = Graphics.viewport;
503 - return this.object.addObject(this.object.viewport);
507 + return this.viewport.viewport = Graphics.viewport;
504 508 }
505 509 };
506 510
  @@ -541,7 +545,7 @@
541 545 */
542 546
543 547 Component_GameSceneBehavior.prototype.restoreMessageBox = function() {
544 - var c, j, len, message, messageBox, messageBoxes, messageObject, ref, results;
548 + var c, j, k, len, len1, message, messageBox, messageBoxes, messageObject, ref, ref1, results;
545 549 messageBoxes = (ref = this.object.sceneData) != null ? ref.messageBoxes : void 0;
546 550 if (messageBoxes) {
547 551 results = [];
  @@ -550,19 +554,16 @@
550 554 messageObject = gs.ObjectManager.current.objectById(messageBox.id);
551 555 messageObject.visible = messageBox.visible;
552 556 if (messageBox.message) {
557 + messageBox.message.textRenderer.disposeEventHandlers();
553 558 message = gs.ObjectManager.current.objectById(messageBox.message.id);
554 559 message.textRenderer.dispose();
555 560 Object.mixin(message, messageBox.message, ui.Object_Message.objectCodecBlackList.concat(["origin"]));
556 - results.push((function() {
557 - var k, len1, ref1, results1;
558 - ref1 = message.components;
559 - results1 = [];
560 - for (k = 0, len1 = ref1.length; k < len1; k++) {
561 - c = ref1[k];
562 - results1.push(c.object = message);
563 - }
564 - return results1;
565 - })());
561 + ref1 = message.components;
562 + for (k = 0, len1 = ref1.length; k < len1; k++) {
563 + c = ref1[k];
564 + c.object = message;
565 + }
566 + results.push(message.textRenderer.setupEventHandlers());
566 567 } else {
567 568 results.push(void 0);
568 569 }
  @@ -665,23 +666,18 @@
665 666 */
666 667
667 668 Component_GameSceneBehavior.prototype.restoreScene = function() {
668 - var c, context, ref, saveGame;
669 + var c, context, j, len, ref, ref1, saveGame;
669 670 saveGame = GameManager.loadedSaveGame;
670 671 if (saveGame) {
671 672 context = new gs.ObjectCodecContext([Graphics.viewport, this.object, this], saveGame.encodedObjectStore, null);
672 673 saveGame.data = gs.ObjectCodec.decode(saveGame.data, context);
673 - if ((function() {
674 - var j, len, ref, results;
675 - ref = saveGame.data.characterNames;
676 - results = [];
677 - for (j = 0, len = ref.length; j < len; j++) {
678 - c = ref[j];
679 - results.push(c);
680 - }
681 - return results;
682 - })()) {
683 - if ((ref = RecordManager.characters[c.index]) != null) {
684 - ref.name = c.name;
674 + ref = saveGame.data.characterNames;
675 + for (j = 0, len = ref.length; j < len; j++) {
676 + c = ref[j];
677 + if (c) {
678 + if ((ref1 = RecordManager.characters[c.index]) != null) {
679 + ref1.name = c.name;
680 + }
685 681 }
686 682 }
687 683 GameManager.restore(saveGame);
  @@ -904,12 +900,11 @@
904 900 * @method showChoices
905 901 */
906 902
907 - Component_GameSceneBehavior.prototype.showChoices = function(choices, callback) {
903 + Component_GameSceneBehavior.prototype.showChoices = function(callback) {
908 904 var ref, useFreeLayout;
909 - useFreeLayout = choices.where(function(x) {
905 + useFreeLayout = this.object.choices.where(function(x) {
910 906 return x.dstRect != null;
911 907 }).length > 0;
912 - GameManager.tempFields.choices = choices;
913 908 if ((ref = this.object.choiceWindow) != null) {
914 909 ref.dispose();
915 910 }
  @@ -940,7 +935,7 @@
940 935 */
941 936
942 937 Component_GameSceneBehavior.prototype.changeBackground = function(background, noAnimation, animation, easing, duration, ox, oy, layer, loopHorizontal, loopVertical) {
943 - var object, otherObject, ref;
938 + var object, otherObject, ref, ref1;
944 939 if (background != null) {
945 940 otherObject = this.object.backgrounds[layer];
946 941 object = new vn.Object_Background();
  @@ -956,6 +951,11 @@
956 951 if (otherObject != null) {
957 952 otherObject.zIndex = layer;
958 953 }
954 + if (otherObject != null) {
955 + if ((ref = otherObject.animator.otherObject) != null) {
956 + ref.dispose();
957 + }
958 + }
959 959 if (duration === 0) {
960 960 if (otherObject != null) {
961 961 otherObject.dispose();
  @@ -970,10 +970,10 @@
970 970 object.animator.otherObject = otherObject;
971 971 return object.animator.appear(0, 0, animation, easing, duration, (function(_this) {
972 972 return function(sender) {
973 - var ref;
973 + var ref1;
974 974 sender.update();
975 - if ((ref = sender.animator.otherObject) != null) {
976 - ref.dispose();
975 + if ((ref1 = sender.animator.otherObject) != null) {
976 + ref1.dispose();
977 977 }
978 978 sender.animator.otherObject = null;
979 979 sender.visual.looping.vertical = loopVertical;
  @@ -983,7 +983,7 @@
983 983 }
984 984 }
985 985 } else {
986 - return (ref = this.object.backgrounds[layer]) != null ? ref.animator.hide(duration, easing, (function(_this) {
986 + return (ref1 = this.object.backgrounds[layer]) != null ? ref1.animator.hide(duration, easing, (function(_this) {
987 987 return function() {
988 988 _this.object.backgrounds[layer].dispose();
989 989 return _this.object.backgrounds[layer] = null;
  @@ -1446,5 +1446,5 @@
1446 1446
1447 1447 vn.Component_GameSceneBehavior = Component_GameSceneBehavior;
1448 1448
1449 - //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsMkJBQUE7RUFBQTs7O0FBQU07Ozs7QUFFRjs7Ozs7Ozs7O0VBUWEscUNBQUE7SUFDVCwyREFBQTtJQUVBLElBQUMsQ0FBQSxzQkFBRCxHQUEwQixDQUFBLFNBQUEsS0FBQTthQUFBLFNBQUE7UUFDdEIsS0FBQyxDQUFBLE1BQU0sQ0FBQyxlQUFSLENBQXdCLEtBQUMsQ0FBQSxNQUFNLENBQUMsV0FBaEM7ZUFDQSxLQUFDLENBQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFwQixDQUFBO01BRnNCO0lBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQTtJQUcxQixJQUFDLENBQUEsdUJBQUQsR0FBMkIsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFBO1FBQ3ZCLElBQUcsQ0FBQyxLQUFDLENBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFuQixDQUE0QixLQUFDLENBQUEsTUFBTSxDQUFDLFdBQXBDLENBQUo7VUFDSSxLQUFDLENBQUEsTUFBTSxDQUFDLFlBQVIsQ0FBcUIsS0FBQyxDQUFBLE1BQU0sQ0FBQyxXQUE3QixFQURKOztlQUVBLEtBQUMsQ0FBQSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQXBCLENBQUE7TUFIdUI7SUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBO0lBSzNCLElBQUMsQ0FBQSxlQUFELEdBQW1CO0lBQ25CLElBQUMsQ0FBQSxZQUFELEdBQWdCO0VBWlA7OztBQWNiOzs7Ozs7d0NBS0EsVUFBQSxHQUFZLFNBQUE7QUFDUixRQUFBO0lBQUEsSUFBRyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQTVCLEtBQXNDLENBQXpDO01BQ0ksRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQXRCLENBQUEsRUFESjs7SUFHQSxJQUFDLENBQUEsZUFBRCxHQUFtQixlQUFlLENBQUMsYUFBaEIsQ0FBQTtJQUNuQixlQUFlLENBQUMsT0FBaEIsR0FBMEIsSUFBQyxDQUFB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QXBCLENBQUEsSUFBMEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFRLENBQUEsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFaLENBQXBCLEtBQXlDLENBQXBFLENBQXZDO1FBQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBZCxDQUFBLEVBREo7O2FBRUEsS0FBSyxDQUFDLEtBQU4sQ0FBQSxFQUpKOztFQURTOzs7QUFPYjs7Ozs7O3dDQUtBLGNBQUEsR0FBZ0IsU0FBQTtJQUNaLElBQUcsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFyQjtNQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQXJCLEdBQTRCLE1BRGhDOztJQUdBLElBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUE1QjthQUNJLElBQUMsQ0FBQSxXQUFELENBQUEsRUFESjs7RUFKWTs7O0FBT2hCOzs7Ozs7d0NBS0EsYUFBQSxHQUFlLFNBQUE7SUFDWCxXQUFXLENBQUMsS0FBWixHQUFvQixJQUFDLENBQUE7SUFDckIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFsQixDQUFBO0lBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBakIsQ0FBQTtJQUVBLElBQUMsQ0FBQSxjQUFELENBQUE7SUFDQSxJQUFDLENBQUEsV0FBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLGVBQUQsQ0FBQTtXQUVBLDZEQUFBO0VBVFc7Ozs7R0E3OEJ1QixFQUFFLENBQUM7O0FBdzlCN0MsRUFBRSxDQUFDLDJCQUFILEdBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4jXG4jICAgU2NyaXB0OiBDb21wb25lbnRfR2FtZVNjZW5lQmVoYXZpb3JcbiNcbiMgICAkJENPUFlSSUdIVCQkXG4jXG4jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNsYXNzIENvbXBvbmVudF9HYW1lU2NlbmVCZWhhdmlvciBleHRlbmRzIGdzLkNvbXBvbmVudF9MYXlvdXRTY2VuZUJlaGF2aW9yXG4gIyAgIEBvYmplY3RDb2RlY0JsYWNrTGlzdCA9IFtcIm9iamVjdE1hbmFnZXJcIl1cbiAgICAjIyMqXG4gICAgKiBEZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB2aXN1YWwgbm92ZWwgZ2FtZSBzY2VuZS5cbiAgICAqXG4gICAgKiBAbW9kdWxlIHZuXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0dhbWVTY2VuZUJlaGF2aW9yXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfTGF5b3V0U2NlbmVCZWhhdmlvclxuICAgICogQG1lbWJlcm9mIHZuXG4gICAgIyMjXG4gICAgY29uc3RydWN0b3I6IC0+XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgXG4gICAgICAgIEBvbkF1dG9Db21tb25FdmVudFN0YXJ0ID0gPT5cbiAgICAgICAgICAgIEBvYmplY3QucmVtb3ZlQ29tcG9uZW50KEBvYmplY3QuaW50ZXJwcmV0ZXIpXG4gICAgICAgICAgICBAb2JqZWN0LmludGVycHJldGVyLnN0b3AoKVxuICAgICAgICBAb25BdXRvQ29tbW9uRXZlbnRGaW5pc2ggPSA9PlxuICAgICAgICAgICAgaWYgIUBvYmplY3QuY29tcG9uZW50cy5jb250YWlucyhAb2JqZWN0LmludGVycHJldGVyKVxuICAgICAgICAgICAgICAgIEBvYmplY3QuYWRkQ29tcG9uZW50KEBvYmplY3QuaW50ZXJwcmV0ZXIpXG4gICAgICAgICAgICBAb2JqZWN0LmludGVycHJldGVyLnJlc3VtZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgQHJlc291cmNlQ29udGV4dCA9IG51bGxcbiAgICAgICAgQG9iamVjdERvbWFpbiA9IFwiXCJcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogSW5pdGlhbGl6ZXMgdGhlIHNjZW5lLiBcbiAgICAqXG4gICAgKiBAbWV0aG9kIGluaXRpYWxpemVcbiAgICAjIyMgXG4gICAgaW5pdGlhbGl6ZTogLT5cbiAgICAgICAgaWYgU2NlbmVNYW5hZ2VyLnByZXZpb3VzU2NlbmVzLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIuY2xlYXIoKVxuICAgICAgICAgICAgXG4gICAgICAgIEByZXNvdXJjZUNvbnRleHQgPSBSZXNvdXJjZU1hbmFnZXIuY3JlYXRlQ29udGV4dCgpXG4gICAgICAgIFJlc291cmNlTWFuYWdlci5jb250ZXh0ID0gQHJlc291cmNlQ29udGV4dFxuICAgICAgICBcbiAgICAgICAgR3JhcGhpY3MuZnJlZXplKClcbiAgICAgICAgc2F2ZUdhbWUgPSBHYW1lTWFuYWdlci5sb2FkZWRTYXZlR2FtZVxuICAgICAgICBzY2VuZVVpZCA9IG51bGxcbiAgICAgICAgXG4gICAgICAgIGlmIHNhdmVHYW1lXG4gICAgICAgICAgICBzY2VuZVVpZCA9IHNhdmVHYW1lLnNjZW5lVWlkXG4gICAgICAgICAgICBAb2JqZWN0LnNjZW5lRGF0YSA9IHNhdmVHYW1lLmRhdGFcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc2NlbmVVaWQgPSAkUEFSQU1TLnByZXZpZXc/LnNjZW5lLnVpZCB8fCBAb2JqZWN0LnNjZW5lRGF0YS51aWQgfHwgUmVjb3JkTWFuYWdlci5zeXN0ZW0uc3RhcnRJbmZvLnNjZW5lLnVpZFxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5zY2VuZURvY3VtZW50ID0gRGF0YU1hbmFnZXIuZ2V0RG9jdW1lbnQoc2NlbmVVaWQpXG4gICAgICAgIFxuICAgICAgICBpZiBAb2JqZWN0LnNjZW5lRG9jdW1lbnQgYW5kIEBvYmplY3Quc2NlbmVEb2N1bWVudC5pdGVtcy50eXBlID09IFwidm4uc2NlbmVcIlxuICAgICAgICAgICAgQG9iamVjdC5jaGFwdGVyID0gRGF0YU1hbmFnZXIuZ2V0RG9jdW1lbnQoQG9iamVjdC5zY2VuZURvY3VtZW50Lml0ZW1zLmNoYXB0ZXJVaWQpXG4gICAgICAgICAgICBAb2JqZWN0LmN1cnJlbnRDaGFyYWN0ZXIgPSB7IFwibmFtZVwiOiBcIlwiIH0gI1JlY29yZE1hbmFnZXIuY2hhcmFjdGVyc1swXVxuICAgIFxuICAgICAgICAgICAgaWYgbm90IEdhbWVNYW5hZ2VyLmluaXRpYWxpemVkXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuaW5pdGlhbGl6ZSgpXG4gICAgXG4gICAgICAgICAgICBMYW5ndWFnZU1hbmFnZXIubG9hZEJ1bmRsZXMoKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzcHJpdGUgPSBuZXcgZ3MuU3ByaXRlKClcbiAgICAgICAgICAgIHNwcml0ZS5iaXRtYXAgPSBuZXcgZ3MuQml0bWFwKEdyYXBoaWNzLndpZHRoLCA1MClcbiAgICAgICAgICAgIHNwcml0ZS5iaXRtYXAuZHJhd1RleHQoMCwgMCwgR3JhcGhpY3Mud2lkdGgsIDUwLCBcIk5vIFN0YXJ0IFNjZW5lIHNlbGVjdGVkXCIsIDEsIDApXG4gICAgICAgICAgICBzcHJpdGUuc3JjUmVjdCA9IG5ldyBncy5SZWN0KDAsIDAsIEdyYXBoaWNzLndpZHRoLCA1MClcbiAgICAgICAgICAgIHNwcml0ZS55ID0gKEdyYXBoaWNzLmhlaWdodCAtIDUwKSAvIDJcbiAgICAgICAgICAgIHNwcml0ZS56ID0gMTAwMDBcbiAgIFxuICAgICAgICBAc2V0dXBTY3JlZW4oKSBcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogRGlzcG9zZXMgdGhlIHNjZW5lLiBcbiAgICAqXG4gICAgKiBAbWV0aG9kIGRpc3Bvc2VcbiAgICAjIyNcbiAgICBkaXNwb3NlOiAtPlxuICAgICAgICBSZXNvdXJjZU1hbmFnZXIuY29udGV4dCA9IEByZXNvdXJjZUNvbnRleHRcbiAgICAgICAgQG9iamVjdC5yZW1vdmVPYmplY3QoQG9iamVjdC5jb21tb25FdmVudENvbnRhaW5lcilcbiAgICAgICAgQHNob3cobm8pXG5cbiAgICAgICAgZm9yIGV2ZW50IGluIEdhbWVNYW5hZ2VyLmNvbW1vbkV2ZW50c1xuICAgICAgICAgICAgaWYgZXZlbnRcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudHMub2ZmQnlPd25lcihcInN0YXJ0XCIsIEBvYmplY3QpXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRzLm9mZkJ5T3duZXIoXCJmaW5pc2hcIiwgQG9iamVjdClcbiAgICAgICAgICAgIFxuICAgICAgICBpZiBAb2JqZWN0LnZpZGVvXG4gICAgICAgICAgICBAb2JqZWN0LnZpZGVvLmRpc3Bvc2UoKVxuICAgICAgICAgICAgQG9iamVjdC52aWRlby5vbkVuZGVkKClcbiAgICAgICAgXG4gICAgICAgIHN1cGVyKClcbiAgICBcbiAgICBjaGFuZ2VQaWN0dXJlRG9tYWluOiAoZG9tYWluKSAtPlxuICAgICAgICBAb2JqZWN0LnBpY3R1cmVDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgQG9iamVjdC5waWN0dXJlcyA9IEBvYmplY3QucGljdHVyZUNvbnRhaW5lci5zdWJPYmplY3RzXG4gICAgY2hhbmdlVGV4dERvbWFpbjogKGRvbWFpbikgLT5cbiAgICAgICAgQG9iamVjdC50ZXh0Q29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgIEBvYmplY3QudGV4dHMgPSBAb2JqZWN0LnRleHRDb250YWluZXIuc3ViT2JqZWN0c1xuICAgIGNoYW5nZVZpZGVvRG9tYWluOiAoZG9tYWluKSAtPlxuICAgICAgICBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgIEBvYmplY3QudmlkZW9zID0gQG9iamVjdC52aWRlb0NvbnRhaW5lci5zdWJPYmplY3RzXG4gICAgY2hhbmdlSG90c3BvdERvbWFpbjogKGRvbWFpbikgLT5cbiAgICAgICAgQG9iamVjdC5ob3RzcG90Q29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgIEBvYmplY3QuaG90c3BvdHMgPSBAb2JqZWN0LmhvdHNwb3RDb250YWluZXIuc3ViT2JqZWN0c1xuICAgIGNoYW5nZU1lc3NhZ2VBcmVhRG9tYWluOiAoZG9tYWluKSAtPlxuICAgICAgICBAb2JqZWN0Lm1lc3NhZ2VBcmVhQ29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgIEBvYmplY3QubWVzc2FnZUFyZWFzID0gQG9iamVjdC5tZXNzYWdlQXJlYUNvbnRhaW5lci5zdWJPYmplY3RzXG4gICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTaG93cy9IaWRlcyB0aGUgY3VycmVudCBzY2VuZS4gQSBoaWRkZW4gc2NlbmUgaXMgbm8gbG9uZ2VyIHNob3duIGFuZCBleGVjdXRlZFxuICAgICogYnV0IGFsbCBvYmplY3RzIGFuZCBkYXRhIGlzIHN0aWxsIHRoZXJlIGFuZCBiZSBzaG93biBhZ2FpbiBhbnl0aW1lLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2hvd1xuICAgICogQHBhcmFtIHtib29sZWFufSB2aXNpYmxlIC0gSW5kaWNhdGVzIGlmIHRoZSBzY2VuZSBzaG91bGQgYmUgc2hvd24gb3IgaGlkZGVuLlxuICAgICMjIyAgICAgICAgICBcbiAgICBzaG93OiAodmlzaWJsZSkgLT5cbiAgICAgICAgQG9iamVjdC52aXNpYmxlID0gdmlzaWJsZVxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5sYXlvdXQ/LnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICAgICBAb2JqZWN0LnBpY3R1cmVDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuICAgICAgICBAb2JqZWN0LmhvdHNwb3RDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuICAgICAgICBAb2JqZWN0LnRleHRDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuICAgICAgICBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLmJlaGF2aW9yLnNldFZpc2libGUodmlzaWJsZSlcbiAgICAgICAgQG9iamVjdC5tZXNzYWdlQXJlYUNvbnRhaW5lci5iZWhhdmlvci5zZXRWaXNpYmxlKHZpc2libGUpXG4gICAgICAgIEBvYmplY3Qudmlld3BvcnRDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuICAgICAgICBAb2JqZWN0LmNoYXJhY3RlckNvbnRhaW5lci5iZWhhdmlvci5zZXRWaXNpYmxlKHZpc2libGUpXG4gICAgICAgIEBvYmplY3QuYmFja2dyb3VuZENvbnRhaW5lci5iZWhhdmlvci5zZXRWaXNpYmxlKHZpc2libGUpXG5cbiAgICAgICAgQHZpZXdwb3J0Py52aXNpYmxlID0gdmlzaWJsZVxuICAgICAgICBAb2JqZWN0LmNob2ljZVdpbmRvdz8udmlzaWJsZSA9IHZpc2libGVcbiAgICAgICAgQG9iamVjdC5pbnB1dE51bWJlckJveD8udmlzaWJsZSA9IHZpc2libGVcbiAgICAgICAgQG9iamVjdC5pbnB1dFRleHRCb3g/LnZpc2libGUgPSB2aXNpYmxlXG4gICAgICAgIEBvYmplY3QuaW5wdXRUZXh0Qm94Py51cGRhdGUoKVxuICAgICAgICBAb2JqZWN0LmlucHV0TnVtYmVyQm94Py51cGRhdGUoKVxuICAgICAgICBAb2JqZWN0LmNob2ljZVdpbmRvdz8udXBkYXRlKClcbiAgICAgICAgXG4gICAgICAgICNpZiB2aXNpYmxlIGFuZCBAb2JqZWN0LmNvbW1vbkV2ZW50Q29udGFpbmVyLnN1Yk9iamVjdHMubGVuZ3RoID09IDBcbiAgICAgICAgQHNldHVwQ29tbW9uRXZlbnRzKClcbiAgICBcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBjb21tb24gZXZlbnQgaGFuZGxpbmcuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cENvbW1vbkV2ZW50c1xuICAgICMjIyAgIFxuICAgIHNldHVwQ29tbW9uRXZlbnRzOiAtPlxuICAgICAgICBjb21tb25FdmVudHMgPSBAb2JqZWN0LnNjZW5lRGF0YT8uY29tbW9uRXZlbnRzXG4gICAgICAgIFxuICAgICAgICBpZiBjb21tb25FdmVudHNcbiAgICAgICAgICAgIGZvciBldmVudCwgaSBpbiBjb21tb25FdmVudHNcbiAgICAgICAgICAgICAgICBpZiBldmVudCBhbmQgQG9iamVjdC5jb21tb25FdmVudENvbnRhaW5lci5zdWJPYmplY3RzLmluZGV4T2YoZXZlbnQpID09IC0xXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuY29tbW9uRXZlbnRDb250YWluZXIuc2V0T2JqZWN0KGV2ZW50LCBpKVxuICAgICAgICAgICAgICAgICAgICBldmVudC5iZWhhdmlvci5zZXR1cEV2ZW50SGFuZGxlcnMoKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiBldmVudC5pbnRlcnByZXRlcj8uaXNSdW5uaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudHMuZW1pdChcInN0YXJ0XCIsIGV2ZW50KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBmb3IgZXZlbnQsIGkgaW4gR2FtZU1hbmFnZXIuY29tbW9uRXZlbnRzXG4gICAgICAgICAgICAgICAgaWYgZXZlbnQgYW5kIChldmVudC5yZWNvcmQuc3RhcnRDb25kaXRpb24gPT0gMSBvciBldmVudC5yZWNvcmQucGFyYWxsZWwpIGFuZCBAb2JqZWN0LmNvbW1vbkV2ZW50Q29udGFpbmVyLnN1Yk9iamVjdHMuaW5kZXhPZihldmVudCkgPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5jb21tb25FdmVudENvbnRhaW5lci5zZXRPYmplY3QoZXZlbnQsIGkpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudHMub2ZmQnlPd25lcihcInN0YXJ0XCIsIEBvYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50cy5vZmZCeU93bmVyKFwiZmluaXNoXCIsIEBvYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXZlbnQucmVjb3JkLnBhcmFsbGVsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudHMub24gXCJzdGFydFwiLCBncy5DYWxsQmFjayhcIm9uQXV0b0NvbW1vbkV2ZW50U3RhcnRcIiwgdGhpcyksIG51bGwsIEBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50cy5vbiBcImZpbmlzaFwiLCBncy5DYWxsQmFjayhcIm9uQXV0b0NvbW1vbkV2ZW50RmluaXNoXCIsIHRoaXMpLCBudWxsLCBAb2JqZWN0XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQuaW50ZXJwcmV0ZXI/LmlzUnVubmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRzLmVtaXQoXCJzdGFydFwiLCBldmVudClcbiAgICAgICAgIFxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIG1haW4gaW50ZXJwcmV0ZXIuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cEludGVycHJldGVyXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgXG4gICAgc2V0dXBJbnRlcnByZXRlcjogLT5cbiAgICAgICAgQG9iamVjdC5jb21tYW5kcyA9IEBvYmplY3Quc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kc1xuICAgICAgICBcbiAgICAgICAgaWYgQG9iamVjdC5zY2VuZURhdGEuaW50ZXJwcmV0ZXJcbiAgICAgICAgICAgIEBvYmplY3QucmVtb3ZlQ29tcG9uZW50KEBvYmplY3QuaW50ZXJwcmV0ZXIpXG4gICAgICAgICAgICBAb2JqZWN0LmludGVycHJldGVyID0gQG9iamVjdC5zY2VuZURhdGEuaW50ZXJwcmV0ZXJcbiAgICAgICAgICAgIEBvYmplY3QuYWRkQ29tcG9uZW50KEBvYmplY3QuaW50ZXJwcmV0ZXIpXG4gICAgICAgICAgICAjT2JqZWN0Lm1peGluKEBvYmplY3QuaW50ZXJwcmV0ZXIsIEBvYmplY3Quc2NlbmVEYXRhLmludGVycHJldGVyLCBncy5Db21wb25lbnRfQ29tbWFuZEludGVycHJldGVyLm9iamVjdENvZGVjQmxhY2tMaXN0KVxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci5jb250ZXh0LnNldChAb2JqZWN0LnNjZW5lRG9jdW1lbnQudWlkLCBAb2JqZWN0KVxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci5vYmplY3QgPSBAb2JqZWN0XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIuc2V0dXAoKVxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci5jb250ZXh0LnNldChAb2JqZWN0LnNjZW5lRG9jdW1lbnQudWlkLCBAb2JqZWN0KVxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci5zdGFydCgpXG4gICAgICAgICAgICBcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBjaGFyYWN0ZXJzIGFuZCByZXN0b3JlcyB0aGVtIGZyb20gbG9hZGVkIHNhdmUgZ2FtZSBpZiBuZWNlc3NhcnkuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cENoYXJhY3RlcnNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgICAgXG4gICAgc2V0dXBDaGFyYWN0ZXJzOiAtPlxuICAgICAgICBpZiBAb2JqZWN0LnNjZW5lRGF0YS5jaGFyYWN0ZXJzP1xuICAgICAgICAgICAgZm9yIGMsIGkgaW4gQG9iamVjdC5zY2VuZURhdGEuY2hhcmFjdGVyc1xuICAgICAgICAgICAgICAgIEBvYmplY3QuY2hhcmFjdGVyQ29udGFpbmVyLnNldE9iamVjdChjLCBpKVxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5jdXJyZW50Q2hhcmFjdGVyID0gQG9iamVjdC5zY2VuZURhdGEuY3VycmVudENoYXJhY3RlciB8fCB7IG5hbWU6IFwiXCIgfSNSZWNvcmRNYW5hZ2VyLmNoYXJhY3RlcnNbMF1cbiAgICAgICBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIHZpZXdwb3J0cyBhbmQgcmVzdG9yZXMgdGhlbSBmcm9tIGxvYWRlZCBzYXZlIGdhbWUgaWYgbmVjZXNzYXJ5LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBWaWV3cG9ydHNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgXG4gICAgc2V0dXBWaWV3cG9ydHM6IC0+XG4gICAgICAgIHZpZXdwb3J0cyA9IEBvYmplY3Quc2NlbmVEYXRhPy52aWV3cG9ydHMgPyBbXVxuICAgICAgICBmb3Igdmlld3BvcnQsIGkgaW4gdmlld3BvcnRzXG4gICAgICAgICAgICBpZiB2aWV3cG9ydFxuICAgICAgICAgICAgICAgIEBvYmplY3Qudmlld3BvcnRDb250YWluZXIuc2V0T2JqZWN0KHZpZXdwb3J0LCBpKVxuICAgICMjIypcbiAgICAqIFNldHMgdXAgYmFja2dyb3VuZHMgYW5kIHJlc3RvcmVzIHRoZW0gZnJvbSBsb2FkZWQgc2F2ZSBnYW1lIGlmIG5lY2Vzc2FyeS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwQmFja2dyb3VuZHNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICBcbiAgICBzZXR1cEJhY2tncm91bmRzOiAtPlxuICAgICAgICBiYWNrZ3JvdW5kcyA9IEBvYmplY3Quc2NlbmVEYXRhPy5iYWNrZ3JvdW5kcyA/IFtdXG4gICAgICAgIGZvciBiLCBpIGluIGJhY2tncm91bmRzXG4gICAgICAgICAgICBAb2JqZWN0LmJhY2tncm91bmRDb250YWluZXIuc2V0T2JqZWN0KGIsIGkpXG4gICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIHBpY3R1cmVzIGFuZCByZXN0b3JlcyB0aGVtIGZyb20gbG9hZGVkIHNhdmUgZ2FtZSBpZiBuZWNlc3NhcnkuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cFBpY3R1cmVzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgXG4gICAgc2V0dXBQaWN0dXJlczogLT5cbiAgICAgICAgcGljdHVyZXMgPSBAb2JqZWN0LnNjZW5lRGF0YT8ucGljdHVyZXMgPyB7fVxuICAgICAgICBmb3IgZG9tYWluIG9mIHBpY3R1cmVzXG4gICAgICAgICAgICBAb2JqZWN0LnBpY3R1cmVDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIGlmIHBpY3R1cmVzW2RvbWFpbl0gdGhlbiBmb3IgcGljdHVyZSwgaSBpbiBwaWN0dXJlc1tkb21haW5dXG4gICAgICAgICAgICAgICAgQG9iamVjdC5waWN0dXJlQ29udGFpbmVyLnNldE9iamVjdChwaWN0dXJlLCBpKVxuICAgICAgICAgICAgICAgIGlmIHBpY3R1cmU/LmltYWdlXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBcIkdyYXBoaWNzL1BpY3R1cmVzLyN7cGljdHVyZS5pbWFnZX1cIlxuICAgICAgICAgICAgICAgICAgICBAcmVzb3VyY2VDb250ZXh0LmFkZChwYXRoLCBSZXNvdXJjZU1hbmFnZXIucmVzb3VyY2VzQnlQYXRoW3BhdGhdKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIHRleHRzIGFuZCByZXN0b3JlcyB0aGVtIGZyb20gbG9hZGVkIHNhdmUgZ2FtZSBpZiBuZWNlc3NhcnkuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cFRleHRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgXG4gICAgc2V0dXBUZXh0czogLT5cbiAgICAgICAgdGV4dHMgPSBAb2JqZWN0LnNjZW5lRGF0YT8udGV4dHMgPyB7fVxuICAgICAgICBmb3IgZG9tYWluIG9mIHRleHRzXG4gICAgICAgICAgICBAb2JqZWN0LnRleHRDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIGlmIHRleHRzW2RvbWFpbl0gdGhlbiBmb3IgdGV4dCwgaSBpbiB0ZXh0c1tkb21haW5dXG4gICAgICAgICAgICAgICAgQG9iamVjdC50ZXh0Q29udGFpbmVyLnNldE9iamVjdCh0ZXh0LCBpKVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCB2aWRlb3MgYW5kIHJlc3RvcmVzIHRoZW0gZnJvbSBsb2FkZWQgc2F2ZSBnYW1lIGlmIG5lY2Vzc2FyeS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwVmlkZW9zXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHNldHVwVmlkZW9zOiAtPlxuICAgICAgICB2aWRlb3MgPSBAb2JqZWN0LnNjZW5lRGF0YT8udmlkZW9zID8ge31cbiAgICAgICAgZm9yIGRvbWFpbiBvZiB2aWRlb3NcbiAgICAgICAgICAgIEBvYmplY3QudmlkZW9Db250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIGlmIHZpZGVvc1tkb21haW5dIHRoZW4gZm9yIHZpZGVvLCBpIGluIHZpZGVvc1tkb21haW5dXG4gICAgICAgICAgICAgICAgaWYgdmlkZW9cbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFwiTW92aWVzLyN7dmlkZW8udmlkZW99XCJcbiAgICAgICAgICAgICAgICAgICAgQHJlc291cmNlQ29udGV4dC5hZGQocGF0aCwgUmVzb3VyY2VNYW5hZ2VyLnJlc291cmNlc0J5UGF0aFtwYXRoXSlcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8udmlzaWJsZSA9IHllc1xuICAgICAgICAgICAgICAgICAgICB2aWRlby51cGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLnNldE9iamVjdCh2aWRlbywgaSlcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBob3RzcG90cyBhbmQgcmVzdG9yZXMgdGhlbSBmcm9tIGxvYWRlZCBzYXZlIGdhbWUgaWYgbmVjZXNzYXJ5LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBIb3RzcG90c1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICAgXG4gICAgc2V0dXBIb3RzcG90czogLT5cbiAgICAgICAgaG90c3BvdHMgPSBAb2JqZWN0LnNjZW5lRGF0YT8uaG90c3BvdHMgPyB7fVxuICAgICAgICBmb3IgZG9tYWluIG9mIGhvdHNwb3RzXG4gICAgICAgICAgICBAb2JqZWN0LmhvdHNwb3RDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIGlmIGhvdHNwb3RzW2RvbWFpbl0gdGhlbiBmb3IgaG90c3BvdCwgaSBpbiBob3RzcG90c1tkb21haW5dXG4gICAgICAgICAgICAgICAgQG9iamVjdC5ob3RzcG90Q29udGFpbmVyLnNldE9iamVjdChob3RzcG90LCBpKVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIGxheW91dC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwTGF5b3V0XG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgIFxuICAgIHNldHVwTGF5b3V0OiAtPlxuICAgICAgICBAZGF0YUZpZWxkcyA9IHVpLlVJTWFuYWdlci5kYXRhU291cmNlc1t1aS5VaUZhY3RvcnkubGF5b3V0cy5nYW1lTGF5b3V0LmRhdGFTb3VyY2UgfHwgXCJkZWZhdWx0XCJdKClcbiAgICAgICAgQGRhdGFGaWVsZHMuc2NlbmUgPSBAb2JqZWN0XG4gICAgICAgIHdpbmRvdy4kZGF0YUZpZWxkcyA9IEBkYXRhRmllbGRzXG4gICAgICAgIGFkdlZpc2libGUgPSBAb2JqZWN0Lm1lc3NhZ2VNb2RlID09IHZuLk1lc3NhZ2VNb2RlLkFEVlxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5sYXlvdXQgPSB1aS5VaUZhY3RvcnkuY3JlYXRlRnJvbURlc2NyaXB0b3IodWkuVWlGYWN0b3J5LmxheW91dHMuZ2FtZUxheW91dCwgQG9iamVjdClcbiAgICAgICAgQG9iamVjdC5sYXlvdXQudmlzaWJsZSA9IGFkdlZpc2libGVcbiAgICAgICAgJGdhbWVNZXNzYWdlX21lc3NhZ2UudmlzaWJsZSA9IGFkdlZpc2libGVcbiAgICAgICAgQG9iamVjdC5sYXlvdXQudWkucHJlcGFyZSgpXG4gICAgICAgIFxuICAgICAgICBpZiAkdGVtcEZpZWxkcy5jaG9pY2VzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICBAc2hvd0Nob2ljZXMoR2FtZU1hbmFnZXIudGVtcEZpZWxkcy5jaG9pY2VzLCBncy5DYWxsQmFjayhcIm9uQ2hvaWNlQWNjZXB0XCIsIEBvYmplY3QuaW50ZXJwcmV0ZXIsIHsgcG9pbnRlcjogQG9iamVjdC5pbnRlcnByZXRlci5wb2ludGVyLCBwYXJhbXM6IEBwYXJhbXMgfSkpXG4gICAgXG4gICAgICAgIGlmIEBvYmplY3QuaW50ZXJwcmV0ZXIud2FpdGluZ0Zvci5pbnB1dE51bWJlclxuICAgICAgICAgICAgQHNob3dJbnB1dE51bWJlcihHYW1lTWFuYWdlci50ZW1wRmllbGRzLmRpZ2l0cywgZ3MuQ2FsbEJhY2soXCJvbklucHV0TnVtYmVyRmluaXNoXCIsIEBvYmplY3QuaW50ZXJwcmV0ZXIsIEBvYmplY3QuaW50ZXJwcmV0ZXIpKVxuICAgICAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3QuaW50ZXJwcmV0ZXIud2FpdGluZ0Zvci5pbnB1dFRleHRcbiAgICAgICAgICAgIEBzaG93SW5wdXRUZXh0KEdhbWVNYW5hZ2VyLnRlbXBGaWVsZHMubGV0dGVycywgZ3MuQ2FsbEJhY2soXCJvbklucHV0VGV4dEZpbmlzaFwiLCBAb2JqZWN0LmludGVycHJldGVyLCBAb2JqZWN0LmludGVycHJldGVyKSlcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCB0aGUgbWFpbiB2aWV3cG9ydCAvIHNjcmVlbiB2aWV3cG9ydC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwTWFpblZpZXdwb3J0XG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHNldHVwTWFpblZpZXdwb3J0OiAtPlxuICAgICAgICBpZiAhQG9iamVjdC5zY2VuZURhdGEudmlld3BvcnRcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnQucmVtb3ZlQ29tcG9uZW50KEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnQudmlzdWFsKVxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydC5kaXNwb3NlKClcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnQgPSBuZXcgZ3MuT2JqZWN0X1ZpZXdwb3J0KEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnQudmlzdWFsLnZpZXdwb3J0KVxuICAgICAgICAgICAgQHZpZXdwb3J0ID0gR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydC52aXN1YWwudmlld3BvcnRcbiAgICAgICAgICAgIEBvYmplY3Qudmlld3BvcnQgPSBHYW1lTWFuYWdlci5zY2VuZVZpZXdwb3J0XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnQuZGlzcG9zZSgpXG4gICAgICAgICAgICBHYW1lTWFuYWdlci5zY2VuZVZpZXdwb3J0ID0gQG9iamVjdC5zY2VuZURhdGEudmlld3BvcnRcbiAgICAgICAgICAgIEBvYmplY3Qudmlld3BvcnQgPSBAb2JqZWN0LnNjZW5lRGF0YS52aWV3cG9ydFxuICAgICAgICAgICAgQHZpZXdwb3J0ID0gQG9iamVjdC52aWV3cG9ydC52aXN1YWwudmlld3BvcnRcbiAgICAgICAgICAgIEB2aWV3cG9ydC52aWV3cG9ydCA9IEdyYXBoaWNzLnZpZXdwb3J0XG4gICAgICAgICAgICBAb2JqZWN0LmFkZE9iamVjdChAb2JqZWN0LnZpZXdwb3J0KVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBzY3JlZW4uXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cFNjcmVlblxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBzZXR1cFNjcmVlbjogLT5cbiAgICAgICAgaWYgQG9iamVjdC5zY2VuZURhdGEuc2NyZWVuXG4gICAgICAgICAgICBAb2JqZWN0LnZpZXdwb3J0LnJlc3RvcmUoQG9iamVjdC5zY2VuZURhdGEuc2NyZWVuKVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogUmVzdG9yZXMgbWFpbiBpbnRlcnByZXRlciBmcm9tIGxvYWRlZCBzYXZlIGdhbWUuXG4gICAgKlxuICAgICogQG1ldGhvZCByZXN0b3JlSW50ZXJwcmV0ZXJcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgICBcbiAgICByZXN0b3JlSW50ZXJwcmV0ZXI6IC0+XG4gICAgICAgIGlmIEBvYmplY3Quc2NlbmVEYXRhLmludGVycHJldGVyXG4gICAgICAgICAgICBAb2JqZWN0LmludGVycHJldGVyLnJlc3RvcmUoKVxuICAgIFxuICAgICMjIypcbiAgICAqIFJlc3RvcmVzIG1lc3NhZ2UgYm94IGZyb20gbG9hZGVkIHNhdmUgZ2FtZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHJlc3RvcmVNZXNzYWdlQm94XG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICBcbiAgICByZXN0b3JlTWVzc2FnZUJveDogLT5cbiAgICAgICAgbWVzc2FnZUJveGVzID0gQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VCb3hlc1xuICAgICAgICBpZiBtZXNzYWdlQm94ZXNcbiAgICAgICAgICAgIGZvciBtZXNzYWdlQm94IGluIG1lc3NhZ2VCb3hlc1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChtZXNzYWdlQm94LmlkKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QudmlzaWJsZSA9IG1lc3NhZ2VCb3gudmlzaWJsZVxuICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2VCb3gubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQobWVzc2FnZUJveC5tZXNzYWdlLmlkKVxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRleHRSZW5kZXJlci5kaXNwb3NlKClcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5taXhpbihtZXNzYWdlLCBtZXNzYWdlQm94Lm1lc3NhZ2UsIHVpLk9iamVjdF9NZXNzYWdlLm9iamVjdENvZGVjQmxhY2tMaXN0LmNvbmNhdChbXCJvcmlnaW5cIl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGZvciBjIGluIG1lc3NhZ2UuY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5vYmplY3QgPSBtZXNzYWdlXG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFJlc3RvcmVzIG1lc3NhZ2UgZnJvbSBsb2FkZWQgc2F2ZSBnYW1lLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVzdG9yZU1lc3NhZ2VzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgICAgICAgICBcbiAgICByZXN0b3JlTWVzc2FnZXM6IC0+XG4gICAgICAgICNtZXNzYWdlT2JqZWN0ID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQoXCJnYW1lTWVzc2FnZV9tZXNzYWdlXCIpXG4gICAgICAgIFxuICAgICAjICAgaWYgQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VcbiAgICAgIyAgICAgICBtZXNzYWdlT2JqZWN0LnJlc3RvcmUoQG9iamVjdC5zY2VuZURhdGEubWVzc2FnZSlcbiAgICAgICAgICAgIFxuICAgICAjICAgaWYgQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VzXG4gICAgICMgICAgICAgbWVzc2FnZU9iamVjdC5tZXNzYWdlLnJlc3RvcmVNZXNzYWdlcyhAb2JqZWN0LnNjZW5lRGF0YS5tZXNzYWdlcylcbiAgICAgIyAgICAgICBtZXNzYWdlT2JqZWN0LnRleHRSZW5kZXJlci5yZXN0b3JlKEBvYmplY3Quc2NlbmVEYXRhLm1lc3NhZ2VUZXh0UmVuZGVyZXIpXG4gICAgICAgICAgICBcbiAgICAgICAgaWYgQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VBcmVhc1xuICAgICAgICAgICAgZm9yIGRvbWFpbiBvZiBAb2JqZWN0LnNjZW5lRGF0YS5tZXNzYWdlQXJlYXNcbiAgICAgICAgICAgICAgICBAb2JqZWN0Lm1lc3NhZ2VBcmVhQ29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgICAgICAgICAgbWVzc2FnZUFyZWFzID0gQG9iamVjdC5zY2VuZURhdGEubWVzc2FnZUFyZWFzXG4gICAgICAgICAgICAgICAgaWYgbWVzc2FnZUFyZWFzW2RvbWFpbl0gdGhlbiBmb3IgYXJlYSwgaSBpbiBtZXNzYWdlQXJlYXNbZG9tYWluXVxuICAgICAgICAgICAgICAgICAgICBpZiBhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQXJlYSA9IG5ldyBncy5PYmplY3RfTWVzc2FnZUFyZWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxheW91dCA9IHVpLlVJTWFuYWdlci5jcmVhdGVDb250cm9sRnJvbURlc2NyaXB0b3IodHlwZTogXCJ1aS5DdXN0b21HYW1lTWVzc2FnZVwiLCBpZDogXCJjdXN0b21HYW1lTWVzc2FnZV9cIitpLCBwYXJhbXM6IHsgaWQ6IFwiY3VzdG9tR2FtZU1lc3NhZ2VfXCIraSB9LCBtZXNzYWdlQXJlYSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChcImN1c3RvbUdhbWVNZXNzYWdlX1wiK2krXCJfbWVzc2FnZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0Lm1peGluKG1lc3NhZ2UsIGFyZWEubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIG1lc3NhZ2UuY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMub2JqZWN0ID0gbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgI21lc3NhZ2UucmVzdG9yZShmLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VMYXlvdXQuZHN0UmVjdC54ID0gYXJlYS5sYXlvdXQuZHN0UmVjdC54XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGF5b3V0LmRzdFJlY3QueSA9IGFyZWEubGF5b3V0LmRzdFJlY3QueVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxheW91dC5kc3RSZWN0LndpZHRoID0gYXJlYS5sYXlvdXQuZHN0UmVjdC53aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxheW91dC5kc3RSZWN0LmhlaWdodCA9IGFyZWEubGF5b3V0LmRzdFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGF5b3V0Lm5lZWRzVXBkYXRlID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGF5b3V0LnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAjbWVzc2FnZS5tZXNzYWdlLnJlc3RvcmVNZXNzYWdlcyhmLm1lc3NhZ2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgI21lc3NhZ2UudGV4dFJlbmRlcmVyLnJlc3RvcmUoZi50ZXh0UmVuZGVyZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAjbWVzc2FnZS52aXNpYmxlID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQXJlYS5tZXNzYWdlID0gbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUFyZWEubGF5b3V0ID0gbWVzc2FnZUxheW91dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUFyZWEuYWRkT2JqZWN0KG1lc3NhZ2VMYXlvdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICBAb2JqZWN0Lm1lc3NhZ2VBcmVhQ29udGFpbmVyLnNldE9iamVjdChtZXNzYWdlQXJlYSwgaSlcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgIFxuICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIFJlc3RvcmVzIGF1ZGlvLXBsYXliYWNrIGZyb20gbG9hZGVkIHNhdmUgZ2FtZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHJlc3RvcmVBdWRpb1BsYXliYWNrXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgICAgXG4gICAgcmVzdG9yZUF1ZGlvUGxheWJhY2s6IC0+XG4gICAgICAgIGlmIEBvYmplY3Quc2NlbmVEYXRhLmF1ZGlvXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuYXVkaW9CdWZmZXJzLnB1c2goYikgZm9yIGIgaW4gQG9iamVjdC5zY2VuZURhdGEuYXVkaW8uYXVkaW9CdWZmZXJzXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuYXVkaW9CdWZmZXJzQnlMYXllciA9IEBvYmplY3Quc2NlbmVEYXRhLmF1ZGlvLmF1ZGlvQnVmZmVyc0J5TGF5ZXJcbiAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5hdWRpb0xheWVycyA9IEBvYmplY3Quc2NlbmVEYXRhLmF1ZGlvLmF1ZGlvTGF5ZXJzXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuc291bmRSZWZlcmVuY2VzID0gQG9iamVjdC5zY2VuZURhdGEuYXVkaW8uc291bmRSZWZlcmVuY2VzXG4gICAgICAgICAgICBcbiAgICAgXG4gICAgIyMjKlxuICAgICogUmVzdG9yZXMgdGhlIHNjZW5lIG9iamVjdHMgZnJvbSB0aGUgY3VycmVudCBsb2FkZWQgc2F2ZS1nYW1lLiBJZiBubyBzYXZlLWdhbWUgaXNcbiAgICAqIHByZXNlbnQgaW4gR2FtZU1hbmFnZXIubG9hZGVkU2F2ZUdhbWUsIG5vdGhpbmcgd2lsbCBoYXBwZW4uXG4gICAgKlxuICAgICogQG1ldGhvZCByZXN0b3JlU2NlbmVcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyNcbiAgICByZXN0b3JlU2NlbmU6IC0+XG4gICAgICAgIHNhdmVHYW1lID0gR2FtZU1hbmFnZXIubG9hZGVkU2F2ZUdhbWVcbiAgICAgICAgaWYgc2F2ZUdhbWVcbiAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgZ3MuT2JqZWN0Q29kZWNDb250ZXh0KFtHcmFwaGljcy52aWV3cG9ydCwgQG9iamVjdCwgdGhpc10sIHNhdmVHYW1lLmVuY29kZWRPYmplY3RTdG9yZSwgbnVsbClcbiAgICAgICAgICAgIHNhdmVHYW1lLmRhdGEgPSBncy5PYmplY3RDb2RlYy5kZWNvZGUoc2F2ZUdhbWUuZGF0YSwgY29udGV4dClcbiAgICAgICAgICAgIFJlY29yZE1hbmFnZXIuY2hhcmFjdGVyc1tjLmluZGV4XT8ubmFtZSA9IGMubmFtZSBpZiBjIGZvciBjIGluIHNhdmVHYW1lLmRhdGEuY2hhcmFjdGVyTmFtZXNcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnJlc3RvcmUoc2F2ZUdhbWUpXG4gICAgICAgICAgICBncy5PYmplY3RDb2RlYy5vblJlc3RvcmUoc2F2ZUdhbWUuZGF0YSwgY29udGV4dClcbiAgICAgICAgICAgIEByZXNvdXJjZUNvbnRleHQuZnJvbURhdGFCdW5kbGUoc2F2ZUdhbWUuZGF0YS5yZXNvdXJjZUNvbnRleHQsIFJlc291cmNlTWFuYWdlci5yZXNvdXJjZXNCeVBhdGgpXG5cbiAgICAgICAgICAgIEBvYmplY3Quc2NlbmVEYXRhID0gc2F2ZUdhbWUuZGF0YVxuICAgICAgICAgICAgR3JhcGhpY3MuZnJhbWVDb3VudCA9IHNhdmVHYW1lLmRhdGEuZnJhbWVDb3VudFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBQcmVwYXJlcyBhbGwgZGF0YSBmb3IgdGhlIHNjZW5lIGFuZCBsb2FkcyB0aGUgbmVjZXNzYXJ5IGdyYXBoaWMgYW5kIGF1ZGlvIHJlc291cmNlcy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHByZXBhcmVEYXRhXG4gICAgKiBAYWJzdHJhY3RcbiAgICAjIyNcbiAgICBwcmVwYXJlRGF0YTogLT5cbiAgICAgICAgI1JlY29yZE1hbmFnZXIudHJhbnNsYXRlKClcbiAgICAgICAgXG4gICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lID0gQG9iamVjdFxuXG4gICAgICAgIGdzLk9iamVjdE1hbmFnZXIuY3VycmVudCA9IEBvYmplY3RNYW5hZ2VyXG4gICAgICAgIFxuICAgICAgICBAb2JqZWN0LnNjZW5lRGF0YS51aWQgPSBAb2JqZWN0LnNjZW5lRG9jdW1lbnQudWlkXG4gICAgICAgIFxuICAgICAgICBpZiAhUmVzb3VyY2VMb2FkZXIubG9hZEV2ZW50Q29tbWFuZHNEYXRhKEBvYmplY3Quc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcylcbiAgICAgICAgICAgIFJlc291cmNlTG9hZGVyLmxvYWRFdmVudENvbW1hbmRzR3JhcGhpY3MoQG9iamVjdC5zY2VuZURvY3VtZW50Lml0ZW1zLmNvbW1hbmRzKVxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuYmFja2xvZyA9IEBvYmplY3Quc2NlbmVEYXRhLmJhY2tsb2cgfHwgR2FtZU1hbmFnZXIuc2NlbmVEYXRhLmJhY2tsb2cgfHwgW11cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIubG9hZFN5c3RlbVNvdW5kcygpXG4gICAgICAgICAgICBSZXNvdXJjZUxvYWRlci5sb2FkU3lzdGVtR3JhcGhpY3MoKVxuICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIubG9hZFVpVHlwZXNHcmFwaGljcyh1aS5VaUZhY3RvcnkuY3VzdG9tVHlwZXMpXG4gICAgICAgICAgICBSZXNvdXJjZUxvYWRlci5sb2FkVWlMYXlvdXRHcmFwaGljcyh1aS5VaUZhY3RvcnkubGF5b3V0cy5nYW1lTGF5b3V0KVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiBAZGF0YUZpZWxkcz9cbiAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRlci5sb2FkVWlEYXRhRmllbGRzR3JhcGhpY3MoQGRhdGFGaWVsZHMpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAkdGVtcEZpZWxkcy5jaG9pY2VUaW1lciA9IEBvYmplY3QuY2hvaWNlVGltZXJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgR2FtZU1hbmFnZXIudmFyaWFibGVTdG9yZS5zZXR1cCh7IGlkOiBAb2JqZWN0LnNjZW5lRG9jdW1lbnQudWlkfSlcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFByZXBhcmVzIGFsbCB2aXN1YWwgZ2FtZSBvYmplY3QgZm9yIHRoZSBzY2VuZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHByZXBhcmVWaXN1YWxcbiAgICAjIyMgXG4gICAgcHJlcGFyZVZpc3VhbDogLT5cbiAgICAgICAgaWYgQG9iamVjdC5sYXlvdXQgdGhlbiByZXR1cm5cbiAgICAgICAgXG4gICAgICAgIGlmIEdhbWVNYW5hZ2VyLnRlbXBGaWVsZHMuaXNFeGl0aW5nR2FtZVxuICAgICAgICAgICAgR2FtZU1hbmFnZXIudGVtcEZpZWxkcy5pc0V4aXRpbmdHYW1lID0gbm9cbiAgICAgICAgICAgIGdzLkdhbWVOb3RpZmllci5wb3N0UmVzZXRTY2VuZUNoYW5nZShAb2JqZWN0LnNjZW5lRG9jdW1lbnQuaXRlbXMubmFtZSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZ3MuR2FtZU5vdGlmaWVyLnBvc3RTY2VuZUNoYW5nZShAb2JqZWN0LnNjZW5lRG9jdW1lbnQuaXRlbXMubmFtZSlcbiAgICAgICAgXG4gICAgICAgIEByZXN0b3JlU2NlbmUoKVxuICAgICAgICBAb2JqZWN0Lm1lc3NhZ2VNb2RlID0gQG9iamVjdC5zY2VuZURhdGEubWVzc2FnZU1vZGUgPyB2bi5NZXNzYWdlTW9kZS5BRFZcbiAgICAgICAgQHNldHVwTWFpblZpZXdwb3J0KClcbiAgICAgICAgQHNldHVwVmlld3BvcnRzKClcbiAgICAgICAgQHNldHVwQ2hhcmFjdGVycygpXG4gICAgICAgIEBzZXR1cEJhY2tncm91bmRzKClcbiAgICAgICAgQHNldHVwUGljdHVyZXMoKVxuICAgICAgICBAc2V0dXBUZXh0cygpXG4gICAgICAgIEBzZXR1cFZpZGVvcygpXG4gICAgICAgIEBzZXR1cEhvdHNwb3RzKClcbiAgICAgICAgQHNldHVwSW50ZXJwcmV0ZXIoKVxuICAgICAgICBAc2V0dXBMYXlvdXQoKVxuICAgICAgICBAc2V0dXBDb21tb25FdmVudHMoKVxuICAgICAgICBcbiAgICAgICAgQHJlc3RvcmVNZXNzYWdlQm94KClcbiAgICAgICAgQHJlc3RvcmVJbnRlcnByZXRlcigpXG4gICAgICAgIEByZXN0b3JlTWVzc2FnZXMoKVxuICAgICAgICBAcmVzdG9yZUF1ZGlvUGxheWJhY2soKVxuICAgICAgICBcbiAgICAgICAgQHNob3codHJ1ZSlcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3Quc2NlbmVEYXRhID0ge31cbiAgICAgICAgR2FtZU1hbmFnZXIuc2NlbmVEYXRhID0ge31cbiAgICAgICAgXG4gICAgICAgIEdyYXBoaWNzLnVwZGF0ZSgpXG4gICAgICAgIEB0cmFuc2l0aW9uKHsgZHVyYXRpb246IDAgfSlcbiAgICAgICAgXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIEFkZHMgYSBuZXcgY2hhcmFjdGVyIHRvIHRoZSBzY2VuZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGFkZENoYXJhY3RlclxuICAgICogQHBhcmFtIHt2bi5PYmplY3RfQ2hhcmFjdGVyfSBjaGFyYWN0ZXIgLSBUaGUgY2hhcmFjdGVyIHRvIGFkZC5cbiAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9BbmltYXRpb24gLSBJbmRpY2F0ZXMgaWYgdGhlIGNoYXJhY3RlciBzaG91bGQgYmUgYWRkZWQgaW1tZWRpYXRlbHkgd2l0b3V0IGFueSBhcHBlYXItYW5pbWF0aW9uLlxuICAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbkRhdGEgLSBDb250YWlucyB0aGUgYXBwZWFyLWFuaW1hdGlvbiBkYXRhIC0+IHsgYW5pbWF0aW9uLCBlYXNpbmcsIGR1cmF0aW9uIH0uXG4gICAgIyMjIFxuICAgIGFkZENoYXJhY3RlcjogKGNoYXJhY3Rlciwgbm9BbmltYXRpb24sIGFuaW1hdGlvbkRhdGEpIC0+XG4gICAgICAgIHVubGVzcyBub0FuaW1hdGlvblxuICAgICAgICAgICAgY2hhcmFjdGVyLm1vdGlvbkJsdXIuc2V0KGFuaW1hdGlvbkRhdGEubW90aW9uQmx1cilcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgYW5pbWF0aW9uRGF0YS5kdXJhdGlvbiA+IDBcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIuYW5pbWF0b3IuYXBwZWFyKGNoYXJhY3Rlci5kc3RSZWN0LngsIGNoYXJhY3Rlci5kc3RSZWN0LnksIGFuaW1hdGlvbkRhdGEuYW5pbWF0aW9uLCBhbmltYXRpb25EYXRhLmVhc2luZywgYW5pbWF0aW9uRGF0YS5kdXJhdGlvbikgdW5sZXNzIG5vQW5pbWF0aW9uXG4gICAgICAgIFxuICAgICAgICBjaGFyYWN0ZXIudmlld3BvcnQgPSBAdmlld3BvcnRcbiAgICAgICAgY2hhcmFjdGVyLnZpc2libGUgPSB5ZXMgXG4gICAgXG4gICAgICAgIEBvYmplY3QuY2hhcmFjdGVyQ29udGFpbmVyLmFkZE9iamVjdChjaGFyYWN0ZXIpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFJlbW92ZXMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc2NlbmUuXG4gICAgKlxuICAgICogQG1ldGhvZCByZW1vdmVDaGFyYWN0ZXJcbiAgICAqIEBwYXJhbSB7dm4uT2JqZWN0X0NoYXJhY3Rlcn0gY2hhcmFjdGVyIC0gVGhlIGNoYXJhY3RlciB0byByZW1vdmUuXG4gICAgKiBAcGFyYW0ge09iamVjdH0gYW5pbWF0aW9uRGF0YSAtIENvbnRhaW5zIHRoZSBkaXNhcHBlYXItYW5pbWF0aW9uIGRhdGEgLT4geyBhbmltYXRpb24sIGVhc2luZywgZHVyYXRpb24gfS5cbiAgICAjIyNcbiAgICByZW1vdmVDaGFyYWN0ZXI6IChjaGFyYWN0ZXIsIGFuaW1hdGlvbkRhdGEpIC0+XG4gICAgICAgIGNoYXJhY3Rlcj8uYW5pbWF0b3IuZGlzYXBwZWFyKGFuaW1hdGlvbkRhdGEuYW5pbWF0aW9uLCBhbmltYXRpb25EYXRhLmVhc2luZywgYW5pbWF0aW9uRGF0YS5kdXJhdGlvbiwgKHNlbmRlcikgLT4gc2VuZGVyLmRpc3Bvc2UoKSlcbiAgICBcbiAgICAjIyMqXG4gICAgKiBSZXN1bWVzIHRoZSBjdXJyZW50IHNjZW5lIGlmIGl0IGhhcyBiZWVuIHBhdXNlZC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHJlc3VtZVNjZW5lXG4gICAgIyMjXG4gICAgcmVzdW1lU2NlbmU6IC0+XG4gICAgICAgIEBvYmplY3QucGljdHVyZUNvbnRhaW5lci5hY3RpdmUgPSB5ZXNcbiAgICAgICAgQG9iamVjdC5jaGFyYWN0ZXJDb250YWluZXIuYWN0aXZlID0geWVzXG4gICAgICAgIEBvYmplY3QuYmFja2dyb3VuZENvbnRhaW5lci5hY3RpdmUgPSB5ZXNcbiAgICAgICAgQG9iamVjdC50ZXh0Q29udGFpbmVyLmFjdGl2ZSA9IHllc1xuICAgICAgICBAb2JqZWN0LmhvdHNwb3RDb250YWluZXIuYWN0aXZlID0geWVzXG4gICAgICAgIEBvYmplY3QudmlkZW9Db250YWluZXIuYWN0aXZlID0geWVzXG4gICAgICAgIFxuICAgICAgICBtZXNzYWdlID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQoXCJnYW1lTWVzc2FnZV9tZXNzYWdlXCIpXG4gICAgICAgIG1lc3NhZ2UuYWN0aXZlID0geWVzXG4gXG4gICAgIyMjKlxuICAgICogUGF1c2VzIHRoZSBjdXJyZW50IHNjZW5lLiBBIHBhdXNlZCBzY2VuZSB3aWxsIG5vdCBjb250aW51ZSwgbWVzc2FnZXMsIHBpY3R1cmVzLCBldGMuIHdpbGxcbiAgICAqIHN0b3AgdW50aWwgdGhlIHNjZW5lIHJlc3VtZXMuXG4gICAgKlxuICAgICogQG1ldGhvZCBwYXVzZVNjZW5lXG4gICAgIyMjXG4gICAgcGF1c2VTY2VuZTogLT5cbiAgICAgICAgQG9iamVjdC5waWN0dXJlQ29udGFpbmVyLmFjdGl2ZSA9IG5vXG4gICAgICAgIEBvYmplY3QuY2hhcmFjdGVyQ29udGFpbmVyLmFjdGl2ZSA9IG5vXG4gICAgICAgIEBvYmplY3QuYmFja2dyb3VuZENvbnRhaW5lci5hY3RpdmUgPSBub1xuICAgICAgICBAb2JqZWN0LnRleHRDb250YWluZXIuYWN0aXZlID0gbm9cbiAgICAgICAgQG9iamVjdC5ob3RzcG90Q29udGFpbmVyLmFjdGl2ZSA9IG5vXG4gICAgICAgIEBvYmplY3QudmlkZW9Db250YWluZXIuYWN0aXZlID0gbm9cbiAgICAgICAgXG4gICAgICAgIG1lc3NhZ2UgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChcImdhbWVNZXNzYWdlX21lc3NhZ2VcIilcbiAgICAgICAgbWVzc2FnZS5hY3RpdmUgPSBub1xuICAgICBcbiAgICAjIyMqXG4gICAgKiBDaGFuZ2VzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBlbnRpcmUgZ2FtZSBVSSBsaWtlIHRoZSBtZXNzYWdlIGJveGVzLCBldGMuIHRvIGFsbG93c1xuICAgICogdGhlIHBsYXllciB0byBzZWUgdGhlIGVudGlyZSBzY2VuZS4gVXNlZnVsIGZvciBDR3MsIGV0Yy5cbiAgICAqXG4gICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZpc2libGUgLSBJZiA8Yj50cnVlPC9iPiwgdGhlIGdhbWUgVUkgd2lsbCBiZSB2aXNpYmxlLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBoaWRkZW4uXG4gICAgKiBAbWV0aG9kIGNoYW5nZVVJVmlzaWJpbGl0eVxuICAgICMjIyAgIFxuICAgIGNoYW5nZVVJVmlzaWJpbGl0eTogKHZpc2libGUpIC0+XG4gICAgICAgIEB1aVZpc2libGUgPSB2aXNpYmxlXG4gICAgICAgIEBvYmplY3QubGF5b3V0LnZpc2libGUgPSB2aXNpYmxlXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFNob3dzIGlucHV0LXRleHQgYm94IHRvIGxldCB0aGUgdXNlciBlbnRlciBhIHRleHQuXG4gICAgKlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGxldHRlcnMgLSBUaGUgbWF4LiBudW1iZXIgb2YgbGV0dGVycyB0aGUgdXNlciBjYW4gZW50ZXIuXG4gICAgKiBAcGFyYW0ge2dzLkNhbGxiYWNrfSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGlmIHRoZSBpbnB1dC10ZXh0IGJveCBoYXMgYmVlbiBhY2NlcHRlZCBieSB0aGUgdXNlci5cbiAgICAqIEBtZXRob2Qgc2hvd0lucHV0VGV4dFxuICAgICMjI1xuICAgIHNob3dJbnB1dFRleHQ6IChsZXR0ZXJzLCBjYWxsYmFjaykgLT5cbiAgICAgICAgQG9iamVjdC5pbnB1dFRleHRCb3g/LmRpc3Bvc2UoKVxuICAgICAgICBAb2JqZWN0LmlucHV0VGV4dEJveCA9IHVpLlVpRmFjdG9yeS5jcmVhdGVDb250cm9sRnJvbURlc2NyaXB0b3IodWkuVWlGYWN0b3J5LmN1c3RvbVR5cGVzW1widWkuSW5wdXRUZXh0Qm94XCJdLCBAb2JqZWN0LmxheW91dClcbiAgICAgICAgQG9iamVjdC5pbnB1dFRleHRCb3gudWkucHJlcGFyZSgpXG4gICAgICAgIEBvYmplY3QuaW5wdXRUZXh0Qm94LmV2ZW50cy5vbihcImFjY2VwdFwiLCBjYWxsYmFjaylcbiAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTaG93cyBpbnB1dC1udW1iZXIgYm94IHRvIGxldCB0aGUgdXNlciBlbnRlciBhIG51bWJlci5cbiAgICAqXG4gICAgKiBAcGFyYW0ge251bWJlcn0gZGlnaXRzIC0gVGhlIG1heC4gbnVtYmVyIG9mIGRpZ2l0cyB0aGUgdXNlciBjYW4gZW50ZXIuXG4gICAgKiBAcGFyYW0ge2dzLkNhbGxiYWNrfSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGlmIHRoZSBpbnB1dC1udW1iZXIgYm94IGhhcyBiZWVuIGFjY2VwdGVkIGJ5IHRoZSB1c2VyLlxuICAgICogQG1ldGhvZCBzaG93SW5wdXROdW1iZXJcbiAgICAjIyMgXG4gICAgc2hvd0lucHV0TnVtYmVyOiAoZGlnaXRzLCBjYWxsYmFjaykgLT5cbiAgICAgICAgQG9iamVjdC5pbnB1dE51bWJlckJveD8uZGlzcG9zZSgpXG4gICAgICAgIEBvYmplY3QuaW5wdXROdW1iZXJCb3ggPSB1aS5VaUZhY3RvcnkuY3JlYXRlQ29udHJvbEZyb21EZXNjcmlwdG9yKHVpLlVpRmFjdG9yeS5jdXN0b21UeXBlc1tcInVpLklucHV0TnVtYmVyQm94XCJdLCBAb2JqZWN0LmxheW91dClcbiAgICAgICAgQG9iamVjdC5pbnB1dE51bWJlckJveC51aS5wcmVwYXJlKClcbiAgICAgICAgQG9iamVjdC5pbnB1dE51bWJlckJveC5ldmVudHMub24oXCJhY2NlcHRcIiwgY2FsbGJhY2spICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIFNob3dzIGNob2ljZXMgdG8gbGV0IHRoZSB1c2VyIHBpY2sgYSBjaG9pY2UuXG4gICAgKlxuICAgICogQHBhcmFtIHtPYmplY3RbXX0gY2hvaWNlcyAtIEFuIGFycmF5IG9mIGNob2ljZXNcbiAgICAqIEBwYXJhbSB7Z3MuQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgaWYgYSBjaG9pY2UgaGFzIGJlZW4gcGlja2VkIGJ5IHRoZSB1c2VyLlxuICAgICogQG1ldGhvZCBzaG93Q2hvaWNlc1xuICAgICMjIyAgICAgXG4gICAgc2hvd0Nob2ljZXM6IChjaG9pY2VzLCBjYWxsYmFjaykgLT5cbiAgICAgICAgdXNlRnJlZUxheW91dCA9IGNob2ljZXMud2hlcmUoKHgpIC0+IHguZHN0UmVjdD8pLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgR2FtZU1hbmFnZXIudGVtcEZpZWxkcy5jaG9pY2VzID0gY2hvaWNlcyBcbiAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3c/LmRpc3Bvc2UoKVxuICAgICAgICBcbiAgICAgICAgaWYgdXNlRnJlZUxheW91dFxuICAgICAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3cgPSB1aS5VaUZhY3RvcnkuY3JlYXRlQ29udHJvbEZyb21EZXNjcmlwdG9yKHVpLlVpRmFjdG9yeS5jdXN0b21UeXBlc1tcInVpLkZyZWVDaG9pY2VCb3hcIl0sIEBvYmplY3QubGF5b3V0KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAb2JqZWN0LmNob2ljZVdpbmRvdyA9IHVpLlVpRmFjdG9yeS5jcmVhdGVDb250cm9sRnJvbURlc2NyaXB0b3IodWkuVWlGYWN0b3J5LmN1c3RvbVR5cGVzW1widWkuQ2hvaWNlQm94XCJdLCBAb2JqZWN0LmxheW91dClcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3QuY2hvaWNlV2luZG93LmV2ZW50cy5vbihcInNlbGVjdGlvbkFjY2VwdFwiLCBjYWxsYmFjaylcbiAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3cudWkucHJlcGFyZSgpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIENoYW5nZXMgdGhlIGJhY2tncm91bmQgb2YgdGhlIHNjZW5lLlxuICAgICpcbiAgICAqIEBtZXRob2QgY2hhbmdlQmFja2dyb3VuZFxuICAgICogQHBhcmFtIHtPYmplY3R9IGJhY2tncm91bmQgLSBUaGUgYmFja2dyb3VuZCBncmFwaGljIG9iamVjdCAtPiB7IG5hbWUgfVxuICAgICogQHBhcmFtIHtib29sZWFufSBub0FuaW1hdGlvbiAtIEluZGljYXRlcyBpZiB0aGUgYmFja2dyb3VuZCBzaG91bGQgYmUgY2hhbmdlZCBpbW1lZGlhdGVseSB3aXRvdXQgYW55IGNoYW5nZS1hbmltYXRpb24uXG4gICAgKiBAcGFyYW0ge09iamVjdH0gYW5pbWF0aW9uIC0gVGhlIGFwcGVhci9kaXNhcHBlYXIgYW5pbWF0aW9uIHRvIHVzZS5cbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBlYXNpbmcgLSBUaGUgZWFzaW5nIG9mIHRoZSBjaGFuZ2UgYW5pbWF0aW9uLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBjaGFuZ2UgaW4gZnJhbWVzLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IG94IC0gVGhlIHgtb3JpZ2luIG9mIHRoZSBiYWNrZ3JvdW5kLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IG95IC0gVGhlIHktb3JpZ2luIG9mIHRoZSBiYWNrZ3JvdW5kLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGxheWVyIC0gVGhlIGJhY2tncm91bmQtbGF5ZXIgdG8gY2hhbmdlLlxuICAgICogQHBhcmFtIHtib29sZWFufSBsb29wSG9yaXpvbnRhbCAtIEluZGljYXRlcyBpZiB0aGUgYmFja2dyb3VuZCBzaG91bGQgYmUgbG9vcGVkIGhvcml6b250YWxseS5cbiAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9vcFZlcnRpY2FsIC0gSW5kaWNhdGVzIGlmIHRoZSBiYWNrZ3JvdW5kIHNob3VsZCBiZSBsb29wZWQgdmVydGljYWxseS5cbiAgICAjIyMgICBcbiAgICBjaGFuZ2VCYWNrZ3JvdW5kOiAoYmFja2dyb3VuZCwgbm9BbmltYXRpb24sIGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiwgb3gsIG95LCBsYXllciwgbG9vcEhvcml6b250YWwsIGxvb3BWZXJ0aWNhbCkgLT5cbiAgICAgICAgaWYgYmFja2dyb3VuZD9cbiAgICAgICAgICAgIG90aGVyT2JqZWN0ID0gQG9iamVjdC5iYWNrZ3JvdW5kc1tsYXllcl1cbiAgICAgICAgICAgIG9iamVjdCA9IG5ldyB2bi5PYmplY3RfQmFja2dyb3VuZCgpXG4gICAgICAgICAgICBvYmplY3QuaW1hZ2UgPSBiYWNrZ3JvdW5kLm5hbWVcbiAgICAgICAgICAgIG9iamVjdC5vcmlnaW4ueCA9IG94XG4gICAgICAgICAgICBvYmplY3Qub3JpZ2luLnkgPSBveVxuICAgICAgICAgICAgb2JqZWN0LnZpZXdwb3J0ID0gQHZpZXdwb3J0XG4gICAgICAgICAgICBvYmplY3QudmlzdWFsLmxvb3BpbmcudmVydGljYWwgPSBub1xuICAgICAgICAgICAgb2JqZWN0LnZpc3VhbC5sb29waW5nLmhvcml6b250YWwgPSBub1xuICAgICAgICAgICAgb2JqZWN0LnVwZGF0ZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEBvYmplY3QuYmFja2dyb3VuZENvbnRhaW5lci5zZXRPYmplY3Qob2JqZWN0LCBsYXllcilcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gPyAzMFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBvdGhlck9iamVjdD8uekluZGV4ID0gbGF5ZXJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgZHVyYXRpb24gPT0gMFxuICAgICAgICAgICAgICAgIG90aGVyT2JqZWN0Py5kaXNwb3NlKClcbiAgICAgICAgICAgICAgICBvYmplY3QudmlzdWFsLmxvb3BpbmcudmVydGljYWwgPSBsb29wVmVydGljYWxcbiAgICAgICAgICAgICAgICBvYmplY3QudmlzdWFsLmxvb3BpbmcuaG9yaXpvbnRhbCA9IGxvb3BIb3Jpem9udGFsXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaWYgbm9BbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZpc3VhbC5sb29waW5nLnZlcnRpY2FsID0gbG9vcFZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC52aXN1YWwubG9vcGluZy5ob3Jpem9udGFsID0gbG9vcEhvcml6b250YWxcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5hbmltYXRvci5vdGhlck9iamVjdCA9IG90aGVyT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5hbmltYXRvci5hcHBlYXIoMCwgMCwgYW5pbWF0aW9uLCBlYXNpbmcsIGR1cmF0aW9uLCAoc2VuZGVyKSA9PiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlci51cGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyLmFuaW1hdG9yLm90aGVyT2JqZWN0Py5kaXNwb3NlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlci5hbmltYXRvci5vdGhlck9iamVjdCA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlci52aXN1YWwubG9vcGluZy52ZXJ0aWNhbCA9IGxvb3BWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyLnZpc3VhbC5sb29waW5nLmhvcml6b250YWwgPSBsb29wSG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEBvYmplY3QuYmFja2dyb3VuZHNbbGF5ZXJdPy5hbmltYXRvci5oaWRlIGR1cmF0aW9uLCBlYXNpbmcsICA9PlxuICAgICAgICAgICAgICAgQG9iamVjdC5iYWNrZ3JvdW5kc1tsYXllcl0uZGlzcG9zZSgpXG4gICAgICAgICAgICAgICBAb2JqZWN0LmJhY2tncm91bmRzW2xheWVyXSA9IG51bGxcbiAgICBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyBhbGwgdmlld3BvcnQgYW5pbWF0aW9ucyBleGNlcHQgdGhlIG1haW4gdmlld3BvcnQgYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcFZpZXdwb3J0c1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBza2lwVmlld3BvcnRzOiAtPlxuICAgICAgICB2aWV3cG9ydHMgPSBAb2JqZWN0LnZpZXdwb3J0Q29udGFpbmVyLnN1Yk9iamVjdHNcbiAgICAgICAgZm9yIHZpZXdwb3J0IGluIHZpZXdwb3J0c1xuICAgICAgICAgICAgaWYgdmlld3BvcnRcbiAgICAgICAgICAgICAgICBmb3IgY29tcG9uZW50IGluIHZpZXdwb3J0LmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyBhbGwgcGljdHVyZSBhbmltYXRpb25zLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcFBpY3R1cmVzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICBcbiAgICBza2lwUGljdHVyZXM6IC0+XG4gICAgICAgIGZvciBwaWN0dXJlIGluIEBvYmplY3QucGljdHVyZXNcbiAgICAgICAgICAgIGlmIHBpY3R1cmVcbiAgICAgICAgICAgICAgICBmb3IgY29tcG9uZW50IGluIHBpY3R1cmUuY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2tpcD8oKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyBhbGwgdGV4dCBhbmltYXRpb25zLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcFRleHRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHNraXBUZXh0czogLT5cbiAgICAgICBmb3IgdGV4dCBpbiBAb2JqZWN0LnRleHRzXG4gICAgICAgICAgICBpZiB0ZXh0XG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiB0ZXh0LmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgYWxsIHZpZGVvIGFuaW1hdGlvbnMgYnV0IG5vdCB0aGUgdmlkZW8tcGxheWJhY2sgaXRzZWxmLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcFZpZGVvc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBza2lwVmlkZW9zOiAtPlxuICAgICAgICBmb3IgdmlkZW8gaW4gQG9iamVjdC52aWRlb3NcbiAgICAgICAgICAgIGlmIHZpZGVvXG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiB2aWRlby5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIGFsbCBiYWNrZ3JvdW5kIGFuaW1hdGlvbnMuXG4gICAgKlxuICAgICogQG1ldGhvZCBza2lwQmFja2dyb3VuZHNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgc2tpcEJhY2tncm91bmRzOiAtPlxuICAgICAgICBmb3IgYmFja2dyb3VuZCBpbiBAb2JqZWN0LmJhY2tncm91bmRzXG4gICAgICAgICAgICBpZiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBiYWNrZ3JvdW5kLmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgYWxsIGNoYXJhY3RlciBhbmltYXRpb25zXG4gICAgKlxuICAgICogQG1ldGhvZCBza2lwQ2hhcmFjdGVyc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBza2lwQ2hhcmFjdGVyczogLT5cbiAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBAb2JqZWN0LmNoYXJhY3RlcnNcbiAgICAgICAgICAgIGlmIGNoYXJhY3RlclxuICAgICAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gY2hhcmFjdGVyLmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgdGhlIG1haW4gdmlld3BvcnQgYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcE1haW5WaWV3cG9ydFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICBcbiAgICBza2lwTWFpblZpZXdwb3J0OiAtPlxuICAgICAgICBmb3IgY29tcG9uZW50IGluIEBvYmplY3Qudmlld3BvcnQuY29tcG9uZW50c1xuICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgYWxsIGFuaW1hdGlvbnMgb2YgYWxsIG1lc3NhZ2UgYm94ZXMgZGVmaW5lZCBpbiBNRVNTQUdFX0JPWF9JRFMgdWkgY29uc3RhbnQuXG4gICAgKlxuICAgICogQG1ldGhvZCBza2lwTWVzc2FnZUJveGVzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHNraXBNZXNzYWdlQm94ZXM6IC0+XG4gICAgICAgIGZvciBtZXNzYWdlQm94SWQgaW4gZ3MuVUlDb25zdGFudHMuTUVTU0FHRV9CT1hfSURTIHx8IFtcIm1lc3NhZ2VCb3hcIiwgXCJudmxNZXNzYWdlQm94XCJdXG4gICAgICAgICAgICBtZXNzYWdlQm94ID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQobWVzc2FnZUJveElkKVxuICAgICAgICAgICAgaWYgbWVzc2FnZUJveC5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBtZXNzYWdlQm94LmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KCkgXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIGFsbCBhbmltYXRpb25zIG9mIGFsbCBtZXNzYWdlIGFyZWFzLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcE1lc3NhZ2VBcmVhc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICBcbiAgICBza2lwTWVzc2FnZUFyZWFzOiAtPlxuICAgICAgICBmb3IgbWVzc2FnZUFyZWEgaW4gQG9iamVjdC5tZXNzYWdlQXJlYXNcbiAgICAgICAgICAgIGlmIG1lc3NhZ2VBcmVhPy5tZXNzYWdlXG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBtZXNzYWdlQXJlYS5tZXNzYWdlLmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgICAgICAgIFxuICAgICAgICBtc2cgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChcImdhbWVNZXNzYWdlX21lc3NhZ2VcIikgICAgIFxuICAgICAgICBpZiBtc2dcbiAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gbXNnLmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuc2tpcD8oKVxuICAgICAgICBtc2cgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChcIm52bEdhbWVNZXNzYWdlX21lc3NhZ2VcIikgICAgIFxuICAgICAgICBpZiBtc2dcbiAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gbXNnLmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuc2tpcD8oKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgdGhlIHNjZW5lIGludGVycHJldGVyIHRpbWVyLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcEludGVycHJldGVyXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHNraXBJbnRlcnByZXRlcjogLT5cbiAgICAgICAgaWYgQG9iamVjdC5pbnRlcnByZXRlci53YWl0Q291bnRlciA+IEdhbWVNYW5hZ2VyLnRlbXBTZXR0aW5ncy5za2lwVGltZVxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci53YWl0Q291bnRlciA9IEdhbWVNYW5hZ2VyLnRlbXBTZXR0aW5ncy5za2lwVGltZVxuICAgICAgICAgICAgaWYgQG9iamVjdC5pbnRlcnByZXRlci53YWl0Q291bnRlciA9PSAwXG4gICAgICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci5pc1dhaXRpbmcgPSBub1xuICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIHRoZSBpbnRlcnByZXRlciB0aW1lciBvZiBhbGwgY29tbW9uIGV2ZW50cy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBDb21tb25FdmVudHNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgIFxuICAgIHNraXBDb21tb25FdmVudHM6IC0+XG4gICAgICAgIGV2ZW50cyA9IEBvYmplY3QuY29tbW9uRXZlbnRDb250YWluZXIuc3ViT2JqZWN0c1xuICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzXG4gICAgICAgICAgICBpZiBldmVudD8uaW50ZXJwcmV0ZXIgYW5kIGV2ZW50LmludGVycHJldGVyLndhaXRDb3VudGVyID4gR2FtZU1hbmFnZXIudGVtcFNldHRpbmdzLnNraXBUaW1lXG4gICAgICAgICAgICAgICAgZXZlbnQuaW50ZXJwcmV0ZXIud2FpdENvdW50ZXIgPSBHYW1lTWFuYWdlci50ZW1wU2V0dGluZ3Muc2tpcFRpbWVcbiAgICAgICAgICAgICAgICBpZiBldmVudC5pbnRlcnByZXRlci53YWl0Q291bnRlciA9PSAwXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmludGVycHJldGVyLmlzV2FpdGluZyA9IG5vXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIHRoZSBzY2VuZSdzIGNvbnRlbnQuXG4gICAgKlxuICAgICogQG1ldGhvZCBza2lwQ29udGVudFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICBcbiAgICBza2lwQ29udGVudDogLT5cbiAgICAgICAgQHNraXBQaWN0dXJlcygpXG4gICAgICAgIEBza2lwVGV4dHMoKVxuICAgICAgICBAc2tpcFZpZGVvcygpXG4gICAgICAgIEBza2lwQmFja2dyb3VuZHMoKVxuICAgICAgICBAc2tpcENoYXJhY3RlcnMoKVxuICAgICAgICBAc2tpcE1haW5WaWV3cG9ydCgpXG4gICAgICAgIEBza2lwVmlld3BvcnRzKClcbiAgICAgICAgQHNraXBNZXNzYWdlQm94ZXMoKVxuICAgICAgICBAc2tpcE1lc3NhZ2VBcmVhcygpXG4gICAgICAgIEBza2lwSW50ZXJwcmV0ZXIoKVxuICAgICAgICBAc2tpcENvbW1vbkV2ZW50cygpXG4gICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogQ2hlY2tzIGZvciB0aGUgc2hvcnRjdXQgdG8gaGlkZS9zaG93IHRoZSBnYW1lIFVJLiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBzcGFjZS1rZXkuIFlvdVxuICAgICogY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgc2hvcnRjdXQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVVSVZpc2liaWxpdHlTaG9ydGN1dFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICB1cGRhdGVVSVZpc2liaWxpdHlTaG9ydGN1dDogLT5cbiAgICAgICAgaWYgIUB1aVZpc2libGUgYW5kIChJbnB1dC50cmlnZ2VyKElucHV0LkMpIG9yIElucHV0Lk1vdXNlLmJ1dHRvbkRvd24pXG4gICAgICAgICAgICBAY2hhbmdlVUlWaXNpYmlsaXR5KCFAdWlWaXNpYmxlKVxuICAgICAgICBpZiBJbnB1dC50cmlnZ2VyKElucHV0LktFWV9TUEFDRSlcbiAgICAgICAgICAgIEBjaGFuZ2VVSVZpc2liaWxpdHkoIUB1aVZpc2libGUpXG4gICAgXG4gICAgIyMjKlxuICAgICogQ2hlY2tzIGZvciB0aGUgc2hvcnRjdXQgdG8gZXhpdCB0aGUgZ2FtZS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgZXNjYXBlLWtleS4gWW91XG4gICAgKiBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSBzaG9ydGN1dC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVF1aXRTaG9ydGN1dFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICAgIFxuICAgIHVwZGF0ZVF1aXRTaG9ydGN1dDogLT5cbiAgICAgICAgaWYgSW5wdXQudHJpZ2dlcihJbnB1dC5LRVlfRVNDQVBFKVxuICAgICAgICAgICAgZ3MuQXBwbGljYXRpb24uZXhpdCgpXG4gICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogQ2hlY2tzIGZvciB0aGUgc2hvcnRjdXQgdG8gb3BlbiB0aGUgc2V0dGluZ3MgbWVudS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgcy1rZXkuIFlvdVxuICAgICogY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgc2hvcnRjdXQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVTZXR0aW5nc1Nob3J0Y3V0XG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgICAgICBcbiAgICB1cGRhdGVTZXR0aW5nc1Nob3J0Y3V0OiAtPlxuICAgICAgICBpZiBHYW1lTWFuYWdlci50ZW1wU2V0dGluZ3MubWVudUFjY2VzcyBhbmQgSW5wdXQudHJpZ2dlcihJbnB1dC5YKVxuICAgICAgICAgICAgU2NlbmVNYW5hZ2VyLnN3aXRjaFRvKG5ldyBncy5PYmplY3RfTGF5b3V0KFwic2V0dGluZ3NNZW51TGF5b3V0XCIpLCB0cnVlKVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBDaGVja3MgZm9yIHRoZSBzaG9ydGN1dCB0byBvcGVuIHRoZSBzZXR0aW5ncyBtZW51LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBjb250cm9sLWtleS4gWW91XG4gICAgKiBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSBzaG9ydGN1dC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVNraXBTaG9ydGN1dFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICAgIFxuICAgIHVwZGF0ZVNraXBTaG9ydGN1dDogLT5cbiAgICAgICAgaWYgQG9iamVjdC5zZXR0aW5ncy5hbGxvd1NraXBcbiAgICAgICAgICAgIGlmIElucHV0LmtleXNbSW5wdXQuS0VZX0NPTlRST0xdID09IDFcbiAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci50ZW1wU2V0dGluZ3Muc2tpcCA9IHllc1xuICAgICAgICAgICAgZWxzZSBpZiBJbnB1dC5rZXlzW0lucHV0LktFWV9DT05UUk9MXSA9PSAyXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIudGVtcFNldHRpbmdzLnNraXAgPSBub1xuICAgICAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIENoZWNrcyBmb3IgZGVmYXVsdCBrZXlib2FyZCBzaG9ydGN1dHMgZS5nIHNwYWNlLWtleSB0byBoaWRlIHRoZSBVSSwgZXRjLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlU2hvcnRjdXRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHVwZGF0ZVNob3J0Y3V0czogLT5cbiAgICAgICAgQHVwZGF0ZVNldHRpbmdzU2hvcnRjdXQoKVxuICAgICAgICBAdXBkYXRlUXVpdFNob3J0Y3V0KClcbiAgICAgICAgQHVwZGF0ZVVJVmlzaWJpbGl0eVNob3J0Y3V0KClcbiAgICAgICAgQHVwZGF0ZVNraXBTaG9ydGN1dCgpXG5cbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBmdWxsIHNjcmVlbiB2aWRlbyBwbGF5ZWQgdmlhIFBsYXkgTW92aWUgY29tbWFuZC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVZpZGVvXG4gICAgIyMjICBcbiAgICB1cGRhdGVWaWRlbzogLT5cbiAgICAgICAgaWYgQG9iamVjdC52aWRlbz9cbiAgICAgICAgICAgIEBvYmplY3QudmlkZW8udXBkYXRlKClcbiAgICAgICAgICAgIGlmIEBvYmplY3Quc2V0dGluZ3MuYWxsb3dWaWRlb1NraXAgYW5kIChJbnB1dC50cmlnZ2VyKElucHV0LkMpIG9yIElucHV0Lk1vdXNlLmJ1dHRvbnNbSW5wdXQuTW91c2UuTEVGVF0gPT0gMilcbiAgICAgICAgICAgICAgICBAb2JqZWN0LnZpZGVvLnN0b3AoKVxuICAgICAgICAgICAgSW5wdXQuY2xlYXIoKVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHNraXBwaW5nIGlmIGVuYWJsZWQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVTa2lwcGluZ1xuICAgICMjIyAgICAgICAgIFxuICAgIHVwZGF0ZVNraXBwaW5nOiAtPlxuICAgICAgICBpZiAhQG9iamVjdC5zZXR0aW5ncy5hbGxvd1NraXBcbiAgICAgICAgICAgIEBvYmplY3QudGVtcFNldHRpbmdzLnNraXAgPSBub1xuICAgICAgICAgICAgXG4gICAgICAgIGlmIEdhbWVNYW5hZ2VyLnRlbXBTZXR0aW5ncy5za2lwXG4gICAgICAgICAgICBAc2tpcENvbnRlbnQoKVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgc2NlbmUncyBjb250ZW50LlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlQ29udGVudFxuICAgICMjIyAgICAgIFxuICAgIHVwZGF0ZUNvbnRlbnQ6IC0+XG4gICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lID0gQG9iamVjdFxuICAgICAgICBHcmFwaGljcy52aWV3cG9ydC51cGRhdGUoKVxuICAgICAgICBAb2JqZWN0LnZpZXdwb3J0LnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICAgICBAdXBkYXRlU2tpcHBpbmcoKVxuICAgICAgICBAdXBkYXRlVmlkZW8oKVxuICAgICAgICBAdXBkYXRlU2hvcnRjdXRzKClcblxuICAgICAgICBzdXBlcigpXG4gICAgICAgIFxudm4uQ29tcG9uZW50X0dhbWVTY2VuZUJlaGF2aW9yID0gQ29tcG9uZW50X0dhbWVTY2VuZUJlaGF2aW9yIl19
1449 + //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsMkJBQUE7RUFBQTs7O0FBQU07Ozs7QUFFRjs7Ozs7Ozs7O0VBUWEscUNBQUE7SUFDVCwyREFBQTtJQUVBLElBQUMsQ0FBQSxzQkFBRCxHQUEwQixDQUFBLFNBQUEsS0FBQTthQUFBLFNBQUE7UUFDdEIsS0FBQyxDQUFBLE1BQU0sQ0FBQyxlQUFSLENBQXdCLEtBQUMsQ0FBQSxNQUFNLENBQUMsV0FBaEM7ZUFDQSxLQUFDLENBQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFwQixDQUFBO01BRnNCO0lBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQTtJQUcxQixJQUFDLENBQUEsdUJBQUQsR0FBMkIsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFBO1FBQ3ZCLElBQUcsQ0FBQyxLQUFDLENBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFuQixDQUE0QixLQUFDLENBQUEsTUFBTSxDQUFDLFdBQXBDLENBQUo7VUFDSSxLQUFDLENBQUEsTUFBTSxDQUFDLFlBQVIsQ0FBcUIsS0FBQyxDQUFBLE1BQU0sQ0FBQyxXQUE3QixFQURKOztlQUVBLEtBQUMsQ0FBQSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQXBCLENBQUE7TUFIdUI7SUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBO0lBSzNCLElBQUMsQ0FBQSxlQUFELEdBQW1CO0lBQ25CLElBQUMsQ0FBQSxZQUFELEdBQWdCO0VBWlA7OztBQWNiOzs7Ozs7d0NBS0EsVUFBQSxHQUFZLFNBQUE7QUFDUixRQUFBO0lBQUEsSUFBRyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQTVCLEtBQXNDLENBQXpDO01BQ0ksRUFBRSxDQUFDLGtCQUFrQixDQUFDLFdBQXRCLENBQWtDLElBQUMsQ0FBQSxNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBL0QsRUFESjs7SUFHQSxJQUFDLENBQUEsZUFBRCxHQUFtQixlQUFlLENBQUMsYUFBaEIsQ0FB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dGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9HYW1lU2NlbmVCZWhhdmlvclxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuY2xhc3MgQ29tcG9uZW50X0dhbWVTY2VuZUJlaGF2aW9yIGV4dGVuZHMgZ3MuQ29tcG9uZW50X0xheW91dFNjZW5lQmVoYXZpb3JcbiAjICAgQG9iamVjdENvZGVjQmxhY2tMaXN0ID0gW1wib2JqZWN0TWFuYWdlclwiXVxuICAgICMjIypcbiAgICAqIERlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHZpc3VhbCBub3ZlbCBnYW1lIHNjZW5lLlxuICAgICpcbiAgICAqIEBtb2R1bGUgdm5cbiAgICAqIEBjbGFzcyBDb21wb25lbnRfR2FtZVNjZW5lQmVoYXZpb3JcbiAgICAqIEBleHRlbmRzIGdzLkNvbXBvbmVudF9MYXlvdXRTY2VuZUJlaGF2aW9yXG4gICAgKiBAbWVtYmVyb2Ygdm5cbiAgICAjIyNcbiAgICBjb25zdHJ1Y3RvcjogLT5cbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBcbiAgICAgICAgQG9uQXV0b0NvbW1vbkV2ZW50U3RhcnQgPSA9PlxuICAgICAgICAgICAgQG9iamVjdC5yZW1vdmVDb21wb25lbnQoQG9iamVjdC5pbnRlcnByZXRlcilcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIuc3RvcCgpXG4gICAgICAgIEBvbkF1dG9Db21tb25FdmVudEZpbmlzaCA9ID0+XG4gICAgICAgICAgICBpZiAhQG9iamVjdC5jb21wb25lbnRzLmNvbnRhaW5zKEBvYmplY3QuaW50ZXJwcmV0ZXIpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5hZGRDb21wb25lbnQoQG9iamVjdC5pbnRlcnByZXRlcilcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIucmVzdW1lKClcbiAgICAgICAgICAgIFxuICAgICAgICBAcmVzb3VyY2VDb250ZXh0ID0gbnVsbFxuICAgICAgICBAb2JqZWN0RG9tYWluID0gXCJcIlxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBJbml0aWFsaXplcyB0aGUgc2NlbmUuIFxuICAgICpcbiAgICAqIEBtZXRob2QgaW5pdGlhbGl6ZVxuICAgICMjIyBcbiAgICBpbml0aWFsaXplOiAtPlxuICAgICAgICBpZiBTY2VuZU1hbmFnZXIucHJldmlvdXNTY2VuZXMubGVuZ3RoID09IDBcbiAgICAgICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5jbGVhckV4Y2VwdChAb2JqZWN0LmNvbW1vbkV2ZW50Q29udGFpbmVyLnN1Yk9iamVjdHMpXG4gICAgICAgICAgICBcbiAgICAgICAgQHJlc291cmNlQ29udGV4dCA9IFJlc291cmNlTWFuYWdlci5jcmVhdGVDb250ZXh0KClcbiAgICAgICAgUmVzb3VyY2VNYW5hZ2VyLmNvbnRleHQgPSBAcmVzb3VyY2VDb250ZXh0XG4gICAgICAgIFxuICAgICAgICBHcmFwaGljcy5mcmVlemUoKVxuICAgICAgICBzYXZlR2FtZSA9IEdhbWVNYW5hZ2VyLmxvYWRlZFNhdmVHYW1lXG4gICAgICAgIHNjZW5lVWlkID0gbnVsbFxuICAgICAgICBcbiAgICAgICAgaWYgc2F2ZUdhbWVcbiAgICAgICAgICAgIHNjZW5lVWlkID0gc2F2ZUdhbWUuc2NlbmVVaWRcbiAgICAgICAgICAgIEBvYmplY3Quc2NlbmVEYXRhID0gc2F2ZUdhbWUuZGF0YVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzY2VuZVVpZCA9ICRQQVJBTVMucHJldmlldz8uc2NlbmUudWlkIHx8IEBvYmplY3Quc2NlbmVEYXRhLnVpZCB8fCBSZWNvcmRNYW5hZ2VyLnN5c3RlbS5zdGFydEluZm8uc2NlbmUudWlkXG4gICAgICAgIFxuICAgICAgICBAb2JqZWN0LnNjZW5lRG9jdW1lbnQgPSBEYXRhTWFuYWdlci5nZXREb2N1bWVudChzY2VuZVVpZClcbiAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3Quc2NlbmVEb2N1bWVudCBhbmQgQG9iamVjdC5zY2VuZURvY3VtZW50Lml0ZW1zLnR5cGUgPT0gXCJ2bi5zY2VuZVwiXG4gICAgICAgICAgICBAb2JqZWN0LmNoYXB0ZXIgPSBEYXRhTWFuYWdlci5nZXREb2N1bWVudChAb2JqZWN0LnNjZW5lRG9jdW1lbnQuaXRlbXMuY2hhcHRlclVpZClcbiAgICAgICAgICAgIEBvYmplY3QuY3VycmVudENoYXJhY3RlciA9IHsgXCJuYW1lXCI6IFwiXCIgfSAjUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJzWzBdXG4gICAgXG4gICAgICAgICAgICBpZiBub3QgR2FtZU1hbmFnZXIuaW5pdGlhbGl6ZWRcbiAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5pbml0aWFsaXplKClcbiAgICBcbiAgICAgICAgICAgIExhbmd1YWdlTWFuYWdlci5sb2FkQnVuZGxlcygpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHNwcml0ZSA9IG5ldyBncy5TcHJpdGUoKVxuICAgICAgICAgICAgc3ByaXRlLmJpdG1hcCA9IG5ldyBncy5CaXRtYXAoR3JhcGhpY3Mud2lkdGgsIDUwKVxuICAgICAgICAgICAgc3ByaXRlLmJpdG1hcC5kcmF3VGV4dCgwLCAwLCBHcmFwaGljcy53aWR0aCwgNTAsIFwiTm8gU3RhcnQgU2NlbmUgc2VsZWN0ZWRcIiwgMSwgMClcbiAgICAgICAgICAgIHNwcml0ZS5zcmNSZWN0ID0gbmV3IGdzLlJlY3QoMCwgMCwgR3JhcGhpY3Mud2lkdGgsIDUwKVxuICAgICAgICAgICAgc3ByaXRlLnkgPSAoR3JhcGhpY3MuaGVpZ2h0IC0gNTApIC8gMlxuICAgICAgICAgICAgc3ByaXRlLnogPSAxMDAwMFxuICAgXG4gICAgICAgIEBzZXR1cFNjcmVlbigpIFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBEaXNwb3NlcyB0aGUgc2NlbmUuIFxuICAgICpcbiAgICAqIEBtZXRob2QgZGlzcG9zZVxuICAgICMjI1xuICAgIGRpc3Bvc2U6IC0+XG4gICAgICAgIFJlc291cmNlTWFuYWdlci5jb250ZXh0ID0gQHJlc291cmNlQ29udGV4dFxuICAgICAgICBAb2JqZWN0LnJlbW92ZU9iamVjdChAb2JqZWN0LmNvbW1vbkV2ZW50Q29udGFpbmVyKVxuICAgICAgICBAc2hvdyhubylcblxuICAgICAgICBmb3IgZXZlbnQgaW4gR2FtZU1hbmFnZXIuY29tbW9uRXZlbnRzXG4gICAgICAgICAgICBpZiBldmVudFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50cy5vZmZCeU93bmVyKFwic3RhcnRcIiwgQG9iamVjdClcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudHMub2ZmQnlPd25lcihcImZpbmlzaFwiLCBAb2JqZWN0KVxuICAgICAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3QudmlkZW9cbiAgICAgICAgICAgIEBvYmplY3QudmlkZW8uZGlzcG9zZSgpXG4gICAgICAgICAgICBAb2JqZWN0LnZpZGVvLm9uRW5kZWQoKVxuICAgICAgICBcbiAgICAgICAgc3VwZXIoKVxuICAgIFxuICAgIGNoYW5nZVBpY3R1cmVEb21haW46IChkb21haW4pIC0+XG4gICAgICAgIEBvYmplY3QucGljdHVyZUNvbnRhaW5lci5iZWhhdmlvci5jaGFuZ2VEb21haW4oZG9tYWluKVxuICAgICAgICBAb2JqZWN0LnBpY3R1cmVzID0gQG9iamVjdC5waWN0dXJlQ29udGFpbmVyLnN1Yk9iamVjdHNcbiAgICBjaGFuZ2VUZXh0RG9tYWluOiAoZG9tYWluKSAtPlxuICAgICAgICBAb2JqZWN0LnRleHRDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgQG9iamVjdC50ZXh0cyA9IEBvYmplY3QudGV4dENvbnRhaW5lci5zdWJPYmplY3RzXG4gICAgY2hhbmdlVmlkZW9Eb21haW46IChkb21haW4pIC0+XG4gICAgICAgIEBvYmplY3QudmlkZW9Db250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgQG9iamVjdC52aWRlb3MgPSBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLnN1Yk9iamVjdHNcbiAgICBjaGFuZ2VIb3RzcG90RG9tYWluOiAoZG9tYWluKSAtPlxuICAgICAgICBAb2JqZWN0LmhvdHNwb3RDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgQG9iamVjdC5ob3RzcG90cyA9IEBvYmplY3QuaG90c3BvdENvbnRhaW5lci5zdWJPYmplY3RzXG4gICAgY2hhbmdlTWVzc2FnZUFyZWFEb21haW46IChkb21haW4pIC0+XG4gICAgICAgIEBvYmplY3QubWVzc2FnZUFyZWFDb250YWluZXIuYmVoYXZpb3IuY2hhbmdlRG9tYWluKGRvbWFpbilcbiAgICAgICAgQG9iamVjdC5tZXNzYWdlQXJlYXMgPSBAb2JqZWN0Lm1lc3NhZ2VBcmVhQ29udGFpbmVyLnN1Yk9iamVjdHNcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFNob3dzL0hpZGVzIHRoZSBjdXJyZW50IHNjZW5lLiBBIGhpZGRlbiBzY2VuZSBpcyBubyBsb25nZXIgc2hvd24gYW5kIGV4ZWN1dGVkXG4gICAgKiBidXQgYWxsIG9iamVjdHMgYW5kIGRhdGEgaXMgc3RpbGwgdGhlcmUgYW5kIGJlIHNob3duIGFnYWluIGFueXRpbWUuXG4gICAgKlxuICAgICogQG1ldGhvZCBzaG93XG4gICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZpc2libGUgLSBJbmRpY2F0ZXMgaWYgdGhlIHNjZW5lIHNob3VsZCBiZSBzaG93biBvciBoaWRkZW4uXG4gICAgIyMjICAgICAgICAgIFxuICAgIHNob3c6ICh2aXNpYmxlKSAtPlxuICAgICAgICBpZiB2aXNpYmxlXG4gICAgICAgICAgICBAb2JqZWN0LnZpZXdwb3J0ID0gR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydFxuICAgICAgICAgICAgXG4gICAgICAgIHdpbmRvdy4kZGF0YUZpZWxkcyA9IEBkYXRhRmllbGRzXG4gICAgICAgIEBvYmplY3QudmlzaWJsZSA9IHZpc2libGVcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3QubGF5b3V0Py51cGRhdGUoKVxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5waWN0dXJlQ29udGFpbmVyLmJlaGF2aW9yLnNldFZpc2libGUodmlzaWJsZSlcbiAgICAgICAgQG9iamVjdC5ob3RzcG90Q29udGFpbmVyLmJlaGF2aW9yLnNldFZpc2libGUodmlzaWJsZSlcbiAgICAgICAgQG9iamVjdC50ZXh0Q29udGFpbmVyLmJlaGF2aW9yLnNldFZpc2libGUodmlzaWJsZSlcbiAgICAgICAgQG9iamVjdC52aWRlb0NvbnRhaW5lci5iZWhhdmlvci5zZXRWaXNpYmxlKHZpc2libGUpXG4gICAgICAgIEBvYmplY3QubWVzc2FnZUFyZWFDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuICAgICAgICBAb2JqZWN0LnZpZXdwb3J0Q29udGFpbmVyLmJlaGF2aW9yLnNldFZpc2libGUodmlzaWJsZSlcbiAgICAgICAgQG9iamVjdC5jaGFyYWN0ZXJDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuICAgICAgICBAb2JqZWN0LmJhY2tncm91bmRDb250YWluZXIuYmVoYXZpb3Iuc2V0VmlzaWJsZSh2aXNpYmxlKVxuXG4gICAgICAgIEB2aWV3cG9ydD8udmlzaWJsZSA9IHZpc2libGVcbiAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3c/LnZpc2libGUgPSB2aXNpYmxlXG4gICAgICAgIEBvYmplY3QuaW5wdXROdW1iZXJCb3g/LnZpc2libGUgPSB2aXNpYmxlXG4gICAgICAgIEBvYmplY3QuaW5wdXRUZXh0Qm94Py52aXNpYmxlID0gdmlzaWJsZVxuICAgICAgICBAb2JqZWN0LmlucHV0VGV4dEJveD8udXBkYXRlKClcbiAgICAgICAgQG9iamVjdC5pbnB1dE51bWJlckJveD8udXBkYXRlKClcbiAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3c/LnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICAgICAjaWYgdmlzaWJsZSBhbmQgQG9iamVjdC5jb21tb25FdmVudENvbnRhaW5lci5zdWJPYmplY3RzLmxlbmd0aCA9PSAwXG4gICAgICAgIEBzZXR1cENvbW1vbkV2ZW50cygpXG4gICAgXG4gICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgY29tbW9uIGV2ZW50IGhhbmRsaW5nLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBDb21tb25FdmVudHNcbiAgICAjIyMgICBcbiAgICBzZXR1cENvbW1vbkV2ZW50czogLT5cbiAgICAgICAgY29tbW9uRXZlbnRzID0gQG9iamVjdC5zY2VuZURhdGE/LmNvbW1vbkV2ZW50c1xuICAgICAgICBcbiAgICAgICAgaWYgY29tbW9uRXZlbnRzXG4gICAgICAgICAgICBmb3IgZXZlbnQsIGkgaW4gY29tbW9uRXZlbnRzXG4gICAgICAgICAgICAgICAgaWYgZXZlbnQgYW5kIEBvYmplY3QuY29tbW9uRXZlbnRDb250YWluZXIuc3ViT2JqZWN0cy5pbmRleE9mKGV2ZW50KSA9PSAtMVxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmNvbW1vbkV2ZW50Q29udGFpbmVyLnNldE9iamVjdChldmVudCwgaSlcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuYmVoYXZpb3Iuc2V0dXBFdmVudEhhbmRsZXJzKClcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQuaW50ZXJwcmV0ZXI/LmlzUnVubmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRzLmVtaXQoXCJzdGFydFwiLCBldmVudClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZm9yIGV2ZW50LCBpIGluIEdhbWVNYW5hZ2VyLmNvbW1vbkV2ZW50c1xuICAgICAgICAgICAgICAgIGlmIGV2ZW50IGFuZCAoZXZlbnQucmVjb3JkLnN0YXJ0Q29uZGl0aW9uID09IDEgb3IgZXZlbnQucmVjb3JkLnBhcmFsbGVsKSBhbmQgQG9iamVjdC5jb21tb25FdmVudENvbnRhaW5lci5zdWJPYmplY3RzLmluZGV4T2YoZXZlbnQpID09IC0xXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QuY29tbW9uRXZlbnRDb250YWluZXIuc2V0T2JqZWN0KGV2ZW50LCBpKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRzLm9mZkJ5T3duZXIoXCJzdGFydFwiLCBAb2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudHMub2ZmQnlPd25lcihcImZpbmlzaFwiLCBAb2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV2ZW50LnJlY29yZC5wYXJhbGxlbFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRzLm9uIFwic3RhcnRcIiwgZ3MuQ2FsbEJhY2soXCJvbkF1dG9Db21tb25FdmVudFN0YXJ0XCIsIHRoaXMpLCBudWxsLCBAb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudHMub24gXCJmaW5pc2hcIiwgZ3MuQ2FsbEJhY2soXCJvbkF1dG9Db21tb25FdmVudEZpbmlzaFwiLCB0aGlzKSwgbnVsbCwgQG9iamVjdFxuXG4gICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LmludGVycHJldGVyPy5pc1J1bm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50cy5lbWl0KFwic3RhcnRcIiwgZXZlbnQpXG4gICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBtYWluIGludGVycHJldGVyLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBJbnRlcnByZXRlclxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgIFxuICAgIHNldHVwSW50ZXJwcmV0ZXI6IC0+XG4gICAgICAgIEBvYmplY3QuY29tbWFuZHMgPSBAb2JqZWN0LnNjZW5lRG9jdW1lbnQuaXRlbXMuY29tbWFuZHNcbiAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3Quc2NlbmVEYXRhLmludGVycHJldGVyXG4gICAgICAgICAgICBAb2JqZWN0LnJlbW92ZUNvbXBvbmVudChAb2JqZWN0LmludGVycHJldGVyKVxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlciA9IEBvYmplY3Quc2NlbmVEYXRhLmludGVycHJldGVyXG4gICAgICAgICAgICBAb2JqZWN0LmFkZENvbXBvbmVudChAb2JqZWN0LmludGVycHJldGVyKVxuICAgICAgICAgICAgI09iamVjdC5taXhpbihAb2JqZWN0LmludGVycHJldGVyLCBAb2JqZWN0LnNjZW5lRGF0YS5pbnRlcnByZXRlciwgZ3MuQ29tcG9uZW50X0NvbW1hbmRJbnRlcnByZXRlci5vYmplY3RDb2RlY0JsYWNrTGlzdClcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIuY29udGV4dC5zZXQoQG9iamVjdC5zY2VuZURvY3VtZW50LnVpZCwgQG9iamVjdClcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIub2JqZWN0ID0gQG9iamVjdFxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAb2JqZWN0LmludGVycHJldGVyLnNldHVwKClcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIuY29udGV4dC5zZXQoQG9iamVjdC5zY2VuZURvY3VtZW50LnVpZCwgQG9iamVjdClcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIuc3RhcnQoKVxuICAgICAgICAgICAgXG4gICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgY2hhcmFjdGVycyBhbmQgcmVzdG9yZXMgdGhlbSBmcm9tIGxvYWRlZCBzYXZlIGdhbWUgaWYgbmVjZXNzYXJ5LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBDaGFyYWN0ZXJzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgIFxuICAgIHNldHVwQ2hhcmFjdGVyczogLT5cbiAgICAgICAgaWYgQG9iamVjdC5zY2VuZURhdGEuY2hhcmFjdGVycz9cbiAgICAgICAgICAgIGZvciBjLCBpIGluIEBvYmplY3Quc2NlbmVEYXRhLmNoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICBAb2JqZWN0LmNoYXJhY3RlckNvbnRhaW5lci5zZXRPYmplY3QoYywgaSlcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3QuY3VycmVudENoYXJhY3RlciA9IEBvYmplY3Quc2NlbmVEYXRhLmN1cnJlbnRDaGFyYWN0ZXIgfHwgeyBuYW1lOiBcIlwiIH0jUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJzWzBdXG4gICAgICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCB2aWV3cG9ydHMgYW5kIHJlc3RvcmVzIHRoZW0gZnJvbSBsb2FkZWQgc2F2ZSBnYW1lIGlmIG5lY2Vzc2FyeS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwVmlld3BvcnRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgIFxuICAgIHNldHVwVmlld3BvcnRzOiAtPlxuICAgICAgICB2aWV3cG9ydHMgPSBAb2JqZWN0LnNjZW5lRGF0YT8udmlld3BvcnRzID8gW11cbiAgICAgICAgZm9yIHZpZXdwb3J0LCBpIGluIHZpZXdwb3J0c1xuICAgICAgICAgICAgaWYgdmlld3BvcnRcbiAgICAgICAgICAgICAgICBAb2JqZWN0LnZpZXdwb3J0Q29udGFpbmVyLnNldE9iamVjdCh2aWV3cG9ydCwgaSlcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIGJhY2tncm91bmRzIGFuZCByZXN0b3JlcyB0aGVtIGZyb20gbG9hZGVkIHNhdmUgZ2FtZSBpZiBuZWNlc3NhcnkuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cEJhY2tncm91bmRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgXG4gICAgc2V0dXBCYWNrZ3JvdW5kczogLT5cbiAgICAgICAgYmFja2dyb3VuZHMgPSBAb2JqZWN0LnNjZW5lRGF0YT8uYmFja2dyb3VuZHMgPyBbXVxuICAgICAgICBmb3IgYiwgaSBpbiBiYWNrZ3JvdW5kc1xuICAgICAgICAgICAgQG9iamVjdC5iYWNrZ3JvdW5kQ29udGFpbmVyLnNldE9iamVjdChiLCBpKVxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBwaWN0dXJlcyBhbmQgcmVzdG9yZXMgdGhlbSBmcm9tIGxvYWRlZCBzYXZlIGdhbWUgaWYgbmVjZXNzYXJ5LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBQaWN0dXJlc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgIFxuICAgIHNldHVwUGljdHVyZXM6IC0+XG4gICAgICAgIHBpY3R1cmVzID0gQG9iamVjdC5zY2VuZURhdGE/LnBpY3R1cmVzID8ge31cbiAgICAgICAgZm9yIGRvbWFpbiBvZiBwaWN0dXJlc1xuICAgICAgICAgICAgQG9iamVjdC5waWN0dXJlQ29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgICAgICBpZiBwaWN0dXJlc1tkb21haW5dIHRoZW4gZm9yIHBpY3R1cmUsIGkgaW4gcGljdHVyZXNbZG9tYWluXVxuICAgICAgICAgICAgICAgIEBvYmplY3QucGljdHVyZUNvbnRhaW5lci5zZXRPYmplY3QocGljdHVyZSwgaSlcbiAgICAgICAgICAgICAgICBpZiBwaWN0dXJlPy5pbWFnZVxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gXCJHcmFwaGljcy9QaWN0dXJlcy8je3BpY3R1cmUuaW1hZ2V9XCJcbiAgICAgICAgICAgICAgICAgICAgQHJlc291cmNlQ29udGV4dC5hZGQocGF0aCwgUmVzb3VyY2VNYW5hZ2VyLnJlc291cmNlc0J5UGF0aFtwYXRoXSlcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCB0ZXh0cyBhbmQgcmVzdG9yZXMgdGhlbSBmcm9tIGxvYWRlZCBzYXZlIGdhbWUgaWYgbmVjZXNzYXJ5LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBUZXh0c1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgIFxuICAgIHNldHVwVGV4dHM6IC0+XG4gICAgICAgIHRleHRzID0gQG9iamVjdC5zY2VuZURhdGE/LnRleHRzID8ge31cbiAgICAgICAgZm9yIGRvbWFpbiBvZiB0ZXh0c1xuICAgICAgICAgICAgQG9iamVjdC50ZXh0Q29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgICAgICBpZiB0ZXh0c1tkb21haW5dIHRoZW4gZm9yIHRleHQsIGkgaW4gdGV4dHNbZG9tYWluXVxuICAgICAgICAgICAgICAgIEBvYmplY3QudGV4dENvbnRhaW5lci5zZXRPYmplY3QodGV4dCwgaSlcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgdmlkZW9zIGFuZCByZXN0b3JlcyB0aGVtIGZyb20gbG9hZGVkIHNhdmUgZ2FtZSBpZiBuZWNlc3NhcnkuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cFZpZGVvc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBzZXR1cFZpZGVvczogLT5cbiAgICAgICAgdmlkZW9zID0gQG9iamVjdC5zY2VuZURhdGE/LnZpZGVvcyA/IHt9XG4gICAgICAgIGZvciBkb21haW4gb2YgdmlkZW9zXG4gICAgICAgICAgICBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgICAgICBpZiB2aWRlb3NbZG9tYWluXSB0aGVuIGZvciB2aWRlbywgaSBpbiB2aWRlb3NbZG9tYWluXVxuICAgICAgICAgICAgICAgIGlmIHZpZGVvXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBcIk1vdmllcy8je3ZpZGVvLnZpZGVvfVwiXG4gICAgICAgICAgICAgICAgICAgIEByZXNvdXJjZUNvbnRleHQuYWRkKHBhdGgsIFJlc291cmNlTWFuYWdlci5yZXNvdXJjZXNCeVBhdGhbcGF0aF0pXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvLnZpc2libGUgPSB5ZXNcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8udXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgQG9iamVjdC52aWRlb0NvbnRhaW5lci5zZXRPYmplY3QodmlkZW8sIGkpXG4gICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgaG90c3BvdHMgYW5kIHJlc3RvcmVzIHRoZW0gZnJvbSBsb2FkZWQgc2F2ZSBnYW1lIGlmIG5lY2Vzc2FyeS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwSG90c3BvdHNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgICAgIFxuICAgIHNldHVwSG90c3BvdHM6IC0+XG4gICAgICAgIGhvdHNwb3RzID0gQG9iamVjdC5zY2VuZURhdGE/LmhvdHNwb3RzID8ge31cbiAgICAgICAgZm9yIGRvbWFpbiBvZiBob3RzcG90c1xuICAgICAgICAgICAgQG9iamVjdC5ob3RzcG90Q29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgICAgICBpZiBob3RzcG90c1tkb21haW5dIHRoZW4gZm9yIGhvdHNwb3QsIGkgaW4gaG90c3BvdHNbZG9tYWluXVxuICAgICAgICAgICAgICAgIEBvYmplY3QuaG90c3BvdENvbnRhaW5lci5zZXRPYmplY3QoaG90c3BvdCwgaSlcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2V0cyB1cCBsYXlvdXQuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cExheW91dFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICBcbiAgICBzZXR1cExheW91dDogLT5cbiAgICAgICAgQGRhdGFGaWVsZHMgPSB1aS5VSU1hbmFnZXIuZGF0YVNvdXJjZXNbdWkuVWlGYWN0b3J5LmxheW91dHMuZ2FtZUxheW91dC5kYXRhU291cmNlIHx8IFwiZGVmYXVsdFwiXSgpXG4gICAgICAgIEBkYXRhRmllbGRzLnNjZW5lID0gQG9iamVjdFxuICAgICAgICB3aW5kb3cuJGRhdGFGaWVsZHMgPSBAZGF0YUZpZWxkc1xuICAgICAgICBhZHZWaXNpYmxlID0gQG9iamVjdC5tZXNzYWdlTW9kZSA9PSB2bi5NZXNzYWdlTW9kZS5BRFZcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3QubGF5b3V0ID0gdWkuVWlGYWN0b3J5LmNyZWF0ZUZyb21EZXNjcmlwdG9yKHVpLlVpRmFjdG9yeS5sYXlvdXRzLmdhbWVMYXlvdXQsIEBvYmplY3QpXG4gICAgICAgIEBvYmplY3QubGF5b3V0LnZpc2libGUgPSBhZHZWaXNpYmxlXG4gICAgICAgICRnYW1lTWVzc2FnZV9tZXNzYWdlLnZpc2libGUgPSBhZHZWaXNpYmxlXG4gICAgICAgIEBvYmplY3QubGF5b3V0LnVpLnByZXBhcmUoKVxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5jaG9pY2VzID0gQG9iamVjdC5zY2VuZURhdGE/LmNob2ljZXMgfHwgQG9iamVjdC5jaG9pY2VzXG4gICAgICAgIGlmIEBvYmplY3QuY2hvaWNlcz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgQHNob3dDaG9pY2VzKGdzLkNhbGxCYWNrKFwib25DaG9pY2VBY2NlcHRcIiwgQG9iamVjdC5pbnRlcnByZXRlciwgeyBwb2ludGVyOiBAb2JqZWN0LmludGVycHJldGVyLnBvaW50ZXIsIHBhcmFtczogQHBhcmFtcyB9KSlcbiAgICBcbiAgICAgICAgaWYgQG9iamVjdC5pbnRlcnByZXRlci53YWl0aW5nRm9yLmlucHV0TnVtYmVyXG4gICAgICAgICAgICBAc2hvd0lucHV0TnVtYmVyKEdhbWVNYW5hZ2VyLnRlbXBGaWVsZHMuZGlnaXRzLCBncy5DYWxsQmFjayhcIm9uSW5wdXROdW1iZXJGaW5pc2hcIiwgQG9iamVjdC5pbnRlcnByZXRlciwgQG9iamVjdC5pbnRlcnByZXRlcikpXG4gICAgICAgICAgICBcbiAgICAgICAgaWYgQG9iamVjdC5pbnRlcnByZXRlci53YWl0aW5nRm9yLmlucHV0VGV4dFxuICAgICAgICAgICAgQHNob3dJbnB1dFRleHQoR2FtZU1hbmFnZXIudGVtcEZpZWxkcy5sZXR0ZXJzLCBncy5DYWxsQmFjayhcIm9uSW5wdXRUZXh0RmluaXNoXCIsIEBvYmplY3QuaW50ZXJwcmV0ZXIsIEBvYmplY3QuaW50ZXJwcmV0ZXIpKVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIHRoZSBtYWluIHZpZXdwb3J0IC8gc2NyZWVuIHZpZXdwb3J0LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBNYWluVmlld3BvcnRcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgc2V0dXBNYWluVmlld3BvcnQ6IC0+XG4gICAgICAgIGlmICFAb2JqZWN0LnNjZW5lRGF0YS52aWV3cG9ydFxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydC5yZW1vdmVDb21wb25lbnQoR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydC52aXN1YWwpXG4gICAgICAgICAgICBHYW1lTWFuYWdlci5zY2VuZVZpZXdwb3J0LmRpc3Bvc2UoKVxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydCA9IG5ldyBncy5PYmplY3RfVmlld3BvcnQoR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydC52aXN1YWwudmlld3BvcnQpXG4gICAgICAgICAgICBAdmlld3BvcnQgPSBHYW1lTWFuYWdlci5zY2VuZVZpZXdwb3J0LnZpc3VhbC52aWV3cG9ydFxuICAgICAgICAgICAgQG9iamVjdC52aWV3cG9ydCA9IEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnRcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuc2NlbmVWaWV3cG9ydC5kaXNwb3NlKClcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lVmlld3BvcnQgPSBAb2JqZWN0LnNjZW5lRGF0YS52aWV3cG9ydFxuICAgICAgICAgICAgQG9iamVjdC52aWV3cG9ydCA9IEBvYmplY3Quc2NlbmVEYXRhLnZpZXdwb3J0XG4gICAgICAgICAgICBAdmlld3BvcnQgPSBAb2JqZWN0LnZpZXdwb3J0LnZpc3VhbC52aWV3cG9ydFxuICAgICAgICAgICAgQHZpZXdwb3J0LnZpZXdwb3J0ID0gR3JhcGhpY3Mudmlld3BvcnRcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFNldHMgdXAgc2NyZWVuLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBTY3JlZW5cbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgc2V0dXBTY3JlZW46IC0+XG4gICAgICAgIGlmIEBvYmplY3Quc2NlbmVEYXRhLnNjcmVlblxuICAgICAgICAgICAgQG9iamVjdC52aWV3cG9ydC5yZXN0b3JlKEBvYmplY3Quc2NlbmVEYXRhLnNjcmVlbilcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFJlc3RvcmVzIG1haW4gaW50ZXJwcmV0ZXIgZnJvbSBsb2FkZWQgc2F2ZSBnYW1lLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVzdG9yZUludGVycHJldGVyXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgXG4gICAgcmVzdG9yZUludGVycHJldGVyOiAtPlxuICAgICAgICBpZiBAb2JqZWN0LnNjZW5lRGF0YS5pbnRlcnByZXRlclxuICAgICAgICAgICAgQG9iamVjdC5pbnRlcnByZXRlci5yZXN0b3JlKClcbiAgICBcbiAgICAjIyMqXG4gICAgKiBSZXN0b3JlcyBtZXNzYWdlIGJveCBmcm9tIGxvYWRlZCBzYXZlIGdhbWUuXG4gICAgKlxuICAgICogQG1ldGhvZCByZXN0b3JlTWVzc2FnZUJveFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgXG4gICAgcmVzdG9yZU1lc3NhZ2VCb3g6IC0+XG4gICAgICAgIG1lc3NhZ2VCb3hlcyA9IEBvYmplY3Quc2NlbmVEYXRhPy5tZXNzYWdlQm94ZXNcbiAgICAgICAgaWYgbWVzc2FnZUJveGVzXG4gICAgICAgICAgICBmb3IgbWVzc2FnZUJveCBpbiBtZXNzYWdlQm94ZXNcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0ID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQobWVzc2FnZUJveC5pZClcbiAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LnZpc2libGUgPSBtZXNzYWdlQm94LnZpc2libGVcbiAgICAgICAgICAgICAgICBpZiBtZXNzYWdlQm94Lm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUJveC5tZXNzYWdlLnRleHRSZW5kZXJlci5kaXNwb3NlRXZlbnRIYW5kbGVycygpXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChtZXNzYWdlQm94Lm1lc3NhZ2UuaWQpXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGV4dFJlbmRlcmVyLmRpc3Bvc2UoKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0Lm1peGluKG1lc3NhZ2UsIG1lc3NhZ2VCb3gubWVzc2FnZSwgdWkuT2JqZWN0X01lc3NhZ2Uub2JqZWN0Q29kZWNCbGFja0xpc3QuY29uY2F0KFtcIm9yaWdpblwiXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gbWVzc2FnZS5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICBjLm9iamVjdCA9IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50ZXh0UmVuZGVyZXIuc2V0dXBFdmVudEhhbmRsZXJzKClcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFJlc3RvcmVzIG1lc3NhZ2UgZnJvbSBsb2FkZWQgc2F2ZSBnYW1lLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVzdG9yZU1lc3NhZ2VzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgICAgICAgICBcbiAgICByZXN0b3JlTWVzc2FnZXM6IC0+XG4gICAgICAgICNtZXNzYWdlT2JqZWN0ID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQoXCJnYW1lTWVzc2FnZV9tZXNzYWdlXCIpXG4gICAgICAgIFxuICAgICAjICAgaWYgQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VcbiAgICAgIyAgICAgICBtZXNzYWdlT2JqZWN0LnJlc3RvcmUoQG9iamVjdC5zY2VuZURhdGEubWVzc2FnZSlcbiAgICAgICAgICAgIFxuICAgICAjICAgaWYgQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VzXG4gICAgICMgICAgICAgbWVzc2FnZU9iamVjdC5tZXNzYWdlLnJlc3RvcmVNZXNzYWdlcyhAb2JqZWN0LnNjZW5lRGF0YS5tZXNzYWdlcylcbiAgICAgIyAgICAgICBtZXNzYWdlT2JqZWN0LnRleHRSZW5kZXJlci5yZXN0b3JlKEBvYmplY3Quc2NlbmVEYXRhLm1lc3NhZ2VUZXh0UmVuZGVyZXIpXG4gICAgICAgICAgICBcbiAgICAgICAgaWYgQG9iamVjdC5zY2VuZURhdGE/Lm1lc3NhZ2VBcmVhc1xuICAgICAgICAgICAgZm9yIGRvbWFpbiBvZiBAb2JqZWN0LnNjZW5lRGF0YS5tZXNzYWdlQXJlYXNcbiAgICAgICAgICAgICAgICBAb2JqZWN0Lm1lc3NhZ2VBcmVhQ29udGFpbmVyLmJlaGF2aW9yLmNoYW5nZURvbWFpbihkb21haW4pXG4gICAgICAgICAgICAgICAgbWVzc2FnZUFyZWFzID0gQG9iamVjdC5zY2VuZURhdGEubWVzc2FnZUFyZWFzXG4gICAgICAgICAgICAgICAgaWYgbWVzc2FnZUFyZWFzW2RvbWFpbl0gdGhlbiBmb3IgYXJlYSwgaSBpbiBtZXNzYWdlQXJlYXNbZG9tYWluXVxuICAgICAgICAgICAgICAgICAgICBpZiBhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQXJlYSA9IG5ldyBncy5PYmplY3RfTWVzc2FnZUFyZWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxheW91dCA9IHVpLlVJTWFuYWdlci5jcmVhdGVDb250cm9sRnJvbURlc2NyaXB0b3IodHlwZTogXCJ1aS5DdXN0b21HYW1lTWVzc2FnZVwiLCBpZDogXCJjdXN0b21HYW1lTWVzc2FnZV9cIitpLCBwYXJhbXM6IHsgaWQ6IFwiY3VzdG9tR2FtZU1lc3NhZ2VfXCIraSB9LCBtZXNzYWdlQXJlYSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQub2JqZWN0QnlJZChcImN1c3RvbUdhbWVNZXNzYWdlX1wiK2krXCJfbWVzc2FnZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0Lm1peGluKG1lc3NhZ2UsIGFyZWEubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIG1lc3NhZ2UuY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMub2JqZWN0ID0gbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgI21lc3NhZ2UucmVzdG9yZShmLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VMYXlvdXQuZHN0UmVjdC54ID0gYXJlYS5sYXlvdXQuZHN0UmVjdC54XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGF5b3V0LmRzdFJlY3QueSA9IGFyZWEubGF5b3V0LmRzdFJlY3QueVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxheW91dC5kc3RSZWN0LndpZHRoID0gYXJlYS5sYXlvdXQuZHN0UmVjdC53aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUxheW91dC5kc3RSZWN0LmhlaWdodCA9IGFyZWEubGF5b3V0LmRzdFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGF5b3V0Lm5lZWRzVXBkYXRlID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGF5b3V0LnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAjbWVzc2FnZS5tZXNzYWdlLnJlc3RvcmVNZXNzYWdlcyhmLm1lc3NhZ2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgI21lc3NhZ2UudGV4dFJlbmRlcmVyLnJlc3RvcmUoZi50ZXh0UmVuZGVyZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAjbWVzc2FnZS52aXNpYmxlID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQXJlYS5tZXNzYWdlID0gbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUFyZWEubGF5b3V0ID0gbWVzc2FnZUxheW91dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUFyZWEuYWRkT2JqZWN0KG1lc3NhZ2VMYXlvdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICBAb2JqZWN0Lm1lc3NhZ2VBcmVhQ29udGFpbmVyLnNldE9iamVjdChtZXNzYWdlQXJlYSwgaSlcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgIFxuICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIFJlc3RvcmVzIGF1ZGlvLXBsYXliYWNrIGZyb20gbG9hZGVkIHNhdmUgZ2FtZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHJlc3RvcmVBdWRpb1BsYXliYWNrXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICAgICAgICAgXG4gICAgcmVzdG9yZUF1ZGlvUGxheWJhY2s6IC0+XG4gICAgICAgIGlmIEBvYmplY3Quc2NlbmVEYXRhLmF1ZGlvXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuYXVkaW9CdWZmZXJzLnB1c2goYikgZm9yIGIgaW4gQG9iamVjdC5zY2VuZURhdGEuYXVkaW8uYXVkaW9CdWZmZXJzXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuYXVkaW9CdWZmZXJzQnlMYXllciA9IEBvYmplY3Quc2NlbmVEYXRhLmF1ZGlvLmF1ZGlvQnVmZmVyc0J5TGF5ZXJcbiAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5hdWRpb0xheWVycyA9IEBvYmplY3Quc2NlbmVEYXRhLmF1ZGlvLmF1ZGlvTGF5ZXJzXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuc291bmRSZWZlcmVuY2VzID0gQG9iamVjdC5zY2VuZURhdGEuYXVkaW8uc291bmRSZWZlcmVuY2VzXG4gICAgICAgICAgICBcbiAgICAgXG4gICAgIyMjKlxuICAgICogUmVzdG9yZXMgdGhlIHNjZW5lIG9iamVjdHMgZnJvbSB0aGUgY3VycmVudCBsb2FkZWQgc2F2ZS1nYW1lLiBJZiBubyBzYXZlLWdhbWUgaXNcbiAgICAqIHByZXNlbnQgaW4gR2FtZU1hbmFnZXIubG9hZGVkU2F2ZUdhbWUsIG5vdGhpbmcgd2lsbCBoYXBwZW4uXG4gICAgKlxuICAgICogQG1ldGhvZCByZXN0b3JlU2NlbmVcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyNcbiAgICByZXN0b3JlU2NlbmU6IC0+XG4gICAgICAgIHNhdmVHYW1lID0gR2FtZU1hbmFnZXIubG9hZGVkU2F2ZUdhbWVcbiAgICAgICAgaWYgc2F2ZUdhbWVcbiAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgZ3MuT2JqZWN0Q29kZWNDb250ZXh0KFtHcmFwaGljcy52aWV3cG9ydCwgQG9iamVjdCwgdGhpc10sIHNhdmVHYW1lLmVuY29kZWRPYmplY3RTdG9yZSwgbnVsbClcbiAgICAgICAgICAgIHNhdmVHYW1lLmRhdGEgPSBncy5PYmplY3RDb2RlYy5kZWNvZGUoc2F2ZUdhbWUuZGF0YSwgY29udGV4dClcbiAgICAgICAgICAgIGZvciBjIGluIHNhdmVHYW1lLmRhdGEuY2hhcmFjdGVyTmFtZXNcbiAgICAgICAgICAgICAgICBpZiBjIHRoZW4gUmVjb3JkTWFuYWdlci5jaGFyYWN0ZXJzW2MuaW5kZXhdPy5uYW1lID0gYy5uYW1lXG4gICAgICAgICAgICBHYW1lTWFuYWdlci5yZXN0b3JlKHNhdmVHYW1lKVxuICAgICAgICAgICAgZ3MuT2JqZWN0Q29kZWMub25SZXN0b3JlKHNhdmVHYW1lLmRhdGEsIGNvbnRleHQpXG4gICAgICAgICAgICBAcmVzb3VyY2VDb250ZXh0LmZyb21EYXRhQnVuZGxlKHNhdmVHYW1lLmRhdGEucmVzb3VyY2VDb250ZXh0LCBSZXNvdXJjZU1hbmFnZXIucmVzb3VyY2VzQnlQYXRoKVxuXG4gICAgICAgICAgICBAb2JqZWN0LnNjZW5lRGF0YSA9IHNhdmVHYW1lLmRhdGFcbiAgICAgICAgICAgIEdyYXBoaWNzLmZyYW1lQ291bnQgPSBzYXZlR2FtZS5kYXRhLmZyYW1lQ291bnRcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogUHJlcGFyZXMgYWxsIGRhdGEgZm9yIHRoZSBzY2VuZSBhbmQgbG9hZHMgdGhlIG5lY2Vzc2FyeSBncmFwaGljIGFuZCBhdWRpbyByZXNvdXJjZXMuXG4gICAgKlxuICAgICogQG1ldGhvZCBwcmVwYXJlRGF0YVxuICAgICogQGFic3RyYWN0XG4gICAgIyMjXG4gICAgcHJlcGFyZURhdGE6IC0+XG4gICAgICAgICNSZWNvcmRNYW5hZ2VyLnRyYW5zbGF0ZSgpXG4gICAgICAgIFxuICAgICAgICBHYW1lTWFuYWdlci5zY2VuZSA9IEBvYmplY3RcblxuICAgICAgICBncy5PYmplY3RNYW5hZ2VyLmN1cnJlbnQgPSBAb2JqZWN0TWFuYWdlclxuICAgICAgICBcbiAgICAgICAgQG9iamVjdC5zY2VuZURhdGEudWlkID0gQG9iamVjdC5zY2VuZURvY3VtZW50LnVpZFxuICAgICAgICBcbiAgICAgICAgaWYgIVJlc291cmNlTG9hZGVyLmxvYWRFdmVudENvbW1hbmRzRGF0YShAb2JqZWN0LnNjZW5lRG9jdW1lbnQuaXRlbXMuY29tbWFuZHMpXG4gICAgICAgICAgICBSZXNvdXJjZUxvYWRlci5sb2FkRXZlbnRDb21tYW5kc0dyYXBoaWNzKEBvYmplY3Quc2NlbmVEb2N1bWVudC5pdGVtcy5jb21tYW5kcylcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLmJhY2tsb2cgPSBAb2JqZWN0LnNjZW5lRGF0YS5iYWNrbG9nIHx8IEdhbWVNYW5hZ2VyLnNjZW5lRGF0YS5iYWNrbG9nIHx8IFtdXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFJlc291cmNlTG9hZGVyLmxvYWRTeXN0ZW1Tb3VuZHMoKVxuICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIubG9hZFN5c3RlbUdyYXBoaWNzKClcbiAgICAgICAgICAgIFJlc291cmNlTG9hZGVyLmxvYWRVaVR5cGVzR3JhcGhpY3ModWkuVWlGYWN0b3J5LmN1c3RvbVR5cGVzKVxuICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIubG9hZFVpTGF5b3V0R3JhcGhpY3ModWkuVWlGYWN0b3J5LmxheW91dHMuZ2FtZUxheW91dClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgQGRhdGFGaWVsZHM/XG4gICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIubG9hZFVpRGF0YUZpZWxkc0dyYXBoaWNzKEBkYXRhRmllbGRzKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgJHRlbXBGaWVsZHMuY2hvaWNlVGltZXIgPSBAb2JqZWN0LmNob2ljZVRpbWVyXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnZhcmlhYmxlU3RvcmUuc2V0dXAoeyBpZDogQG9iamVjdC5zY2VuZURvY3VtZW50LnVpZH0pXG4gICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBQcmVwYXJlcyBhbGwgdmlzdWFsIGdhbWUgb2JqZWN0IGZvciB0aGUgc2NlbmUuXG4gICAgKlxuICAgICogQG1ldGhvZCBwcmVwYXJlVmlzdWFsXG4gICAgIyMjIFxuICAgIHByZXBhcmVWaXN1YWw6IC0+XG4gICAgICAgIGlmIEBvYmplY3QubGF5b3V0IHRoZW4gcmV0dXJuXG4gICAgICAgIFxuICAgICAgICBpZiBHYW1lTWFuYWdlci50ZW1wRmllbGRzLmlzRXhpdGluZ0dhbWVcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnRlbXBGaWVsZHMuaXNFeGl0aW5nR2FtZSA9IG5vXG4gICAgICAgICAgICBncy5HYW1lTm90aWZpZXIucG9zdFJlc2V0U2NlbmVDaGFuZ2UoQG9iamVjdC5zY2VuZURvY3VtZW50Lml0ZW1zLm5hbWUpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGdzLkdhbWVOb3RpZmllci5wb3N0U2NlbmVDaGFuZ2UoQG9iamVjdC5zY2VuZURvY3VtZW50Lml0ZW1zLm5hbWUpXG4gICAgICAgIFxuICAgICAgICBAcmVzdG9yZVNjZW5lKClcbiAgICAgICAgQG9iamVjdC5tZXNzYWdlTW9kZSA9IEBvYmplY3Quc2NlbmVEYXRhLm1lc3NhZ2VNb2RlID8gdm4uTWVzc2FnZU1vZGUuQURWXG4gICAgICAgIEBzZXR1cE1haW5WaWV3cG9ydCgpXG4gICAgICAgIEBzZXR1cFZpZXdwb3J0cygpXG4gICAgICAgIEBzZXR1cENoYXJhY3RlcnMoKVxuICAgICAgICBAc2V0dXBCYWNrZ3JvdW5kcygpXG4gICAgICAgIEBzZXR1cFBpY3R1cmVzKClcbiAgICAgICAgQHNldHVwVGV4dHMoKVxuICAgICAgICBAc2V0dXBWaWRlb3MoKVxuICAgICAgICBAc2V0dXBIb3RzcG90cygpXG4gICAgICAgIEBzZXR1cEludGVycHJldGVyKClcbiAgICAgICAgQHNldHVwTGF5b3V0KClcbiAgICAgICAgQHNldHVwQ29tbW9uRXZlbnRzKClcbiAgICAgICAgXG4gICAgICAgIEByZXN0b3JlTWVzc2FnZUJveCgpXG4gICAgICAgIEByZXN0b3JlSW50ZXJwcmV0ZXIoKVxuICAgICAgICBAcmVzdG9yZU1lc3NhZ2VzKClcbiAgICAgICAgQHJlc3RvcmVBdWRpb1BsYXliYWNrKClcbiAgICAgICAgXG4gICAgICAgIEBzaG93KHRydWUpXG4gICAgICAgIFxuICAgICAgICBAb2JqZWN0LnNjZW5lRGF0YSA9IHt9XG4gICAgICAgIEdhbWVNYW5hZ2VyLnNjZW5lRGF0YSA9IHt9XG4gICAgICAgIFxuICAgICAgICBHcmFwaGljcy51cGRhdGUoKVxuICAgICAgICBAdHJhbnNpdGlvbih7IGR1cmF0aW9uOiAwIH0pXG4gICAgICAgIFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBBZGRzIGEgbmV3IGNoYXJhY3RlciB0byB0aGUgc2NlbmUuXG4gICAgKlxuICAgICogQG1ldGhvZCBhZGRDaGFyYWN0ZXJcbiAgICAqIEBwYXJhbSB7dm4uT2JqZWN0X0NoYXJhY3Rlcn0gY2hhcmFjdGVyIC0gVGhlIGNoYXJhY3RlciB0byBhZGQuXG4gICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vQW5pbWF0aW9uIC0gSW5kaWNhdGVzIGlmIHRoZSBjaGFyYWN0ZXIgc2hvdWxkIGJlIGFkZGVkIGltbWVkaWF0ZWx5IHdpdG91dCBhbnkgYXBwZWFyLWFuaW1hdGlvbi5cbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb25EYXRhIC0gQ29udGFpbnMgdGhlIGFwcGVhci1hbmltYXRpb24gZGF0YSAtPiB7IGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiB9LlxuICAgICMjIyBcbiAgICBhZGRDaGFyYWN0ZXI6IChjaGFyYWN0ZXIsIG5vQW5pbWF0aW9uLCBhbmltYXRpb25EYXRhKSAtPlxuICAgICAgICB1bmxlc3Mgbm9BbmltYXRpb25cbiAgICAgICAgICAgIGNoYXJhY3Rlci5tb3Rpb25CbHVyLnNldChhbmltYXRpb25EYXRhLm1vdGlvbkJsdXIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGFuaW1hdGlvbkRhdGEuZHVyYXRpb24gPiAwXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyLmFuaW1hdG9yLmFwcGVhcihjaGFyYWN0ZXIuZHN0UmVjdC54LCBjaGFyYWN0ZXIuZHN0UmVjdC55LCBhbmltYXRpb25EYXRhLmFuaW1hdGlvbiwgYW5pbWF0aW9uRGF0YS5lYXNpbmcsIGFuaW1hdGlvbkRhdGEuZHVyYXRpb24pIHVubGVzcyBub0FuaW1hdGlvblxuICAgICAgICBcbiAgICAgICAgY2hhcmFjdGVyLnZpZXdwb3J0ID0gQHZpZXdwb3J0XG4gICAgICAgIGNoYXJhY3Rlci52aXNpYmxlID0geWVzIFxuICAgIFxuICAgICAgICBAb2JqZWN0LmNoYXJhY3RlckNvbnRhaW5lci5hZGRPYmplY3QoY2hhcmFjdGVyKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBSZW1vdmVzIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNjZW5lLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVtb3ZlQ2hhcmFjdGVyXG4gICAgKiBAcGFyYW0ge3ZuLk9iamVjdF9DaGFyYWN0ZXJ9IGNoYXJhY3RlciAtIFRoZSBjaGFyYWN0ZXIgdG8gcmVtb3ZlLlxuICAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbkRhdGEgLSBDb250YWlucyB0aGUgZGlzYXBwZWFyLWFuaW1hdGlvbiBkYXRhIC0+IHsgYW5pbWF0aW9uLCBlYXNpbmcsIGR1cmF0aW9uIH0uXG4gICAgIyMjXG4gICAgcmVtb3ZlQ2hhcmFjdGVyOiAoY2hhcmFjdGVyLCBhbmltYXRpb25EYXRhKSAtPlxuICAgICAgICBjaGFyYWN0ZXI/LmFuaW1hdG9yLmRpc2FwcGVhcihhbmltYXRpb25EYXRhLmFuaW1hdGlvbiwgYW5pbWF0aW9uRGF0YS5lYXNpbmcsIGFuaW1hdGlvbkRhdGEuZHVyYXRpb24sIChzZW5kZXIpIC0+IHNlbmRlci5kaXNwb3NlKCkpXG4gICAgXG4gICAgIyMjKlxuICAgICogUmVzdW1lcyB0aGUgY3VycmVudCBzY2VuZSBpZiBpdCBoYXMgYmVlbiBwYXVzZWQuXG4gICAgKlxuICAgICogQG1ldGhvZCByZXN1bWVTY2VuZVxuICAgICMjI1xuICAgIHJlc3VtZVNjZW5lOiAtPlxuICAgICAgICBAb2JqZWN0LnBpY3R1cmVDb250YWluZXIuYWN0aXZlID0geWVzXG4gICAgICAgIEBvYmplY3QuY2hhcmFjdGVyQ29udGFpbmVyLmFjdGl2ZSA9IHllc1xuICAgICAgICBAb2JqZWN0LmJhY2tncm91bmRDb250YWluZXIuYWN0aXZlID0geWVzXG4gICAgICAgIEBvYmplY3QudGV4dENvbnRhaW5lci5hY3RpdmUgPSB5ZXNcbiAgICAgICAgQG9iamVjdC5ob3RzcG90Q29udGFpbmVyLmFjdGl2ZSA9IHllc1xuICAgICAgICBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLmFjdGl2ZSA9IHllc1xuICAgICAgICBcbiAgICAgICAgbWVzc2FnZSA9IGdzLk9iamVjdE1hbmFnZXIuY3VycmVudC5vYmplY3RCeUlkKFwiZ2FtZU1lc3NhZ2VfbWVzc2FnZVwiKVxuICAgICAgICBtZXNzYWdlLmFjdGl2ZSA9IHllc1xuIFxuICAgICMjIypcbiAgICAqIFBhdXNlcyB0aGUgY3VycmVudCBzY2VuZS4gQSBwYXVzZWQgc2NlbmUgd2lsbCBub3QgY29udGludWUsIG1lc3NhZ2VzLCBwaWN0dXJlcywgZXRjLiB3aWxsXG4gICAgKiBzdG9wIHVudGlsIHRoZSBzY2VuZSByZXN1bWVzLlxuICAgICpcbiAgICAqIEBtZXRob2QgcGF1c2VTY2VuZVxuICAgICMjI1xuICAgIHBhdXNlU2NlbmU6IC0+XG4gICAgICAgIEBvYmplY3QucGljdHVyZUNvbnRhaW5lci5hY3RpdmUgPSBub1xuICAgICAgICBAb2JqZWN0LmNoYXJhY3RlckNvbnRhaW5lci5hY3RpdmUgPSBub1xuICAgICAgICBAb2JqZWN0LmJhY2tncm91bmRDb250YWluZXIuYWN0aXZlID0gbm9cbiAgICAgICAgQG9iamVjdC50ZXh0Q29udGFpbmVyLmFjdGl2ZSA9IG5vXG4gICAgICAgIEBvYmplY3QuaG90c3BvdENvbnRhaW5lci5hY3RpdmUgPSBub1xuICAgICAgICBAb2JqZWN0LnZpZGVvQ29udGFpbmVyLmFjdGl2ZSA9IG5vXG4gICAgICAgIFxuICAgICAgICBtZXNzYWdlID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQoXCJnYW1lTWVzc2FnZV9tZXNzYWdlXCIpXG4gICAgICAgIG1lc3NhZ2UuYWN0aXZlID0gbm9cbiAgICAgXG4gICAgIyMjKlxuICAgICogQ2hhbmdlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZW50aXJlIGdhbWUgVUkgbGlrZSB0aGUgbWVzc2FnZSBib3hlcywgZXRjLiB0byBhbGxvd3NcbiAgICAqIHRoZSBwbGF5ZXIgdG8gc2VlIHRoZSBlbnRpcmUgc2NlbmUuIFVzZWZ1bCBmb3IgQ0dzLCBldGMuXG4gICAgKlxuICAgICogQHBhcmFtIHtib29sZWFufSB2aXNpYmxlIC0gSWYgPGI+dHJ1ZTwvYj4sIHRoZSBnYW1lIFVJIHdpbGwgYmUgdmlzaWJsZS4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgaGlkZGVuLlxuICAgICogQG1ldGhvZCBjaGFuZ2VVSVZpc2liaWxpdHlcbiAgICAjIyMgICBcbiAgICBjaGFuZ2VVSVZpc2liaWxpdHk6ICh2aXNpYmxlKSAtPlxuICAgICAgICBAdWlWaXNpYmxlID0gdmlzaWJsZVxuICAgICAgICBAb2JqZWN0LmxheW91dC52aXNpYmxlID0gdmlzaWJsZVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTaG93cyBpbnB1dC10ZXh0IGJveCB0byBsZXQgdGhlIHVzZXIgZW50ZXIgYSB0ZXh0LlxuICAgICpcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZXR0ZXJzIC0gVGhlIG1heC4gbnVtYmVyIG9mIGxldHRlcnMgdGhlIHVzZXIgY2FuIGVudGVyLlxuICAgICogQHBhcmFtIHtncy5DYWxsYmFja30gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgaW5wdXQtdGV4dCBib3ggaGFzIGJlZW4gYWNjZXB0ZWQgYnkgdGhlIHVzZXIuXG4gICAgKiBAbWV0aG9kIHNob3dJbnB1dFRleHRcbiAgICAjIyNcbiAgICBzaG93SW5wdXRUZXh0OiAobGV0dGVycywgY2FsbGJhY2spIC0+XG4gICAgICAgIEBvYmplY3QuaW5wdXRUZXh0Qm94Py5kaXNwb3NlKClcbiAgICAgICAgQG9iamVjdC5pbnB1dFRleHRCb3ggPSB1aS5VaUZhY3RvcnkuY3JlYXRlQ29udHJvbEZyb21EZXNjcmlwdG9yKHVpLlVpRmFjdG9yeS5jdXN0b21UeXBlc1tcInVpLklucHV0VGV4dEJveFwiXSwgQG9iamVjdC5sYXlvdXQpXG4gICAgICAgIEBvYmplY3QuaW5wdXRUZXh0Qm94LnVpLnByZXBhcmUoKVxuICAgICAgICBAb2JqZWN0LmlucHV0VGV4dEJveC5ldmVudHMub24oXCJhY2NlcHRcIiwgY2FsbGJhY2spXG4gICAgICAgXG4gICAgIyMjKlxuICAgICogU2hvd3MgaW5wdXQtbnVtYmVyIGJveCB0byBsZXQgdGhlIHVzZXIgZW50ZXIgYSBudW1iZXIuXG4gICAgKlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGRpZ2l0cyAtIFRoZSBtYXguIG51bWJlciBvZiBkaWdpdHMgdGhlIHVzZXIgY2FuIGVudGVyLlxuICAgICogQHBhcmFtIHtncy5DYWxsYmFja30gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBpZiB0aGUgaW5wdXQtbnVtYmVyIGJveCBoYXMgYmVlbiBhY2NlcHRlZCBieSB0aGUgdXNlci5cbiAgICAqIEBtZXRob2Qgc2hvd0lucHV0TnVtYmVyXG4gICAgIyMjIFxuICAgIHNob3dJbnB1dE51bWJlcjogKGRpZ2l0cywgY2FsbGJhY2spIC0+XG4gICAgICAgIEBvYmplY3QuaW5wdXROdW1iZXJCb3g/LmRpc3Bvc2UoKVxuICAgICAgICBAb2JqZWN0LmlucHV0TnVtYmVyQm94ID0gdWkuVWlGYWN0b3J5LmNyZWF0ZUNvbnRyb2xGcm9tRGVzY3JpcHRvcih1aS5VaUZhY3RvcnkuY3VzdG9tVHlwZXNbXCJ1aS5JbnB1dE51bWJlckJveFwiXSwgQG9iamVjdC5sYXlvdXQpXG4gICAgICAgIEBvYmplY3QuaW5wdXROdW1iZXJCb3gudWkucHJlcGFyZSgpXG4gICAgICAgIEBvYmplY3QuaW5wdXROdW1iZXJCb3guZXZlbnRzLm9uKFwiYWNjZXB0XCIsIGNhbGxiYWNrKSAgICBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTaG93cyBjaG9pY2VzIHRvIGxldCB0aGUgdXNlciBwaWNrIGEgY2hvaWNlLlxuICAgICpcbiAgICAqIEBwYXJhbSB7T2JqZWN0W119IGNob2ljZXMgLSBBbiBhcnJheSBvZiBjaG9pY2VzXG4gICAgKiBAcGFyYW0ge2dzLkNhbGxiYWNrfSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGlmIGEgY2hvaWNlIGhhcyBiZWVuIHBpY2tlZCBieSB0aGUgdXNlci5cbiAgICAqIEBtZXRob2Qgc2hvd0Nob2ljZXNcbiAgICAjIyMgICAgIFxuICAgIHNob3dDaG9pY2VzOiAoY2FsbGJhY2spIC0+XG4gICAgICAgIHVzZUZyZWVMYXlvdXQgPSBAb2JqZWN0LmNob2ljZXMud2hlcmUoKHgpIC0+IHguZHN0UmVjdD8pLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3c/LmRpc3Bvc2UoKVxuICAgICAgICBcbiAgICAgICAgaWYgdXNlRnJlZUxheW91dFxuICAgICAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3cgPSB1aS5VaUZhY3RvcnkuY3JlYXRlQ29udHJvbEZyb21EZXNjcmlwdG9yKHVpLlVpRmFjdG9yeS5jdXN0b21UeXBlc1tcInVpLkZyZWVDaG9pY2VCb3hcIl0sIEBvYmplY3QubGF5b3V0KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAb2JqZWN0LmNob2ljZVdpbmRvdyA9IHVpLlVpRmFjdG9yeS5jcmVhdGVDb250cm9sRnJvbURlc2NyaXB0b3IodWkuVWlGYWN0b3J5LmN1c3RvbVR5cGVzW1widWkuQ2hvaWNlQm94XCJdLCBAb2JqZWN0LmxheW91dClcbiAgICAgICAgXG4gICAgICAgIEBvYmplY3QuY2hvaWNlV2luZG93LmV2ZW50cy5vbihcInNlbGVjdGlvbkFjY2VwdFwiLCBjYWxsYmFjaylcbiAgICAgICAgQG9iamVjdC5jaG9pY2VXaW5kb3cudWkucHJlcGFyZSgpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIENoYW5nZXMgdGhlIGJhY2tncm91bmQgb2YgdGhlIHNjZW5lLlxuICAgICpcbiAgICAqIEBtZXRob2QgY2hhbmdlQmFja2dyb3VuZFxuICAgICogQHBhcmFtIHtPYmplY3R9IGJhY2tncm91bmQgLSBUaGUgYmFja2dyb3VuZCBncmFwaGljIG9iamVjdCAtPiB7IG5hbWUgfVxuICAgICogQHBhcmFtIHtib29sZWFufSBub0FuaW1hdGlvbiAtIEluZGljYXRlcyBpZiB0aGUgYmFja2dyb3VuZCBzaG91bGQgYmUgY2hhbmdlZCBpbW1lZGlhdGVseSB3aXRvdXQgYW55IGNoYW5nZS1hbmltYXRpb24uXG4gICAgKiBAcGFyYW0ge09iamVjdH0gYW5pbWF0aW9uIC0gVGhlIGFwcGVhci9kaXNhcHBlYXIgYW5pbWF0aW9uIHRvIHVzZS5cbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBlYXNpbmcgLSBUaGUgZWFzaW5nIG9mIHRoZSBjaGFuZ2UgYW5pbWF0aW9uLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIG9mIHRoZSBjaGFuZ2UgaW4gZnJhbWVzLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IG94IC0gVGhlIHgtb3JpZ2luIG9mIHRoZSBiYWNrZ3JvdW5kLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IG95IC0gVGhlIHktb3JpZ2luIG9mIHRoZSBiYWNrZ3JvdW5kLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGxheWVyIC0gVGhlIGJhY2tncm91bmQtbGF5ZXIgdG8gY2hhbmdlLlxuICAgICogQHBhcmFtIHtib29sZWFufSBsb29wSG9yaXpvbnRhbCAtIEluZGljYXRlcyBpZiB0aGUgYmFja2dyb3VuZCBzaG91bGQgYmUgbG9vcGVkIGhvcml6b250YWxseS5cbiAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9vcFZlcnRpY2FsIC0gSW5kaWNhdGVzIGlmIHRoZSBiYWNrZ3JvdW5kIHNob3VsZCBiZSBsb29wZWQgdmVydGljYWxseS5cbiAgICAjIyMgICBcbiAgICBjaGFuZ2VCYWNrZ3JvdW5kOiAoYmFja2dyb3VuZCwgbm9BbmltYXRpb24sIGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiwgb3gsIG95LCBsYXllciwgbG9vcEhvcml6b250YWwsIGxvb3BWZXJ0aWNhbCkgLT5cbiAgICAgICAgaWYgYmFja2dyb3VuZD9cbiAgICAgICAgICAgIG90aGVyT2JqZWN0ID0gQG9iamVjdC5iYWNrZ3JvdW5kc1tsYXllcl1cbiAgICAgICAgICAgIG9iamVjdCA9IG5ldyB2bi5PYmplY3RfQmFja2dyb3VuZCgpXG4gICAgICAgICAgICBvYmplY3QuaW1hZ2UgPSBiYWNrZ3JvdW5kLm5hbWVcbiAgICAgICAgICAgIG9iamVjdC5vcmlnaW4ueCA9IG94XG4gICAgICAgICAgICBvYmplY3Qub3JpZ2luLnkgPSBveVxuICAgICAgICAgICAgb2JqZWN0LnZpZXdwb3J0ID0gQHZpZXdwb3J0XG4gICAgICAgICAgICBvYmplY3QudmlzdWFsLmxvb3BpbmcudmVydGljYWwgPSBub1xuICAgICAgICAgICAgb2JqZWN0LnZpc3VhbC5sb29waW5nLmhvcml6b250YWwgPSBub1xuICAgICAgICAgICAgb2JqZWN0LnVwZGF0ZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEBvYmplY3QuYmFja2dyb3VuZENvbnRhaW5lci5zZXRPYmplY3Qob2JqZWN0LCBsYXllcilcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gPyAzMFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBvdGhlck9iamVjdD8uekluZGV4ID0gbGF5ZXJcbiAgICAgICAgICAgIG90aGVyT2JqZWN0Py5hbmltYXRvci5vdGhlck9iamVjdD8uZGlzcG9zZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGR1cmF0aW9uID09IDBcbiAgICAgICAgICAgICAgICBvdGhlck9iamVjdD8uZGlzcG9zZSgpXG4gICAgICAgICAgICAgICAgb2JqZWN0LnZpc3VhbC5sb29waW5nLnZlcnRpY2FsID0gbG9vcFZlcnRpY2FsXG4gICAgICAgICAgICAgICAgb2JqZWN0LnZpc3VhbC5sb29waW5nLmhvcml6b250YWwgPSBsb29wSG9yaXpvbnRhbFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGlmIG5vQW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC52aXN1YWwubG9vcGluZy52ZXJ0aWNhbCA9IGxvb3BWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICBvYmplY3QudmlzdWFsLmxvb3BpbmcuaG9yaXpvbnRhbCA9IGxvb3BIb3Jpem9udGFsXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYW5pbWF0b3Iub3RoZXJPYmplY3QgPSBvdGhlck9iamVjdFxuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYW5pbWF0b3IuYXBwZWFyKDAsIDAsIGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiwgKHNlbmRlcikgPT4gXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXIudXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlci5hbmltYXRvci5vdGhlck9iamVjdD8uZGlzcG9zZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXIuYW5pbWF0b3Iub3RoZXJPYmplY3QgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXIudmlzdWFsLmxvb3BpbmcudmVydGljYWwgPSBsb29wVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlci52aXN1YWwubG9vcGluZy5ob3Jpem9udGFsID0gbG9vcEhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAb2JqZWN0LmJhY2tncm91bmRzW2xheWVyXT8uYW5pbWF0b3IuaGlkZSBkdXJhdGlvbiwgZWFzaW5nLCAgPT5cbiAgICAgICAgICAgICAgIEBvYmplY3QuYmFja2dyb3VuZHNbbGF5ZXJdLmRpc3Bvc2UoKVxuICAgICAgICAgICAgICAgQG9iamVjdC5iYWNrZ3JvdW5kc1tsYXllcl0gPSBudWxsXG4gICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgYWxsIHZpZXdwb3J0IGFuaW1hdGlvbnMgZXhjZXB0IHRoZSBtYWluIHZpZXdwb3J0IGFuaW1hdGlvbi5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBWaWV3cG9ydHNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgc2tpcFZpZXdwb3J0czogLT5cbiAgICAgICAgdmlld3BvcnRzID0gQG9iamVjdC52aWV3cG9ydENvbnRhaW5lci5zdWJPYmplY3RzXG4gICAgICAgIGZvciB2aWV3cG9ydCBpbiB2aWV3cG9ydHNcbiAgICAgICAgICAgIGlmIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiB2aWV3cG9ydC5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgYWxsIHBpY3R1cmUgYW5pbWF0aW9ucy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBQaWN0dXJlc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgXG4gICAgc2tpcFBpY3R1cmVzOiAtPlxuICAgICAgICBmb3IgcGljdHVyZSBpbiBAb2JqZWN0LnBpY3R1cmVzXG4gICAgICAgICAgICBpZiBwaWN0dXJlXG4gICAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBwaWN0dXJlLmNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogU2tpcHMgYWxsIHRleHQgYW5pbWF0aW9ucy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBUZXh0c1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBza2lwVGV4dHM6IC0+XG4gICAgICAgZm9yIHRleHQgaW4gQG9iamVjdC50ZXh0c1xuICAgICAgICAgICAgaWYgdGV4dFxuICAgICAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gdGV4dC5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIGFsbCB2aWRlbyBhbmltYXRpb25zIGJ1dCBub3QgdGhlIHZpZGVvLXBsYXliYWNrIGl0c2VsZi5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBWaWRlb3NcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgc2tpcFZpZGVvczogLT5cbiAgICAgICAgZm9yIHZpZGVvIGluIEBvYmplY3QudmlkZW9zXG4gICAgICAgICAgICBpZiB2aWRlb1xuICAgICAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gdmlkZW8uY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2tpcD8oKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyBhbGwgYmFja2dyb3VuZCBhbmltYXRpb25zLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcEJhY2tncm91bmRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjIFxuICAgIHNraXBCYWNrZ3JvdW5kczogLT5cbiAgICAgICAgZm9yIGJhY2tncm91bmQgaW4gQG9iamVjdC5iYWNrZ3JvdW5kc1xuICAgICAgICAgICAgaWYgYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gYmFja2dyb3VuZC5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIGFsbCBjaGFyYWN0ZXIgYW5pbWF0aW9uc1xuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcENoYXJhY3RlcnNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgc2tpcENoYXJhY3RlcnM6IC0+XG4gICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gQG9iamVjdC5jaGFyYWN0ZXJzXG4gICAgICAgICAgICBpZiBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICBmb3IgY29tcG9uZW50IGluIGNoYXJhY3Rlci5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIHRoZSBtYWluIHZpZXdwb3J0IGFuaW1hdGlvbi5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBNYWluVmlld3BvcnRcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgXG4gICAgc2tpcE1haW5WaWV3cG9ydDogLT5cbiAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBAb2JqZWN0LnZpZXdwb3J0LmNvbXBvbmVudHNcbiAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIGFsbCBhbmltYXRpb25zIG9mIGFsbCBtZXNzYWdlIGJveGVzIGRlZmluZWQgaW4gTUVTU0FHRV9CT1hfSURTIHVpIGNvbnN0YW50LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcE1lc3NhZ2VCb3hlc1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBza2lwTWVzc2FnZUJveGVzOiAtPlxuICAgICAgICBmb3IgbWVzc2FnZUJveElkIGluIGdzLlVJQ29uc3RhbnRzLk1FU1NBR0VfQk9YX0lEUyB8fCBbXCJtZXNzYWdlQm94XCIsIFwibnZsTWVzc2FnZUJveFwiXVxuICAgICAgICAgICAgbWVzc2FnZUJveCA9IGdzLk9iamVjdE1hbmFnZXIuY3VycmVudC5vYmplY3RCeUlkKG1lc3NhZ2VCb3hJZClcbiAgICAgICAgICAgIGlmIG1lc3NhZ2VCb3guY29tcG9uZW50c1xuICAgICAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gbWVzc2FnZUJveC5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpIFxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyBhbGwgYW5pbWF0aW9ucyBvZiBhbGwgbWVzc2FnZSBhcmVhcy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBNZXNzYWdlQXJlYXNcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgXG4gICAgc2tpcE1lc3NhZ2VBcmVhczogLT5cbiAgICAgICAgZm9yIG1lc3NhZ2VBcmVhIGluIEBvYmplY3QubWVzc2FnZUFyZWFzXG4gICAgICAgICAgICBpZiBtZXNzYWdlQXJlYT8ubWVzc2FnZVxuICAgICAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gbWVzc2FnZUFyZWEubWVzc2FnZS5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5za2lwPygpXG4gICAgICAgICAgICAgICBcbiAgICAgICAgbXNnID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQoXCJnYW1lTWVzc2FnZV9tZXNzYWdlXCIpICAgICBcbiAgICAgICAgaWYgbXNnXG4gICAgICAgICAgICBmb3IgY29tcG9uZW50IGluIG1zZy5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgbXNnID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdEJ5SWQoXCJudmxHYW1lTWVzc2FnZV9tZXNzYWdlXCIpICAgICBcbiAgICAgICAgaWYgbXNnXG4gICAgICAgICAgICBmb3IgY29tcG9uZW50IGluIG1zZy5jb21wb25lbnRzXG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnNraXA/KClcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFNraXBzIHRoZSBzY2VuZSBpbnRlcnByZXRlciB0aW1lci5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNraXBJbnRlcnByZXRlclxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICBza2lwSW50ZXJwcmV0ZXI6IC0+XG4gICAgICAgIGlmIEBvYmplY3QuaW50ZXJwcmV0ZXIud2FpdENvdW50ZXIgPiBHYW1lTWFuYWdlci50ZW1wU2V0dGluZ3Muc2tpcFRpbWVcbiAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIud2FpdENvdW50ZXIgPSBHYW1lTWFuYWdlci50ZW1wU2V0dGluZ3Muc2tpcFRpbWVcbiAgICAgICAgICAgIGlmIEBvYmplY3QuaW50ZXJwcmV0ZXIud2FpdENvdW50ZXIgPT0gMFxuICAgICAgICAgICAgICAgIEBvYmplY3QuaW50ZXJwcmV0ZXIuaXNXYWl0aW5nID0gbm9cbiAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyB0aGUgaW50ZXJwcmV0ZXIgdGltZXIgb2YgYWxsIGNvbW1vbiBldmVudHMuXG4gICAgKlxuICAgICogQG1ldGhvZCBza2lwQ29tbW9uRXZlbnRzXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgIyMjICBcbiAgICBza2lwQ29tbW9uRXZlbnRzOiAtPlxuICAgICAgICBldmVudHMgPSBAb2JqZWN0LmNvbW1vbkV2ZW50Q29udGFpbmVyLnN1Yk9iamVjdHNcbiAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50c1xuICAgICAgICAgICAgaWYgZXZlbnQ/LmludGVycHJldGVyIGFuZCBldmVudC5pbnRlcnByZXRlci53YWl0Q291bnRlciA+IEdhbWVNYW5hZ2VyLnRlbXBTZXR0aW5ncy5za2lwVGltZVxuICAgICAgICAgICAgICAgIGV2ZW50LmludGVycHJldGVyLndhaXRDb3VudGVyID0gR2FtZU1hbmFnZXIudGVtcFNldHRpbmdzLnNraXBUaW1lXG4gICAgICAgICAgICAgICAgaWYgZXZlbnQuaW50ZXJwcmV0ZXIud2FpdENvdW50ZXIgPT0gMFxuICAgICAgICAgICAgICAgICAgICBldmVudC5pbnRlcnByZXRlci5pc1dhaXRpbmcgPSBub1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyB0aGUgc2NlbmUncyBjb250ZW50LlxuICAgICpcbiAgICAqIEBtZXRob2Qgc2tpcENvbnRlbnRcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgXG4gICAgc2tpcENvbnRlbnQ6IC0+XG4gICAgICAgIEBza2lwUGljdHVyZXMoKVxuICAgICAgICBAc2tpcFRleHRzKClcbiAgICAgICAgQHNraXBWaWRlb3MoKVxuICAgICAgICBAc2tpcEJhY2tncm91bmRzKClcbiAgICAgICAgQHNraXBDaGFyYWN0ZXJzKClcbiAgICAgICAgQHNraXBNYWluVmlld3BvcnQoKVxuICAgICAgICBAc2tpcFZpZXdwb3J0cygpXG4gICAgICAgIEBza2lwTWVzc2FnZUJveGVzKClcbiAgICAgICAgQHNraXBNZXNzYWdlQXJlYXMoKVxuICAgICAgICBAc2tpcEludGVycHJldGVyKClcbiAgICAgICAgQHNraXBDb21tb25FdmVudHMoKVxuICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIENoZWNrcyBmb3IgdGhlIHNob3J0Y3V0IHRvIGhpZGUvc2hvdyB0aGUgZ2FtZSBVSS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgc3BhY2Uta2V5LiBZb3VcbiAgICAqIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjaGFuZ2UgdGhlIHNob3J0Y3V0LlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlVUlWaXNpYmlsaXR5U2hvcnRjdXRcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgXG4gICAgdXBkYXRlVUlWaXNpYmlsaXR5U2hvcnRjdXQ6IC0+XG4gICAgICAgIGlmICFAdWlWaXNpYmxlIGFuZCAoSW5wdXQudHJpZ2dlcihJbnB1dC5DKSBvciBJbnB1dC5Nb3VzZS5idXR0b25Eb3duKVxuICAgICAgICAgICAgQGNoYW5nZVVJVmlzaWJpbGl0eSghQHVpVmlzaWJsZSlcbiAgICAgICAgaWYgSW5wdXQudHJpZ2dlcihJbnB1dC5LRVlfU1BBQ0UpXG4gICAgICAgICAgICBAY2hhbmdlVUlWaXNpYmlsaXR5KCFAdWlWaXNpYmxlKVxuICAgIFxuICAgICMjIypcbiAgICAqIENoZWNrcyBmb3IgdGhlIHNob3J0Y3V0IHRvIGV4aXQgdGhlIGdhbWUuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIGVzY2FwZS1rZXkuIFlvdVxuICAgICogY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgc2hvcnRjdXQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVRdWl0U2hvcnRjdXRcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgICAgICBcbiAgICB1cGRhdGVRdWl0U2hvcnRjdXQ6IC0+XG4gICAgICAgIGlmIElucHV0LnRyaWdnZXIoSW5wdXQuS0VZX0VTQ0FQRSlcbiAgICAgICAgICAgIGdzLkFwcGxpY2F0aW9uLmV4aXQoKVxuICAgIFxuICAgIFxuICAgICMjIypcbiAgICAqIENoZWNrcyBmb3IgdGhlIHNob3J0Y3V0IHRvIG9wZW4gdGhlIHNldHRpbmdzIG1lbnUuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHMta2V5LiBZb3VcbiAgICAqIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjaGFuZ2UgdGhlIHNob3J0Y3V0LlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlU2V0dGluZ3NTaG9ydGN1dFxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICAgICAgXG4gICAgdXBkYXRlU2V0dGluZ3NTaG9ydGN1dDogLT5cbiAgICAgICAgaWYgR2FtZU1hbmFnZXIudGVtcFNldHRpbmdzLm1lbnVBY2Nlc3MgYW5kIElucHV0LnRyaWdnZXIoSW5wdXQuWClcbiAgICAgICAgICAgIFNjZW5lTWFuYWdlci5zd2l0Y2hUbyhuZXcgZ3MuT2JqZWN0X0xheW91dChcInNldHRpbmdzTWVudUxheW91dFwiKSwgdHJ1ZSlcbiAgICAgXG4gICAgIyMjKlxuICAgICogQ2hlY2tzIGZvciB0aGUgc2hvcnRjdXQgdG8gb3BlbiB0aGUgc2V0dGluZ3MgbWVudS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgY29udHJvbC1rZXkuIFlvdVxuICAgICogY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgc2hvcnRjdXQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVTa2lwU2hvcnRjdXRcbiAgICAqIEBwcm90ZWN0ZWRcbiAgICAjIyMgICAgICAgICBcbiAgICB1cGRhdGVTa2lwU2hvcnRjdXQ6IC0+XG4gICAgICAgIGlmIEBvYmplY3Quc2V0dGluZ3MuYWxsb3dTa2lwXG4gICAgICAgICAgICBpZiBJbnB1dC5rZXlzW0lucHV0LktFWV9DT05UUk9MXSA9PSAxXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIudGVtcFNldHRpbmdzLnNraXAgPSB5ZXNcbiAgICAgICAgICAgIGVsc2UgaWYgSW5wdXQua2V5c1tJbnB1dC5LRVlfQ09OVFJPTF0gPT0gMlxuICAgICAgICAgICAgICAgIEdhbWVNYW5hZ2VyLnRlbXBTZXR0aW5ncy5za2lwID0gbm9cbiAgICAgICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBDaGVja3MgZm9yIGRlZmF1bHQga2V5Ym9hcmQgc2hvcnRjdXRzIGUuZyBzcGFjZS1rZXkgdG8gaGlkZSB0aGUgVUksIGV0Yy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVNob3J0Y3V0c1xuICAgICogQHByb3RlY3RlZFxuICAgICMjIyBcbiAgICB1cGRhdGVTaG9ydGN1dHM6IC0+XG4gICAgICAgIEB1cGRhdGVTZXR0aW5nc1Nob3J0Y3V0KClcbiAgICAgICAgQHVwZGF0ZVF1aXRTaG9ydGN1dCgpXG4gICAgICAgIEB1cGRhdGVVSVZpc2liaWxpdHlTaG9ydGN1dCgpXG4gICAgICAgIEB1cGRhdGVTa2lwU2hvcnRjdXQoKVxuXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgZnVsbCBzY3JlZW4gdmlkZW8gcGxheWVkIHZpYSBQbGF5IE1vdmllIGNvbW1hbmQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVWaWRlb1xuICAgICMjIyAgXG4gICAgdXBkYXRlVmlkZW86IC0+XG4gICAgICAgIGlmIEBvYmplY3QudmlkZW8/XG4gICAgICAgICAgICBAb2JqZWN0LnZpZGVvLnVwZGF0ZSgpXG4gICAgICAgICAgICBpZiBAb2JqZWN0LnNldHRpbmdzLmFsbG93VmlkZW9Ta2lwIGFuZCAoSW5wdXQudHJpZ2dlcihJbnB1dC5DKSBvciBJbnB1dC5Nb3VzZS5idXR0b25zW0lucHV0Lk1vdXNlLkxFRlRdID09IDIpXG4gICAgICAgICAgICAgICAgQG9iamVjdC52aWRlby5zdG9wKClcbiAgICAgICAgICAgIElucHV0LmNsZWFyKClcbiAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyBza2lwcGluZyBpZiBlbmFibGVkLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlU2tpcHBpbmdcbiAgICAjIyMgICAgICAgICBcbiAgICB1cGRhdGVTa2lwcGluZzogLT5cbiAgICAgICAgaWYgIUBvYmplY3Quc2V0dGluZ3MuYWxsb3dTa2lwXG4gICAgICAgICAgICBAb2JqZWN0LnRlbXBTZXR0aW5ncy5za2lwID0gbm9cbiAgICAgICAgICAgIFxuICAgICAgICBpZiBHYW1lTWFuYWdlci50ZW1wU2V0dGluZ3Muc2tpcFxuICAgICAgICAgICAgQHNraXBDb250ZW50KClcbiAgICAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIHNjZW5lJ3MgY29udGVudC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZUNvbnRlbnRcbiAgICAjIyMgICAgICBcbiAgICB1cGRhdGVDb250ZW50OiAtPlxuICAgICAgICAjaWYgIUBvYmplY3QuaW50ZXJwcmV0ZXIuaXNSdW5uaW5nIGFuZCAhR3JhcGhpY3MuZnJvemVuXG4gICAgICAgICMgICAgQHNldHVwSW50ZXJwcmV0ZXIoKVxuICAgICAgICBHYW1lTWFuYWdlci5zY2VuZSA9IEBvYmplY3RcbiAgICAgICAgR3JhcGhpY3Mudmlld3BvcnQudXBkYXRlKClcbiAgICAgICAgQG9iamVjdC52aWV3cG9ydC51cGRhdGUoKVxuICAgIFxuICAgICAgICBAdXBkYXRlU2tpcHBpbmcoKVxuICAgICAgICBAdXBkYXRlVmlkZW8oKVxuICAgICAgICBAdXBkYXRlU2hvcnRjdXRzKClcblxuICAgICAgICBzdXBlcigpXG4gICAgICAgIFxudm4uQ29tcG9uZW50X0dhbWVTY2VuZUJlaGF2aW9yID0gQ29tcG9uZW50X0dhbWVTY2VuZUJlaGF2aW9yIl19
1450 1450 //# sourceURL=Component_GameSceneBehavior_42.js