<!DOCTYPE html>
<html>

  <head>
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel="stylesheet" data-semver="3.3.6" data-require="bootstrap-css@*" />
    <link data-require="font-awesome@*" data-semver="4.5.0" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.css" />
    <script data-require="jquery@1.11.3" data-semver="1.11.3" src="//code.jquery.com/jquery-1.11.3.min.js"></script>
    <script data-require="angular.js@1.5.0" data-semver="1.5.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
    <script data-require="ui-bootstrap@*" data-semver="1.1.1" src="//cdn.rawgit.com/angular-ui/bootstrap/gh-pages/ui-bootstrap-1.1.1.js"></script>
    <link href="style.css" rel="stylesheet" />
<!--    <script src="abv.js"></script>-->

<script src="//rawgit.com/trajano/angular-bootstrap-validator/v1.1.1/angular-bootstrap-validator.js"></script>

    <script src="script.js"></script>
  </head>

  <body ng-app="myapp"  ng-controller="RegisterController as ctrl">
    <h1>Hello Plunker!</h1>
    <form name="ctrl.myForm" abv-form="">
      <fieldset class="form-group has-feedback">
        <label for="email">E-mail</label>
        <input class="form-control " type="email" required="" id="email" />
        <div class="help-block with-errors" data-abv-error="required">E-mail is required</div>
        <div class="help-block with-errors" data-abv-error="email">E-mail not valid</div>
      </fieldset>
      <fieldset class="form-group  has-feedback">
        <label for="password">Password</label>
        <input class="form-control" type="password" required="" id="password" />
        <div class="help-block with-errors" data-abv-error="required">Password is required</div>
      </fieldset>
      <fieldset class="form-group  has-feedback">
        <label for="confirmPassword">Confirm Password</label>
        <input class="form-control" type="password" required="" id="confirmPassword" abv-identical="password" ng-model="confirmPassword"/>
        <div class="help-block with-errors" data-abv-error="required">Confirmation password is required</div>
        <div class="help-block with-errors" data-abv-error="abvIdentical">Confirmation does not match</div>
      </fieldset>
      <div class="form-group">
        <button class="btn btn-primary" type="submit"  ng-click="ctrl.register()">Register</button>
      </div>
    </form>
    <pre>{{ ctrl | json }}</pre>
  </body>

</html>
angular.module('myapp', ['ui.bootstrap', 'angular.bootstrap.validator'])
  .controller('RegisterController', function() {
    var vm = this;
    vm.register = function() {
      console.log(vm.myForm.email.$modelValue);
      console.log(vm.myForm.password.$modelValue);
      vm.myForm.$setPristine();
    };
  });
/* Styles go here */

"use strict";!function(){angular.module("angular.bootstrap.validator",[])}(),function(){angular.module("angular.bootstrap.validator").directive("abvDifferent",function(){return{restrict:"A",scope:{targetModel:"=abvDifferent"},require:"ngModel",link:function(t,a,e,n){n.$validators.abvDifferent=function(a){return a!==t.targetModel},t.$watch("targetModel",function(){n.$validate()})}}})}(),function(){angular.module("angular.bootstrap.validator").directive("abvError",["$animate","$log",function(t,a){return{restrict:"A",scope:{validatorName:"@abvError",oldControlName:"@abvModel",controlName:"@abvFor"},require:"^form",terminal:!0,link:function(e,n,r,o){var i;e.oldControlName&&(a.warn("abv-model is deprecated use abv-for"),e.controlName=e.oldControlName),i=e.controlName?e.controlName:n.siblings(".form-control")[0]?n.siblings(".form-control")[0].name:n.parent().find('input[type="checkbox"]')[0].name;var l="$parent."+o.$name,c=l+".$submitted && "+l+"."+i+".$error."+e.validatorName;e.$watch(c,function(a){t[a?"removeClass":"addClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}])}(),function(){angular.module("angular.bootstrap.validator").directive("abvForm",["$compile",function(t){function a(t){var a=$(t),e=a.attr("name");return e||(e=a.attr("id"),a.attr("name",e)),a.attr("ng-model")||a.data("ng-model")||a.attr("ng-model",e),e}function e(t,a){return"{'has-success': "+t+".$submitted && "+t+"."+a+".$valid, 'has-error': "+t+".$submitted && "+t+"."+a+".$invalid }"}return{require:"form",restrict:"A",terminal:!0,compile:function(){return function(n,r,o,i){n.resetForm=function(){i.$commitViewValue(),i.$setPristine()};var l=i.$name;r.find('button[type="submit"]').attr("ng-disabled",l+".$submitted && "+l+".$invalid"),r.find('button[type="reset"]').attr("ng-click","resetForm()"),r.attr("novalidate","novalidate"),r.find(".form-group").each(function(t,n){var r=$(n).find(".form-control");r.each(function(t,r){var o=a(r);$(n).hasClass("has-feedback")&&angular.element(r).after('<span class="glyphicon form-control-feedback" ng-class="{\'glyphicon-ok\' : '+l+"."+o+".$valid, 'glyphicon-remove' : "+l+"."+o+'.$invalid }" ng-if="'+l+'.$submitted" aria-hidden="true"></span>'),angular.element(n).attr("ng-class",e(l,o))})}),r.find(".checkbox").each(function(t,n){var r=$(n).find('input[type="checkbox"]');if(1===r.length){var o=a(r[0]);angular.element(n).wrap('<div ng-class="'+e(l,o)+'"></div>')}}),t(r.contents())(n)}}}}])}(),function(){angular.module("angular.bootstrap.validator").directive("abvIdentical",function(){return{restrict:"A",scope:{targetModel:"=abvIdentical"},require:"ngModel",link:function(t,a,e,n){n.$validators.abvIdentical=function(a){return a===t.targetModel},t.$watch("targetModel",function(){n.$validate()})}}})}();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItYm9vdHN0cmFwLXZhbGlkYXRvci5qcyIsImRpcmVjdGl2ZXMvYWJ2RGlmZmVyZW50LmpzIiwiZGlyZWN0aXZlcy9hYnZFcnJvci5qcyIsImRpcmVjdGl2ZXMvYWJ2Rm9ybS5qcyIsImRpcmVjdGl2ZXMvYWJ2SWRlbnRpY2FsLmpzIl0sIm5hbWVzIjpbImFuZ3VsYXIiLCJtb2R1bGUiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInNjb3BlIiwidGFyZ2V0TW9kZWwiLCJyZXF1aXJlIiwibGluayIsImVsZW1lbnQiLCJhdHRyaWJ1dGVzIiwibmdNb2RlbCIsIiR2YWxpZGF0b3JzIiwiYWJ2RGlmZmVyZW50IiwibW9kZWxWYWx1ZSIsIiR3YXRjaCIsIiR2YWxpZGF0ZSIsIiRhbmltYXRlIiwiJGxvZyIsInZhbGlkYXRvck5hbWUiLCJvbGRDb250cm9sTmFtZSIsImNvbnRyb2xOYW1lIiwidGVybWluYWwiLCJhdHRycyIsImZvcm0iLCJ3YXJuIiwic2libGluZ3MiLCJuYW1lIiwicGFyZW50IiwiZmluZCIsImZvcm1OYW1lIiwiJG5hbWUiLCJ3YXRjaEV4cHIiLCJ2YWx1ZSIsInRlbXBDbGFzc2VzIiwiJGNvbXBpbGUiLCJhZGROYW1lTmdNb2RlbFRvQ29udHJvbEFuZEdldENvbnRyb2xOYW1lIiwiY29udHJvbEVsZW1lbnQiLCJjb250cm9sIiwiJCIsImF0dHIiLCJkYXRhIiwibmdDbGFzc0F0dHJpYnV0ZSIsImNvbXBpbGUiLCJjb250cm9sbGVyIiwicmVzZXRGb3JtIiwiJGNvbW1pdFZpZXdWYWx1ZSIsIiRzZXRQcmlzdGluZSIsImVhY2giLCJpbmRleCIsImZvcm1Hcm91cCIsImNvbnRyb2xzIiwiaGFzQ2xhc3MiLCJhZnRlciIsImNoZWNrYm94IiwibGVuZ3RoIiwid3JhcCIsImNvbnRlbnRzIiwiYWJ2SWRlbnRpY2FsIl0sIm1hcHBpbmdzIjoiQUFBQSxjQUFBLFdBR0FBLFFBQUFDLE9BQUEscUNDSEEsV0FHQUQsUUFBQUMsT0FBQSwrQkFD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QUFBZCxFQUFBWixFQUFBVCxHQUFBLGVBR0FjLEVBQUExQixFQUFBZ0QsWUFBQXBELFlDMUVBLFdBR0FKLFFBQUFDLE9BQUEsK0JBQ0FDLFVBQUEsZUFBQSxXSnlKSSxPSXhKSkMsU0FBQSxJQUNBQyxPQUNBQyxZQUFBLGlCQUVBQyxRQUFBLFVBQ0FDLEtBQUEsU0FBQUgsRUFBQUksRUFBQUMsRUFBQUMsR0FFQUEsRUFBQUMsWUFBQThDLGFBQUEsU0FBQTVDLEdKMEpVLE1JMUpWQSxLQUFBVCxFQUFBQyxhQUVBRCxFQUFBVSxPQUFBLGNBQUEsV0FDQUosRUFBQUsiLCJmaWxlIjoiYW5ndWxhci1ib290c3RyYXAtdmFsaWRhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiYW5ndWxhci5tb2R1bGUoJ2FuZ3VsYXIuYm9vdHN0cmFwLnZhbGlkYXRvcicsIFtdKVxyXG4iLCJhbmd1bGFyLm1vZHVsZSgnYW5ndWxhci5ib290c3RyYXAudmFsaWRhdG9yJylcclxuICAuZGlyZWN0aXZlKCdhYnZEaWZmZXJlbnQnLCAoKSA9PiAoe1xyXG4gICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgIHNjb3BlOiB7XHJcbiAgICAgIHRhcmdldE1vZGVsOiAnPWFidkRpZmZlcmVudCdcclxuICAgIH0sXHJcbiAgICByZXF1aXJlOiAnbmdNb2RlbCcsXHJcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cmlidXRlcywgbmdNb2RlbCkge1xyXG5cclxuICAgICAgbmdNb2RlbC4kdmFsaWRhdG9ycy5hYnZEaWZmZXJlbnQgPSBtb2RlbFZhbHVlID0+IG1vZGVsVmFsdWUgIT09IHNjb3BlLnRhcmdldE1vZGVsXHJcblxyXG4gICAgICBzY29wZS4kd2F0Y2goJ3RhcmdldE1vZGVsJywgKCkgPT4ge1xyXG4gICAgICAgIG5nTW9kZWwuJHZhbGlkYXRlKClcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9KSlcclxuIiwiYW5ndWxhci5tb2R1bGUoJ2FuZ3VsYXIuYm9vdHN0cmFwLnZhbGlkYXRvcicpXHJcbiAgLmRpcmVjdGl2ZSgnYWJ2RXJyb3InLCAoJGFuaW1hdGUsICRsb2cpID0+ICh7XHJcbiAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgc2NvcGU6IHtcclxuICAgICAgdmFsaWRhdG9yTmFtZTogJ0BhYnZFcnJvcicsXHJcbiAgICAgIG9sZENvbnRyb2xOYW1lOiAnQGFidk1vZGVsJyxcclxuICAgICAgY29udHJvbE5hbWU6ICdAYWJ2Rm9yJ1xyXG4gICAgfSxcclxuICAgIHJlcXVpcmU6ICdeZm9ybScsXHJcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcclxuICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMsIGZvcm0pID0+IHtcclxuICAgICAgdmFyIGNvbnRyb2xOYW1lXHJcbiAgICAgIGlmIChzY29wZS5vbGRDb250cm9sTmFtZSkge1xyXG4gICAgICAgICRsb2cud2FybignYWJ2LW1vZGVsIGlzIGRlcHJlY2F0ZWQgdXNlIGFidi1mb3InKVxyXG4gICAgICAgIHNjb3BlLmNvbnRyb2xOYW1lID0gc2NvcGUub2xkQ29udHJvbE5hbWVcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2NvcGUuY29udHJvbE5hbWUpIHtcclxuICAgICAgICBjb250cm9sTmFtZSA9IHNjb3BlLmNvbnRyb2xOYW1lXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuc2libGluZ3MoJy5mb3JtLWNvbnRyb2wnKVswXSkge1xyXG4gICAgICAgICAgY29udHJvbE5hbWUgPSBlbGVtZW50LnNpYmxpbmdzKCcuZm9ybS1jb250cm9sJylbMF0ubmFtZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb250cm9sTmFtZSA9IGVsZW1lbnQucGFyZW50KCkuZmluZCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJylbMF0ubmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgZm9ybU5hbWUgPSBgJHBhcmVudC4ke2Zvcm0uJG5hbWV9YFxyXG4gICAgICB2YXIgd2F0Y2hFeHByID0gYCR7Zm9ybU5hbWV9LiRzdWJtaXR0ZWQgJiYgJHtmb3JtTmFtZX0uJHtjb250cm9sTmFtZX0uJGVycm9yLiR7c2NvcGUudmFsaWRhdG9yTmFtZX1gXHJcbiAgICAgIHNjb3BlLiR3YXRjaCh3YXRjaEV4cHIsIHZhbHVlID0+IHtcclxuICAgICAgICAkYW5pbWF0ZVt2YWx1ZSA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShlbGVtZW50LCAnbmctaGlkZScsIHtcclxuICAgICAgICAgIHRlbXBDbGFzc2VzOiAnbmctaGlkZS1hbmltYXRlJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiIsIi8qIGdsb2JhbHMgJCAqL1xyXG5hbmd1bGFyLm1vZHVsZSgnYW5ndWxhci5ib290c3RyYXAudmFsaWRhdG9yJylcclxuICAuZGlyZWN0aXZlKCdhYnZGb3JtJywgJGNvbXBpbGUgPT4ge1xyXG4gICAgZnVuY3Rpb24gYWRkTmFtZU5nTW9kZWxUb0NvbnRyb2xBbmRHZXRDb250cm9sTmFtZShjb250cm9sRWxlbWVudCkge1xyXG4gICAgICB2YXIgY29udHJvbCA9ICQoY29udHJvbEVsZW1lbnQpXHJcbiAgICAgIHZhciBjb250cm9sTmFtZSA9IGNvbnRyb2wuYXR0cignbmFtZScpXHJcbiAgICAgIGlmICghY29udHJvbE5hbWUpIHtcclxuICAgICAgICBjb250cm9sTmFtZSA9IGNvbnRyb2wuYXR0cignaWQnKVxyXG4gICAgICAgIGNvbnRyb2wuYXR0cignbmFtZScsIGNvbnRyb2xOYW1lKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghY29udHJvbC5hdHRyKCduZy1tb2RlbCcpICYmICFjb250cm9sLmRhdGEoJ25nLW1vZGVsJykpIHtcclxuICAgICAgICBjb250cm9sLmF0dHIoJ25nLW1vZGVsJywgY29udHJvbE5hbWUpXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbnRyb2xOYW1lXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG5nQ2xhc3NBdHRyaWJ1dGUoZm9ybU5hbWUsIGNvbnRyb2xOYW1lKSB7XHJcbiAgICAgIHJldHVybiBgeydoYXMtc3VjY2Vzcyc6ICR7Zm9ybU5hbWV9LiRzdWJtaXR0ZWQgJiYgJHtmb3JtTmFtZX0uJHtjb250cm9sTmFtZX0uJHZhbGlkLCAnaGFzLWVycm9yJzogJHtmb3JtTmFtZX0uJHN1Ym1pdHRlZCAmJiAke2Zvcm1OYW1lfS4ke2NvbnRyb2xOYW1lfS4kaW52YWxpZCB9YFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlcXVpcmU6ICdmb3JtJyxcclxuICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgdGVybWluYWw6IHRydWUsXHJcbiAgICAgIGNvbXBpbGU6ICgpID0+IChzY29wZSwgZWxlbWVudCwgYXR0ciwgY29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgIC8vIHJlc2V0IGZvcm0gZnVuY3Rpb25cclxuICAgICAgICBzY29wZS5yZXNldEZvcm0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGNvbnRyb2xsZXIuJGNvbW1pdFZpZXdWYWx1ZSgpXHJcbiAgICAgICAgICBjb250cm9sbGVyLiRzZXRQcmlzdGluZSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm9ybU5hbWUgPSBjb250cm9sbGVyLiRuYW1lXHJcblxyXG4gICAgICAgIC8vIGRpc2FibGUgc3VibWl0IGJ1dHRvbnMgd2hlbiB0aGUgZm9ybSBpcyBpbnZhbGlkIGFmdGVyIHN1Ym1pdFxyXG4gICAgICAgIGVsZW1lbnQuZmluZCgnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nKS5hdHRyKCduZy1kaXNhYmxlZCcsIGAke2Zvcm1OYW1lfS4kc3VibWl0dGVkICYmICR7Zm9ybU5hbWV9LiRpbnZhbGlkYClcclxuXHJcbiAgICAgICAgLy8gYXNzb2NpYXRlIHRoZSByZXNldCBidXR0b24gd2l0aCB0aGUgcmVzZXQgZm9ybSBmdW5jdGlvblxyXG4gICAgICAgIGVsZW1lbnQuZmluZCgnYnV0dG9uW3R5cGU9XCJyZXNldFwiXScpLmF0dHIoJ25nLWNsaWNrJywgJ3Jlc2V0Rm9ybSgpJylcclxuXHJcbiAgICAgICAgLy8gZGlzYWJsZSBuYXRpdmUgZm9ybSB2YWxpZGF0aW9uIGJlY2F1c2UgdGhlIHZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSBBbmd1bGFyXHJcbiAgICAgICAgZWxlbWVudC5hdHRyKCdub3ZhbGlkYXRlJywgJ25vdmFsaWRhdGUnKVxyXG5cclxuICAgICAgICAvLyBmb3IgZWFjaCBmb3JtLWNvbnRyb2wgaW4gYSBmb3JtIGdyb3VwXHJcbiAgICAgICAgZWxlbWVudC5maW5kKCcuZm9ybS1ncm91cCcpLmVhY2goKGluZGV4LCBmb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgIHZhciBjb250cm9scyA9ICQoZm9ybUdyb3VwKS5maW5kKCcuZm9ybS1jb250cm9sJylcclxuICAgICAgICAgIC8vIE9ubHkgaW5wdXQgdGV4dCBhcmVhcyBzaG91bGQgaGF2ZSBmZWVkYmFjaywgdGV4dGFyZWEgbXVzdCBub3QgaGF2ZSBmZWVkYmFja1xyXG4gICAgICAgICAgLy8gb25seSBzdXBwb3J0IG9uZSBjb250cm9sIHBlciBmb3JtLWdyb3VwIGFzIHBlciBCb290c3RyYXAgQ1NTIGV4YW1wbGVzXHJcbiAgICAgICAgICBjb250cm9scy5lYWNoKChpbmRleCwgY29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIG5hbWUuIGFuZCBuZy1tb2RlbCBhcHByb3ByaWF0ZWx5XHJcbiAgICAgICAgICAgIHZhciBjb250cm9sTmFtZSA9IGFkZE5hbWVOZ01vZGVsVG9Db250cm9sQW5kR2V0Q29udHJvbE5hbWUoY29udHJvbClcclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCBmZWVkYmFjayBpY29uc1xyXG4gICAgICAgICAgICBpZiAoJChmb3JtR3JvdXApLmhhc0NsYXNzKCdoYXMtZmVlZGJhY2snKSkge1xyXG4gICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudChjb250cm9sKS5hZnRlcihgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZm9ybS1jb250cm9sLWZlZWRiYWNrXCIgbmctY2xhc3M9XCJ7J2dseXBoaWNvbi1vaycgOiAke2Zvcm1OYW1lfS4ke2NvbnRyb2xOYW1lfS4kdmFsaWQsICdnbHlwaGljb24tcmVtb3ZlJyA6ICR7Zm9ybU5hbWV9LiR7Y29udHJvbE5hbWV9LiRpbnZhbGlkIH1cIiBuZy1pZj1cIiR7Zm9ybU5hbWV9LiRzdWJtaXR0ZWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+YClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBoYXMtZXJyb3IgQ1NTIGlmIHRoZSBmb3JtIGhhcyBiZWVuIHN1Ym1pdHRlZFxyXG4gICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZm9ybUdyb3VwKS5hdHRyKCduZy1jbGFzcycsIG5nQ2xhc3NBdHRyaWJ1dGUoZm9ybU5hbWUsIGNvbnRyb2xOYW1lKSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLy8gZm9yIGVhY2ggY2hlY2tib3gsIHdyYXAgaW4gYSBjb250YWluZXIgZGl2XHJcbiAgICAgICAgZWxlbWVudC5maW5kKCcuY2hlY2tib3gnKS5lYWNoKChpbmRleCwgY2hlY2tib3gpID0+IHtcclxuICAgICAgICAgIHZhciBjb250cm9scyA9ICQoY2hlY2tib3gpLmZpbmQoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpXHJcbiAgICAgICAgICBpZiAoY29udHJvbHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIHNldCB0aGUgbmFtZS4gYW5kIG5nLW1vZGVsIGFwcHJvcHJpYXRlbHlcclxuICAgICAgICAgICAgdmFyIGNvbnRyb2xOYW1lID0gYWRkTmFtZU5nTW9kZWxUb0NvbnRyb2xBbmRHZXRDb250cm9sTmFtZShjb250cm9sc1swXSlcclxuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KGNoZWNrYm94KS53cmFwKGA8ZGl2IG5nLWNsYXNzPVwiJHtuZ0NsYXNzQXR0cmlidXRlKGZvcm1OYW1lLCBjb250cm9sTmFtZSl9XCI+PC9kaXY+YClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVudHMoKSkoc2NvcGUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KVxyXG4iLCJhbmd1bGFyLm1vZHVsZSgnYW5ndWxhci5ib290c3RyYXAudmFsaWRhdG9yJylcclxuICAuZGlyZWN0aXZlKCdhYnZJZGVudGljYWwnLCAoKSA9PiAoe1xyXG4gICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgIHNjb3BlOiB7XHJcbiAgICAgIHRhcmdldE1vZGVsOiAnPWFidklkZW50aWNhbCdcclxuICAgIH0sXHJcbiAgICByZXF1aXJlOiAnbmdNb2RlbCcsXHJcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cmlidXRlcywgbmdNb2RlbCkge1xyXG5cclxuICAgICAgbmdNb2RlbC4kdmFsaWRhdG9ycy5hYnZJZGVudGljYWwgPSBtb2RlbFZhbHVlID0+IG1vZGVsVmFsdWUgPT09IHNjb3BlLnRhcmdldE1vZGVsXHJcblxyXG4gICAgICBzY29wZS4kd2F0Y2goJ3RhcmdldE1vZGVsJywgKCkgPT4ge1xyXG4gICAgICAgIG5nTW9kZWwuJHZhbGlkYXRlKClcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9KSlcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9